Làm cách nào để thay đổi tùy chọn '- Any -' mặc định trong bộ lọc hiển thị?


8

Tôi đã tiếp xúc với các bộ lọc trong chế độ xem dưới dạng danh sách chọn. Làm cách nào để thay đổi văn bản cho tùy chọn bộ lọc mặc định là "- Bất kỳ -"? Trong các phiên bản trước, nó được đề xuất sử dụng chức năng tiền xử lý như thế này:

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

Nhưng trong Drupal 8, thay vì khóa / giá trị có thể sửa đổi, nó bị kẹt trong một lớp được bảo vệ.

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

Làm thế nào tôi có thể sửa đổi điều này?

Lưu ý: Tôi cũng đã thử Bộ lọc tiếp xúc tốt hơn nhưng không thể viết lại tùy chọn "- Bất kỳ -".

Câu trả lời:


5

Phím "Tất cả" chứa một đối tượng có thể dịch, do đó, nó hoạt động như trước đây, bạn chỉ cần làm một cái gì đó như:

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

Tôi đặt dòng này ở đâu? Trong theme-settings.php?
0711master

4

Bộ lọc tiếp xúc tốt hơn hoạt động tốt với tôi trong Drupal 8. Điều duy nhất bạn phải làm là đi theo con đường này.

Bộ lọc tiếp xúc tốt hơn> Cài đặt> Tùy chọn khác> Viết lại kết quả.

Sau đó, bạn phải thay thế bất kỳ văn bản nào bằng định dạng này trong Drupal 8. Tôi nghĩ những gì bạn đã bỏ lỡ là văn bản này. Thay thế bằng mã thông báo này

- Any -|your replacement

Đúng, nhưng hiện tại có một bản vá cho một vấn đề gây ra lỗi nếu bạn thêm bất kỳ thay thế nào.
Duncanmoo

Thật không may, điều này là không thể đối với các trường ngày được nhóm
0711master

2

Tôi đã tìm ra một cách để làm điều này ở cấp chủ đề. Bạn có thể thay đổi '- Bất kỳ -' thành một giá trị cụ thể hoặc một số biến khác.

Sao chép select.html.twig vào chủ đề của bạn. Sửa đổi mẫu để kiểm tra xem tùy chọn. Nhãn bằng '- Bất kỳ -' và nếu có, hãy thay đổi mẫu thành bất cứ điều gì bạn muốn. Trong mã bên dưới, nó được đặt thành giá trị cho nhãn của bộ lọc.

{% 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 Nó chỉ cho tôi đi đúng hướng, cảm ơn sự giúp đỡ của bạn. Bộ lọc hợp nhất không hoạt động với tôi, không chắc chắn điều gì đã xảy ra nên tôi đã sử dụng tùy chọn đơn giản hơn.

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

chúc mừng hạnh phúc


Giải pháp này phù hợp với tôi nhất vì Bộ lọc tiếp xúc tốt hơn không có tùy chọn viết lại cho các trường ngày được nhóm.
0711master

1

Là một tùy chọn, bạn có thể sử dụng select.html.twig trong chủ đề tùy chỉnh của mình với mã sau đây.

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

Khi bạn nhấp vào Bộ lọc được hiển thị tốt hơn: Cài đặt, sau đó nhấp vào "Tùy chọn khác cho ...", sẽ có một danh sách thả xuống có tên "Tùy chọn bộ lọc ghi lại". Trong đó, thêm: - Bất kỳ - | Tất cả

hoặc thay đổi nó thành bất cứ điều gì bạn cần. Những công việc này.


0

Bạn có thể đặt nó trong tập tin themename.theme trong thư mục chủ đề của bạn. Điều này làm việc cho tôi: -

/**
     * 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');
      }
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.