我有这个代码实现了用于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),我的所有表单元素都被呈现出来。因为我想以不同的方式主题个别元素,我不能使用它;我喜欢自己渲染个人元素。
答案 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出现在表单的位置。