Lab / Drupal

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'),
 ),
 );


 }

Естественно код выполняется в кастомном модуле. Надеюсь данный пример поможет кому-то сэкономить время.