Тематическая форма в Drupal, которая должна быть частью содержимого сущности

У меня есть форма в моем модуле (mymodule)...

function mymodule_form()
{
   $form['mytext'] = array(
     '#title' => 'Password',
     '#type' => 'password',
     '#size' => 10,
   );
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => 'Cool!',
   );
   $form['cool_submit'] = array(
     '#type' => 'submit',
     '#value' => 'Cool Submit!',
   );
   return $form;
}

Я использовал хук hook_entity_view для отображения этой формы во всех отображаемых объектах drupal.

function mymodule_entity_view($entity, $type, $view_mode, $langcode) {
  $entity->content['myadditionalfield'] = mymodule_form();
}

При отображении этой формы drupal сам добавляет тег DIV в mytext (поле пароля). Я хочу переопределить это и предоставить свои собственные теги DIV и тему для этой формы. Как это сделать?

Спасибо :-)


person 1s2a3n4j5e6e7v    schedule 21.06.2011    source источник


Ответы (1)


Я работал над этим вопросом, чтобы решить его. И проблема решилась. Я изменил приведенный выше код...

function mymodule_entity_view($entity, $type, $view_mode, $langcode) {
  $element = array(
    'start' => array(
        '#type' => 'button',
        '#name' => 'start', 
        '#button_type' => 'submit',
    ),
    'my_text' => array(
        '#type' => 'textfield',
        '#size' => 30, 
        '#maxlength' => 50,
    ),
    'my_submit' => array(
        '#type' => 'button',
        '#name' => 'Submit Discussion',
        '#button_type' => 'submit',
    ),
  );

  $entity->content['disc_bar'] = $element;
}

И проблема продолжала возникать всякий раз, когда отображалось текстовое поле или поле пароля. Я проверил массив типов в информационной функции системных элементов (ловушка elements_info) и обнаружил, что поля текстового поля и пароля имеют значение по умолчанию для #theme-wrapper. Я пытался переопределить это таким образом...

'my_text' => array(
        '#type' => 'textfield',
        '#size' => 30, 
        '#maxlength' => 50,
        '#theme-wrapper' => '',
),

и это сработало. Он не генерирует никаких дополнительных тегов деления... :-)

person 1s2a3n4j5e6e7v    schedule 21.06.2011
comment
вы могли бы добавить '#theme' => 'your_textfield_theming_function' и использовать hook_theme() и theme_your_textfield_theming_function(), чтобы переопределить тему текстового поля/пароля по умолчанию. (кстати, функция темы по умолчанию делает некоторые вещи и оборачивает ее в тему элемента формы). - person yoavmatchulsky; 21.06.2011