我想构建一个模块,在搜索表单块配置页面上添加一个额外字段,以存储将显示为HTML5占位符属性的文本。我需要使用哪些钩子,如何修改搜索表单块,以便在页面上打印出额外的texbox?
答案 0 :(得分:2)
这是最终有效的代码,感谢您的帮助:
function yourmodule_form_alter(&$form, &$form_state, $form_id) {
if (($form_id == 'block_admin_configure') && ($form['module']['#value'] == 'search')) {
$form['settings']['theplaceholder'] = array(
'#type' => 'textfield',
'#title' => t('Add placeholder text'),
'#default_value' => variable_get('theplaceholder'),
'#maxlength' => 64,
'#description' => 'Override the default placeholder',
'#weight' => 2,
'#access' => TRUE,
);
$form['#submit'][] = 'yourmodule_submit_function';
}
if ($form_id == 'search_block_form') {
$form['search_block_form']['#attributes']['placeholder'] = variable_get('theplaceholder');
}
}
function yourmodule_submit_function($delta = '', $edit = array()){
variable_set('theplaceholder', $edit['values']['theplaceholder']);
}
答案 1 :(得分:1)
您可以使用以下挂钩修改任何表单:
function MODULE_NAME_form_FORM_ID_alter(&$form, &$form_state, $form_id) {
}
插入您自己的模块名称和您尝试更改的表单的表单ID。在你的情况下,它只是块的搜索形式或搜索块形式。通过查看页面的html源并从元素中获取id,找出您尝试更改的表单的ID。
无论如何,一旦你想出了要插入的正确id,就开始在表单中添加元素:
function MODULE_NAME_form_FORM_ID_alter(&$form, &$form_state, $form_id) {
$form['my_new_field'] = array(
'#type' => 'item',
'#markup' => t('Just testing'),
'#weight' => 10,
);
}
加载表单以确保您的新标签,字段或其他任何内容都显示出来。
这对你有用吗?
有关此功能的更多文档,请访问:http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_FORM_ID_alter/7