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) со всеми отображаемыми элементами формы. Поскольку я хочу оформить отдельный элемент по-другому, я не могу его использовать; Я люблю рендерить отдельные элементы самостоятельно.


person Andrew    schedule 23.10.2010    source источник
comment
dsm() следует разрешениям. Люди, у которых нет разрешения на доступ к информации о разработке, не увидят вывод dsm ().   -  person berkes    schedule 25.10.2010
comment
Я вхожу в систему как админ. Так что право доступа не проблема.   -  person Andrew    schedule 26.10.2010


Ответы (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.

person berkes    schedule 25.10.2010
comment
У меня нет проблем с тем, что hook_theme находится в шаблоне, потому что он используется, и мой шаблон также получает массив $ form. Но когда я пытаюсь визуализировать каждый элемент drupal_render, он ничего не показывает. Я проверил, и $ form содержит все необходимые мне элементы. Прямо сейчас у меня нет другого выбора, кроме как использовать $ search, который содержит отрисованные элементы, заключенные в теги, созданные самим модулем поиска. - person Andrew; 26.10.2010
comment
Нет. У вас есть проблема с hook_theme в template.php, потому что ваше решение не работает. По вашему вопросу :) - person berkes; 27.10.2010