web-dev-qa-db-ja.com

タイプdate_textのビューフィルターにプレースホルダーテキストを含めることは可能ですか?

ユーザーが日付を指定できるようにするビューに公開フィルターがあり、このテキストフィールドのプレースホルダーを指定したいと思います。

私はフックで次のコードを使用してこれをやってみました:

$form['field_start_end_dates_value']['value']['#attributes'] = array('placeholder' => array(t('Search')));

(同じフォーム内の他のフォーム要素を正常に変更しているので、これは正しいフックにあることを知っています)

var_dumpedフォーム変数、および日付フィルターの次の出力を取得しています:

[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を有効にせずにページをロードしようとしました。

何が悪いのですか?

3
Sean

あなたはそれを間違った方法でやっています

ここではフォームの変更は機能しません。これは、次の方法で実現できます。

使用している日付要素によって異なります。利用できるフックはほとんどありません

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')));
}

お役に立てれば

3
Himanshu Pathak

またはページ読み込みでは、以下のようにJQueryを使用してそのテキストフィールドをハックできます

$("#yourId").attr('placeholder', 'Search');
1
Sai

これを確認できます。私にとってはうまくいきます...

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')));
    }
}
1
bisw

値ではなく要素に属性を適用します。以下はうまくいくはずです:

$form['field_start_end_dates_value']['#attributes'] = array('placeholder' => array(t('Search')));
1
AjitS

次のコードベースを実装してみてください

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')));


        }
    }
1
Kishor Hase

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を入力しているため、プレースホルダーなしでフォームを残していると思います。

0
ProGrammar