Drupal 7: Как создать форму в псевдо-поле
После того как провозился пол ночи с решением казалось бы простейшей задачи, решил опубликовать её решение. Суть проста в псевдополе вывести форму созданную на Drupal Form API для реализации простой корзины заказов без Commerce и прочих монстров.
Собсбвенно код решения:
/**
* Создаём псевдополе посредством hook_field_extra_fields().
*/
function acard_field_extra_fields() {
$extra['node']['product']['display']['va_cart'] = array(
'label' => t('VA Cart'),
'description' => t('Provides JS VA cart field'),
'weight' => 0,
);
return $extra;
}
/**
* Создаём представление поля посредством hook_node_view().
*/
function acard_node_view($node, $view_mode, $langcode) {
if ($view_mode == 'full' && $node->type == 'product') {
dpm($node);
$form = drupal_get_form('acard_form_add'); // здесь зовём функцию в которой описана форма
$node->content['va_cart'] = $form; // Запихивает форму в отображение
}
}
/**
* Создаём форму через Form API hook_form().
*/
function acard_form_add($form, &$form_state){
$form = array();
$form['#attributes'] = array(
'class' => 'orderblck', // Задаём class формы
'id' => array('orderblckform') // Задаём ID формы
);
$form['text1'] = array(
'#type' => 'textfield', // Создаём простое текстовое поле
'#attributes' => array(
'class' => array('itm'),
'placeholder' => t('My field 1'),
),
'#id' => 'textField',
);
$form['selectedfield'] = array(
'#type' => 'select', // Создаём поле c выбором опций
'#title' => t('Selected'),
'#options' => array(
0 => t('No'),
1 => t('Yes'),
),
);
}
Естественно код выполняется в кастомном модуле. Надеюсь данный пример поможет кому-то сэкономить время.