Рейтинг:0

Комбинированные поля табличного представления, раздельная сортировка

флаг us

Мне нужна помощь в настройке представления таблицы, чтобы иметь возможность сортировать объединенные столбцы по отдельности. На высоком уровне у меня есть следующая таблица просмотра:

Имя Фамилия Возраст/Вес^
Кен Дэвидсон Возраст: 42 года
Вес: 200

У меня есть все три столбца, которые можно сортировать, за исключением того, что третий столбец сортируется только по Возраст, хотя у него есть два возможных варианта сортировки. Нажав на Возраст/Вес будет сортироваться только по возрасту, я не вижу способа сделать его сортируемым по возрасту или весу.

Я нашел здесь пару ссылок, которые не кажутся слишком оптимистичными, но я надеюсь, что все изменилось:

Редактировать

Чем больше я изучаю это, тем больше я начинаю думать, что единственный способ сделать это — предоставить собственный шаблон. таблица представлений-представлений--настраиваемое-имя-представления.html.twig и нужно будет перезаписать один раздел:

      <tr>
        {% for key, column in header %}
          {% if column.default_classes %}
            {%
              set column_classes = [
                'views-field',
                'views-field-' ~ fields[key],
              ]
            %}
          {% endif %}
          <th{{ column.attributes.addClass(column_classes).setAttribute('scope', 'col') }}>
            <div class="th-wrap">
              {%- if column.wrapper_element -%}
                <{{ column.wrapper_element }}>
                  {% if column.title == 'sort by Age/Weight' %}
                    <!-- Add two links hardcoding the URL appropriately -->
                  {% else %}
                    {%- if column.url -%}
                    <a href="{{ column.url }}" title="{{ column.title }}">{{ column.content }}{{ column.sort_indicator }}</a>
                  {%- else -%}
                    {{ column.content }}{{ column.sort_indicator }}
                  {%- endif -%}
                </{{ column.wrapper_element }}>                    
                  {% endif %}                  
              {%- else -%}
                {%- if column.url -%}
                  <a href="{{ column.url }}" title="{{ column.title }}">{{ column.content }}{{ column.sort_indicator }}</a>
                {%- else -%}
                  {{- column.content }}{{ column.sort_indicator }}
                {%- endif -%}
              {%- endif -%}
            </div>
          </th>
        {% endfor %}
      </tr>

Прежде чем я пойду по этому пути, кажется ли это оптимальным решением? Проблема здесь в том, что я потерял бы возможность отображать индикатор сортировки, так как столбец по-прежнему напрямую связан с Возраст/Вес (это просто возраст) вместо отдельных столбцов.

Доступна ли глобальная переменная в просмотры-просмотр-таблица рендерер, который я мог бы проверить на предмет фактического столбца сортировки? Доступен ли URL для синтаксического анализа?

Рейтинг:0
флаг us

Я смог заставить это работать - в большинстве лучших практик Drupal, которые я мог придумать. Если это далеко, мне бы хотелось получить некоторые рекомендации о том, как это сделать правильно, но для тех, кто ищет то же самое:

Я добавил препроцессор темы для обновления таблицы $переменные с сортировкой/порядком на самом высоком уровне:

функция sc_preprocess_views_view_table(&$variables) {  
  $ вид = $ переменные ['представление'];
  $handler = $view->style_plugin;
  $переменные['сортировка'] = массив(
    'активный' => $handler->активный, 
    'заказ' => $handler->заказ
  );
}

Файл ветки был обновлен:

// представления-представления-таблицы--настраиваемое-представление--page.html.twig
{% if column.title == 'сортировать по возрасту/весу' %}
  <a href="{{ sc_column_sort_url('field_hfs_age', sorting) }}" title="Сортировать по возрасту">возраст</a>
  {% if sorting['active'] == 'field_hfs_age' %}
    {{ sc_column_sort_indicator(сортировка['порядок']) }}
  {% конец%} /
  
  <a href="{{ sc_column_sort_url('field_hfs_weight', sorting) }}" title="Сортировать по весу">вес</a>
  {% if sorting['active'] == 'field_hfs_weight' %}
    {{ sc_column_sort_indicator(сортировка['порядок']) }}
  {% конец%}
{% еще %}
  // Исходный код
{% конец%}

И были созданы две пользовательские функции Twig.

  /**
   * Предоставляет общие функции для создания требуемого URL-адреса сортировки пользовательского столбца.
   * @param $name имя текущего поля
   * @param $сортировка ассоциированного массива текущей сортировки
   */
  общедоступная функция scTableSortUrl($name, $sorting) {
    $nextSort = ($sorting['active'] == $name && $sorting['order'] == 'asc' ? 'desc' : 'asc');
    return "?order={$name}&sort={$nextSort}";
  }

  /**
   * Отображение индикатора сортировки текущей пользовательской таблицы. Я уверен, что это существует где-то
   * другое, но я не могу его найти.
   * @param $initial начальный порядок сортировки [asc | убыль]
   */
  общедоступная функция scTableSortIndicator($initial) {
    возвращаться [
      '#theme' => 'tablesort_indicator',
      '#style' => $initial,
    ];
  }

https://www.hashbangcode.com/article/drupal-9-creating-custom-twig-functions-and-filters для справки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.