ビュー公開フィルターのデフォルトの「-Any-」オプションを変更するにはどうすればよいですか?


8

ビューに選択リストとしてフィルターを公開しました。デフォルトのフィルターオプション「-Any-」のテキストを変更するにはどうすればよいですか?以前のバージョンでは、次のような前処理関数を使用することが推奨されていました。

if($form['#id'] == 'views-exposed-form') {
      foreach ($form['FIELDNAME']['#options'] as $key => &$option) {
        if ($key === 'All') {
          $option = 'All';
        }
      }
    }

しかし、Drupal 8では、変更可能なキー/値の代わりに、保護されたクラス内でスタックしています。

protected string -> string(7) "- Any -"

これをどのように変更できますか?

注:Better Exposed Filtersも試しましたが、「-Any-」オプションを書き換えることはできません。

回答:


5

「All」キーには翻訳可能なオブジェクトが含まれているため、以前と同じように機能し、次のようにするだけです。

$form['field_your_field']['#options']['All'] = t('Text you want');

この行はどこに配置しますか?theme-settings.php?
0711マスター2018年

4

Better Exposed Filtersは私のDrupal 8でうまく機能します。あなたがしなければならないことは、この道をたどることだけです。

より良い公開フィルター>設定>その他のオプション>結果の書き換え。

次に、Drupal 8でこの形式を使用してテキストを置き換える必要があります。見逃したのはこれだと思います。このトークンを使用して置き換える

- Any -|your replacement

正解ですが、現在、置き換えを追加するとエラーが発生する問題のパッチがあります。
Duncanmoo 2017

残念ながら、これはグループ化された日付フィールドでは可能ではありません
0711master

2

これをテーマレベルで行う方法を見つけました。「-Any-」を特定の値または他の変数に変更できます。

select.html.twigをテーマにコピーします。テンプレートを変更して、option.labelが「-Any-」に等しいかどうかを確認し、等しい場合は、好きなように変更します。以下のコードでは、フィルターのラベルの値に設定されています。

{% elseif option.type == 'option' %}
  {# custom if statement #}
  {% if option.label == '- Any -' %} 
    {% set option = option|merge({ 'label': element['#title'] }) %}
  {%  endif %}
  <option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}>{{ option.label }}</option>
{% endif %}

1

@ user61857あなたの助けに感謝して、私は正しい方向に私を向けました。マージフィルターは機能しませんでした。問題の原因がわからないため、より単純なオプションを使用しました。

      {% elseif option.type == 'option' %}
        {# custom if statement #}
        {% if option.label == '- Any -' %}
          <option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}>- All -</option>
        {% else %}
          <option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}>{{ option.label }}</option>
        {%  endif %}
      {% endif %}

幸せな垂れ流し


Better Exposed Filtersにはグループ化された日付フィールドの書き換えオプションがないため、この解決策は私にとって最も効果的です。
0711マスター2018年

1

オプションとして、次のコードを使用してカスタムテーマでselect.html.twigを使用できます。

{% spaceless %}
  {% if input_group %}
    <div class="input-group">
  {% endif %}

  {% if prefix %}
    {{ prefix }}
  {% endif %}

  {# Browsers do not recognize pseudo :after selectors, we must create a wrapper
   # around the select element to style it properly.
   # @see http://stackoverflow.com/q/21103542
   #}
  {% if not attributes.offsetExists('multiple') %}
  <div class="select-wrapper">
  {% endif %}
  {% set classes = ['form-control'] %}
  <select{{ attributes.addClass(classes) }}>
    {% for option in options %}
      {% if option.type == 'optgroup' %}
        <optgroup label="{{ option.label }}">
          {% for sub_option in option.options %}
            <option
              value="{{ sub_option.value }}"{{ sub_option.selected ? ' selected="selected"' }}>{{ sub_option.label }}</option>
          {% endfor %}
        </optgroup>
      {% elseif option.type == 'option' %}
        {# custom if statement #}
        {% if option.label == '- Any -' %}
          {% set option = option|merge({ 'label': '-All-' }) %}
        {% endif %}
        <option value="{{ option.value }}"{{ option.selected ? ' selected="selected"' }}>{{ option.label }}</option>
      {% endif %}
    {% endfor %}
  </select>
  {% if not attributes.offsetExists('multiple') %}
  </div>
  {% endif %}

  {% if suffix %}
    {{ suffix }}
  {% endif %}

  {% if input_group %}
    </div>
  {% endif %}
{% endspaceless %}


0

[Better exposed Filters:Settings]をクリックし、[More Options For ...]をクリックすると、[Rewrite Filter Options]というドロップダウンが表示されます。そこに、以下を追加します。-すべて-|すべて

または必要なものに変更します。これは機能します。


0

あなたは、あなたにそれを置くことができますthemename.themeあなたのテーマディレクトリ内のファイル。これは私のために働きました:-

/**
     * Implements hook_form_alter().
     */
    function nameofwebtheme_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
      if ($form_id=='views_exposed_form' && $form['#id']=='views-exposed-form-what-s-on-page-1') {
        //var_dump($form_id); uncomment to find out the form_id for the if clause above...
        //var_dump($form['#id']); uncomment to find out the form['#id'] for above...
        //var_dump($form); uncomment to look for your field name below...
        $form['field_date_range_value']['#options']['All'] = t('Text you want');
      }
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.