it-swarm.com.de

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

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

Aber in Drupal 8) steckt es anstelle eines modifizierbaren Schlüssels/Werts in einer geschützten Klasse fest.

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.

8
user61857

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');
5
Paulo Gomes

Besser belichtete Filter funktionieren gut für mich in meinem Drupal 8. 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 den beliebigen Text in diesem Format in Drupal 8.) ersetzen. Ich denke, was Sie verpasst haben, ist dieser. Ersetzen Sie ihn mit diesem Token

- Any -|your replacement
3
Eyosiyas Tadele

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 gegebenenfalls in die gewünschte Vorlage. 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 %}
2
user61857

Vielleicht möchten Sie das Modul "Besser exponierte Filter" nicht installieren, und vielleicht möchten Sie Ihre Vorlagenfunktion nicht codieren.

In diesem Fall können Sie entweder:

1
augusto

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 %}
1
Ruslan P

@ 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

1
Bruce Davidson

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.

0
hmartens

Sie können es in Ihre themename.theme Datei 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');
      }
    }
0
Rod