1

我想构建一个模块,在搜索表单块配置页面上添加一个额外的字段来存储将显示为 HTML5 占位符属性的文本。我需要使用哪些钩子?如何仅修改搜索表单块以使额外的 texbox 打印在页面上?

4

2 回答 2

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']);
}
于 2012-06-21T19:41:56.480 回答
1

您可以使用以下挂钩来修改任何形式:

function MODULE_NAME_form_FORM_ID_alter(&$form, &$form_state, $form_id) {

}

插入您自己的模块名称和您要更改的表单的表单 ID。在您的情况下,它只是块的 search-form 或 search-block-form 。通过查看页面的 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

于 2012-06-19T18:00:04.090 回答