Подразумевается, что кнопка как поле ноды доступно в любом view_mode и views. При клике на кнопку вызывается кастомная форма заказа, в которую передаются значения полей текущей ноды: артикул (product_sku) и цена (product_price).
В таком случае, будет достаточно получить nid (node ID), чтобы потом загрузить объект ноды и получить необходимые значения.
В отличии от корзины модуля drupal_commerce, где в рендер отдается форма с количеством и кнопкой, можно все упростить до простой ссылки вида:
где chekout - адрес формы, а 456 - nid
Самое простое - напрямую в шаблоне:
опасно, при смене темы или редактировании функционал может отвалится.
Думал в hook_install() создать новое текстовое поле, но придется дергать все ноды ради того, чтобы получить nid, обернуть в ссылку и сохранить в поле.
Комментарии
hook_node_view или hook_node_view_alter
Вот, что получилось:
<?php
/**
* Add extra-field for node:
* Implements hook_field_extra_fields().
*/
function mymodule_field_extra_fields() {
// product - entity type
// checkout - field name
$extra_fields['node']['product']['display']['checkout'] = array(
'label' => t('Buy'), // Label
'description' => t('Add buy button'), // Description
'weight' => 10, // Default weight
);
return $extra_fields;
} /**
* Implements hook_node_view().
*/
function mymodule_node_view($node, $view_mode, $langcode) {
static $extra_fields = array();
$key = 'node:' . $node->type . ':' . $view_mode;
if (!isset($extra_fields[$key])) {
$extra_fields[$key] = field_extra_fields_get_display('node', $node->type, $view_mode);
}
if (isset($extra_fields[$key]['checkout']) && $extra_fields[$key]['checkout']['visible']) {
$node->content['checkout'] = array(
'#markup' => '<a href="checout?' . $node->nid . '">' . t('Buy') . '</a>',
'#weight' => $extra_fields[$key]['checkout']['weight'],
);
}
}
?>
В Display manager можно управлять положением поля, но вьюс его не видит
А, вам во вьюс надо? Так возьмите просто выведите nid, а в настройках поля укажите "Заменить выводимое полем значение" и впишите
Да, что-то затупил. Хотел все одним махом - включил модуль и все работает )