drupal_render不呈现表单元素

时间:2010-10-23 14:04:49

标签: drupal search forms drupal-render

我有这个代码实现了用于durpal搜索表单的hook_form_alter,并在那里添加了几个新元素。我还在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',        
        ),

    );

}

还有一个奇怪的问题,即devel的dsm甚至无法显示$ form内部的内容。我必须首先使用print_r获取字符串值并将其提供给dsm进行显示。值得一提的是,另一件事是,在我的主题模板中,有一个变量($ search_form),我的所有表单元素都被呈现出来。因为我想以不同的方式主题个别元素,我不能使用它;我喜欢自己渲染个人元素。

1 个答案:

答案 0 :(得分: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-line出现在表单的位置。