0

我有这段代码为 durpal 搜索表单实现 hook_form_alter 并在那里添加了几个新元素。我还在我的 template.php 中为所述表单添加了主题覆盖代码。除此之外,我还在那里传递表单元素。一切正常 - 添加新元素,使用主题;但是,这就是问题所在。当我尝试使用 drupal_render 渲染表单的每个元素时,它不会显示任何内容。我检查了 $form 数组的内容,它包含所有必要的表单数据。这是我的代码的例外 -

我的模块

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;
   }
}

模板.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),其中呈现了我的所有表单元素。由于我想以不同的方式对单个元素进行主题化,所以我不能使用它;我喜欢自己渲染单个元素。

4

1 回答 1

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 行出现在表单的位置。

于 2010-10-25T09:42:43.210 回答