Drupal 自定义 HTML 搜索表单

Posted

技术标签:

【中文标题】Drupal 自定义 HTML 搜索表单【英文标题】:Drupal Custom HTML Search Form 【发布时间】:2013-05-22 10:49:44 【问题描述】:

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

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

我尝试在我的模板中使用一个简单的 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 搜索表单并根据需要使用 hook_form_FORM_ID_alter 进行更改

/** Implements hook_form_FORM_ID_alter */
function mymodule_form_search_form_alter (& $form, & $form_state)

  /* Do your alterations here */

参考Form API 以帮助了解您需要进行哪些更改。

在上面的代码中将 mymodule 替换为您的自定义模块的名称。要输出表单,请在模板中使用以下代码:

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

【讨论】:

好吧,我终于使用了 module_invoke 代码将模板中的搜索表单显示为一个块: 为什么不能直接使用 admin/structure/block 的 Blocks 页面来显示 search-form 块?我想,显然是错误的,在你的情况下使用块是不合适的。 使用 module_invoke 是一种方法,我还尝试在 template.php 中使用 theme_form_alter() 并对表单 css 进行了一些自定义更改。它运作良好。仍然接受您的回答,因为它促使我​​查看 hook_form_alter()。

以上是关于Drupal 自定义 HTML 搜索表单的主要内容,如果未能解决你的问题,请参考以下文章

自定义模板中的Drupal 7自定义表单

PHP 在Drupal 6中自定义块搜索表单

实现自定义搜索表单的最佳方式

在Drupal6中自定义块搜索表单

Drupal创建自定义表单,上传文件代码

Drupal 7 - 自定义模块:在节点提交中使用自定义表单输入