drupal_render не отображает элемент формы
У меня есть этот код, который реализует hook_form_alter для формы поиска durpal и добавляет туда несколько новых элементов. Я также добавил код перезаписи темы в мой template.php для указанной формы. В дополнение к этому я также передаю элементы формы там. Все работает нормально - добавляет новые элементы, тема используется, но вот проблема. Когда я пытаюсь отобразить каждый элемент формы с drupal_render, он ничего не показывает. Я проверил содержимое массива $form и в нем есть все необходимые данные формы. Это за исключением моего кода -
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',
),
);
}
И есть еще одна странная проблема, которая заключается в том, что dsm от devel не может даже показать, что находится внутри $form. Мне пришлось использовать print_r, чтобы сначала получить строковое значение и передать его в dsm для отображения. Для чего стоит, еще одна вещь, внутри моего шаблона темы, есть эта переменная ($search_form) со всеми визуализированными элементами моей формы. Поскольку я хочу по-разному описать отдельный элемент, я не могу его использовать; Мне нравится отображать отдельные элементы самостоятельно.
1 ответ
hook_theme должен быть внутри вашего модуля, а не template.php.
Но, похоже, вам не нужен form_alter и тому подобное. Template.php должен переопределить эти функции темы:
function MYTHEMENAME_search_theme_form($form) {
return "<h1>ceci nes't pas un form</h1>";
}
Затем обновите реестр вашей темы, и вы должны увидеть строку h1, появляющуюся на месте формы.