HTML5 プレースホルダー属性として表示されるテキストを格納するために、検索フォーム ブロック構成ページに追加のフィールドを追加するモジュールを構築したいと考えています。どのようなフックを使用する必要がありますか? また、検索フォーム ブロックだけを変更して、追加の texbox をページに印刷するにはどうすればよいですか?
質問する
2597 次
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 に答える