Рейтинг:1

Перетащите, чтобы отсортировать вес таксономии в представлении

флаг cn

Мне нужно создать пользовательское представление администратора, чтобы заменить страницу со списком терминов таксономии по умолчанию для данного словаря. Причина в том, что мы добавили настраиваемые поля в словарь, и администраторы должны видеть эти поля на странице со списком терминов. Чтобы было ясно, я говорю не об отдельной странице термина, которая показывает контент, связанный с этим термином, а о фактической странице списка администратора, которая отображает все термины для данного словаря. Очевидно, я могу создать представление для этого, но я не могу понять, как сохранить функциональность сортировки перетаскиванием. Я посмотрел на модуль Draggable Views, который я использовал раньше, но он создает свое собственное отдельное поле веса и не сортирует фактический вес термина таксономии. Есть ли лучший способ сделать это? Я просто хочу иметь возможность сортировать вес таксономии в представлении ИЛИ, что еще лучше, было бы просто отображать настраиваемые поля на экране списка терминов таксономии по умолчанию, что я не мог понять, как это сделать. Я подумал, что это просто представление, которое я могу редактировать, как и основное представление содержимого, но, похоже, это не так. Я не мог понять, как отображать настраиваемые поля на этой странице списка таксономии администратора по умолчанию.

misterdidi avatar
флаг de
Кажется, это известная проблема с Drupal8/9. Лучшее решение, кажется, переопределяет маршрут обзора. См. этот пример (веб-сайт на французском языке, но код говорит сам за себя) https://kgaut.net/snippets/2020/drupal-8-surcharger-la-page-de-liste-des-termes-de-taxonomie.html или эта ветка https://www.drupal.org/project/drupal/issues/2975863#comment-12805681
Рейтинг:1
флаг cn

В итоге мы создали собственный модуль, который переопределяет форму обзора таксономии. Я вставил наш код сюда на случай, если это поможет кому-то еще. В нашем случае нам нужно было добавить поле под названием «Акроним», поле «Тип», а также мы добавили «Статус». Вы можете настроить по мере необходимости. Наш пользовательский модуль назывался mc_taxonomy и находился в файле mc_taxonomy.module.

<?php

используйте Drupal\field\FieldConfigInterface;

/**
 * Реализует hook_form_FORM_ID_alter().
 *
 * Добавьте статус, field_acronym и field_type на страницу обзора.
 */

function mc_taxonomy_form_taxonomy_overview_terms_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  // Получить словарь из формы, чтобы прочитать его данные конфигурации поля.
  $vocab = $form_state->get(['таксономия', 'словарь']);
  $fields = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', $vocab->id());

  // Вставляем поля, если они существуют.
  mc_taxonomy_overview_insert_field ($ форма, «статус», «статус», 1, функция ($ значение) {
    вернуть $значение? «Опубликовано»: «Неопубликовано»;
  });

  если (isset($fields['field_type'])) {
    mc_taxonomy_overview_insert_field($form, $fields['field_type']);
  }

  если (isset($fields['field_acronym'])) {
    mc_taxonomy_overview_insert_field($form, $fields['field_acronym']);
  }

}

function mc_taxonomy_overview_insert_field(&$form, $field, $label = null, $index = 1, $valueFunction = null) {
  если ($индекс <= 0) {
    // TODO Разрешить индекс == 0.
    // TODO Проверить верхнюю границу.
    throw new Exception('индекс должен быть >= 1.');
  }
  // Извлекаем данные из $field, если они правильного типа.
  если ($field instanceof FieldConfigInterface) {
    если (!$метка) {
      $метка = $поле->метка();
    }
    $fieldName = $field->getName();
  } еще {
    $fieldName = $поле;
  }
  // Добавляем поле в заголовок.
  $form['terms']['#header'] = array_merge(
    array_slice($form['terms']['#header'], $index - 1, $index, TRUE),
    [$метка],
    array_slice($form['terms']['#header'], $index, NULL, TRUE)
  );
  foreach ($form['terms'] as &$term) {
    // Поиск терминов в массиве рендеринга.
    если (is_array($term) && !пусто($term['#term'])) {
      // Добавляем поле в терм для тела.
      $fieldValue = $term['#term']->get($fieldName)->значение;
      $term = массив_слияния (
        array_slice($term, $index - 1, $index, ИСТИНА),
        [
          $имя поля => [
            '#markup' => $valueFunction ? $valueFunction($fieldValue): $fieldValue,
            '#type' => 'предмет',
          ]
        ],
        array_slice($term, $index, NULL, TRUE)
      );
    }
  }
}

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

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