ユーザーが日付を指定できるようにするビューに公開フィルターがあり、このテキストフィールドのプレースホルダーを指定したいと思います。
私はフックで次のコードを使用してこれをやってみました:
$form['field_start_end_dates_value']['value']['#attributes'] = array('placeholder' => array(t('Search')));
(同じフォーム内の他のフォーム要素を正常に変更しているので、これは正しいフックにあることを知っています)
var_dump
edフォーム変数、および日付フィルターの次の出力を取得しています:
[field_start_end_dates_value] => Array
(
[#tree] => 1
[value] => Array
(
[#title] =>
[#type] => date_text
[#size] => 20
[#default_value] =>
[#date_format] => j M Y
[#date_label_position] => within
[#date_year_range] => -3:+3
[#process] => Array
(
[0] => date_text_element_process
)
[#prefix] =>
[#suffix] =>
[#attributes] => Array
(
[placeholder] => Array
(
[0] => Specify Date
)
)
)
)
これは私には正しいように見えますが、フロントエンドにプレースホルダーが表示されていません。
キャッシュを複数回フラッシュし、JavaScriptを有効にせずにページをロードしようとしました。
何が悪いのですか?
あなたはそれを間違った方法でやっています
ここではフォームの変更は機能しません。これは、次の方法で実現できます。
使用している日付要素によって異なります。利用できるフックはほとんどありません
hook_date_text_process_alter()
hook_date_popup_process_alter()
hook_date_combo_process_alter()
hook_date_select_process_alter()
Hook_date_text_process_alter()を表示しています
/**
* Implements hook_date_text_process_alter().
*/
function MYMODULE_date_text_process_alter(&$element, &$form_state, $context) {
if ($form_state['complete form']['#form_id'] == 'views_exposed_form') {
//dpm($form_state);
if ($element['#id'] == 'edit-field-appintment-date-value-value') {
$element['date']['#attributes']['placeholder'] = t('Demo placeholder');
//dpm($element);
}
}
}
その他のテキスト要素の場合以下は、views_exposed_formに他のテキストフィールドにプレースホルダーを追加する正しい例ですが、日付フィールドはこのように実行できません。
/**
* Implements hook_form_views_exposed_form_alter().
*/
function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
$form['title']['#attributes'] = array('placeholder' => array(t('Your Placeholder')));
}
お役に立てれば
またはページ読み込みでは、以下のようにJQueryを使用してそのテキストフィールドをハックできます
$("#yourId").attr('placeholder', 'Search');
これを確認できます。私にとってはうまくいきます...
function yourmodule_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'views_exposed_form' && ($form['#id'] == 'views-exposed-form-test-date-page')) {
// check for your field. here 'changed' value for 'update field'.
$form['changed']['#attributes'] = array('placeholder' => array(t('Your Placeholder')));
}
}
値ではなく要素に属性を適用します。以下はうまくいくはずです:
$form['field_start_end_dates_value']['#attributes'] = array('placeholder' => array(t('Search')));
次のコードベースを実装してみてください
function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_exposed_form'){
//Expose filter for the date
// Change 'created_1' field name as per your field name
$form['created_1']['#attributes'] = array('placeholder' => array(t('Enter date')));
//Expose filter for date range
// Change 'created' field name as per your field name
$form['created']['min']['#attributes'] = array('placeholder' => array(t('Enter start date.')));
$form['created']['max']['#attributes'] = array('placeholder' => array(t('Enter end date')));
//Expose filter for title
// Change 'title' field name as per your field name
$form['title']['#attributes'] = array('placeholder' => array(t('Enter title for search')));
}
}
Drupal 2017年7(ポップアップ用))で私のために働いたことはここにあります:
function MYMODULE_date_popup_process_alter(&$element, &$form_state, $context) {
if ($form_state['complete form']['#form_id'] == 'views_exposed_form') {
$form_state['complete form']['field_event_date_value2']['value']['#default_value'] = "";
$form_state['complete form']['field_event_date_value2']['value']['#attributes'] = array('placeholder' => array(t('End Date')));
}
}
#default_value(日付でない場合は空白のままにする)をオーバーライドする必要があり、その後プレースホルダーが表示されます。フォームに#default_valueを入力しているため、プレースホルダーなしでフォームを残していると思います。