Wie ändere ich die Standardoption "- Beliebig -" im Filter "Belichtete Ansichten"?

8

Ich habe Filter in einer Ansicht als Auswahllisten verfügbar gemacht. Wie kann ich den Text für die Standardfilteroption "- Beliebig -" ändern? In früheren Versionen wurde vorgeschlagen, eine Vorverarbeitungsfunktion wie die folgende zu verwenden:

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

In Drupal 8 bleibt es jedoch anstelle eines veränderbaren Schlüssels / Werts in einer geschützten Klasse stecken.

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

Wie kann ich das ändern?

Hinweis: Ich habe auch Better Exposed Filters ausprobiert, aber die Option "- Any -" kann nicht neu geschrieben werden.

user61857
quelle

Antworten:

5

Der Schlüssel "Alle" enthält ein übersetzbares Objekt. Es funktioniert also wie zuvor. Sie müssen lediglich Folgendes tun:

$form['field_your_field']['#options']['All'] = t('Text you want');
Paulo Gomes
quelle
Wo platziere ich diese Zeile? In theme-settings.php?
0711master
4

Besser belichtete Filter funktionieren in meinem Drupal 8 gut für mich. Das einzige, was Sie tun müssen, ist diesem Pfad zu folgen.

Besser belichtete Filter> Einstellungen> Weitere Optionen> Ergebnisse neu schreiben.

Dann müssen Sie in Drupal 8 jeden Text ersetzen, der dieses Format verwendet. Ich denke, was Sie verpasst haben, ist dieser. Ersetzen Sie mit diesem Token

- Any -|your replacement
Eyosiyas Tadele
quelle
Richtig, aber es gibt derzeit einen Patch für ein Problem, das einen Fehler verursacht, wenn Sie Ersatz hinzufügen.
Duncanmoo
Leider ist dies nicht für gruppierte Datumsfelder möglich
0711master
2

Ich habe einen Weg gefunden, dies auf Themenebene zu tun. Sie können '- Any -' in einen bestimmten Wert oder eine andere Variable ändern.

Kopieren Sie select.html.twig in Ihr Thema. Ändern Sie die Vorlage, um zu überprüfen, ob option.label gleich '- Any -' ist, und ändern Sie sie in diesem Fall nach Belieben. Im folgenden Code wird der Wert für die Filterbezeichnung festgelegt.

{% 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 %}
user61857
quelle
1

@ user61857 Es hat mich in die richtige Richtung gelenkt, danke für deine Hilfe. Der Zusammenführungsfilter hat bei mir nicht funktioniert, ich bin mir nicht sicher, was schief gelaufen ist, also habe ich die einfachere Option verwendet.

      {% 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 %}

fröhliches Drupaling

Bruce Davidson
quelle
Diese Lösung funktioniert am besten für mich, da für besser belichtete Filter keine Option zum Umschreiben für gruppierte Datumsfelder verfügbar ist.
0711master
1

Optional können Sie select.html.twig in Ihrem benutzerdefinierten Design mit dem folgenden Code verwenden.

{% 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 %}
Ruslan P.
quelle
0

Wenn Sie auf Besser belichtete Filter: Einstellungen und dann auf "Weitere Optionen für ..." klicken, wird eine Dropdown-Liste mit dem Namen "Filteroptionen neu schreiben" angezeigt. Fügen Sie dort hinzu: - Beliebig - | Alle

oder ändern Sie es in alles, was Sie brauchen. Das funktioniert.

hmartens
quelle
0

Sie können es in Ihre Datei themename.theme in Ihrem Themenverzeichnis einfügen . Das hat bei mir funktioniert: -

/**
     * 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');
      }
    }
Stange
quelle