2010-10-23 3 views
0

У меня есть этот код, который реализует hook_form_alter для формы поиска durpal и добавляет пару новых элементов. Я также добавил тему переписать код в моей template.php для указанной формы. В дополнение к этому, я также передаю элементы формы там. Все работает отлично - добавляет новые элементы, тема используется, но вот в чем проблема. Когда я пытаюсь отобразить каждый элемент формы с помощью drupal_render, он ничего не отображает. Я проверил содержимое массива $ form и получил все необходимые данные формы. Это, кроме моего кода -drupal_render не отображает элемент формы

mymod.module

function mymod_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
     case 'search_theme_form':   
      $form['prop_type'] = array(
       '#type' => 'select', 
       '#default_value' => 'Selection A', 
       '#options' => array("Selection A","Selection B"), 
       '#attributes' => array('class'=>'Bold'),  
     ); 
     break; 
    } 
} 

template.php -

function mytheme_theme() { 
    return array(
     'search_theme_form' => array(
      'arguments' => array('form' => NULL),  
      'template' => 'search_myblock_form',   
     ), 

    ); 

} 

И есть еще одна странная проблема, которая, ДСМ Devel не смог даже показать, что внутри $ form. Мне пришлось использовать print_r, чтобы сначала получить строковое значение и передать его в dsm для отображения. Для чего стоит другое дело, внутри шаблона темы есть эта переменная ($ search_form) со всеми моими элементами формы. Поскольку я хочу, чтобы тема отдельного элемента по-разному, я не могу использовать его; Мне нравится делать отдельный элемент самостоятельно.

+0

'dsm()' следует за разрешениями. Люди, не имеющие разрешения на доступ к информации о развитии, не будут видеть вывод dsm(). – berkes

+0

Я вхожу в систему как администратор. Таким образом, право доступа не является проблемой. – Andrew

ответ

0

hook_theme должно быть внутри вашего модуля, а не template.php.

Но, похоже, вам не нужен form_alter и такой вообще. template.php есть переопределить эти тематические функции, то:

function MYTHEMENAME_search_theme_form($form) { 
    return "<h1>ceci nes't pas un form</h1>"; 
} 

Затем обновите тему реестра, и вы должны увидеть h1-линия, появляющаяся на месте формы.

+0

У меня нет проблем с hook_theme в шаблоне, потому что он используется, и мой шаблон также получает массив $ form. Но, когда я пытаюсь сделать каждый элемент drupal_render, он ничего не показывает. Я проверил, и $ form содержит все необходимые элементы. Прямо сейчас у меня нет выбора, кроме как использовать $ search, который содержит визуализированные элементы, заключенные в теги, созданные самим модулем поиска. – Andrew

+0

Нет. У вас проблема с hook_theme в template.php, потому что ваше решение не работает. По вашему вопросу :) – berkes

Смежные вопросы