2013-05-22 69 views
0

我想在我的Drupal站点中显示自定义搜索表单。Drupal自定义HTML搜索表单

搜索表单只有一个文本框和旁边的提交按钮,不需要任何隐藏字段。

我想在我的模板简单的HTML表单,模仿正常的Drupal搜索表单:

<form accept-charset="UTF-8" id="search-form" method="post" action="/drupal/?q=search/page" class="search-form"> 
<div id="edit-basic" class="container-inline form-wrapper"> 
<div class="form-item form-type-textfield form-item-keys"> 
<input type="text" autocomplete="off" class="form-text" maxlength="255" size="40" name="keys" id="edit-keys" value="search" onBlur="if(this.value == '') { this.value = 'search'; }" onFocus="if(this.value == 'search') { this.value = ''; }" style="right:15px;"> 
</div> 
</div> 
<input type="hidden" value="form-Og2HsMomOhfRkoS262LFbqpN2NyIGeHHYfTF43Kynjs" name="form_build_id"> 
<input type="hidden" value="mfLsAR-y7CVQLcWY7hgZRGPbu3F3R5uQKKpZe3ppAi4" name="form_token"> 
<input type="hidden" value="search_form" name="form_id"> 
</form> 

但是,这已经得到了像一些问题:“形式已经过时。复制下面表单中的任何未保存的工作,然后重新加载此页面。

有没有一种方法可以使用自定义html格式作为Drupal搜索窗体?基本上我想重新设计默认的Drupal搜索表单,以适合我的需求。

回答

1

使用默认的Drupal搜索表单和改变它作为使用

/** Implements hook_form_FORM_ID_alter */ 
function mymodule_form_search_form_alter (& $form, & $form_state) 
{ 
    /* Do your alterations here */ 
} 

参考的Form API旨在帮助人们了解什么样的变化,你需要做出必要的。

将上面的代码中的Rplace mymodule与您的自定义模块的名称一起使用。要输出的形式,在模板中,可以使用下面的代码:

$form = drupal_get_form('search_form'); 
print render($form); 
+0

好了,我终于用一个module_invoke代码显示在我的模板作为一个块的搜索形式:** ** –

+0

为什么不能只使用admin/structure/block中的Blocks页面来显示搜索表单块?我想到,显然是错误的,有一个原因,在你的情况下使用块是不合适的。 – turibe

+0

使用module_invoke是一种方法,我也尝试在template.php中使用theme_form_alter(),并对表单css进行了一些自定义更改。它运作良好。仍然接受你的答案,因为它促使我​​看着hook_form_alter()。 –