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 を挿入します。あなたの場合、ブロックだけの検索フォームまたは検索ブロックフォームになります。ページの 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 に答える