Рейтинг:0

Иерархия типов контента

флаг in

Я новичок в Drupal, у меня есть типы контента, которые зацикливаются на дочерних типах контента с использованием полей. Результат примерно такой.

Тип контента офиса
Поле: Тип содержимого офиса
- Тип контента офиса
- Поле: Тип содержимого человека
- Поле: Тип содержимого человека
- Поле: Тип содержимого человека
- Тип контента офиса
-- Поле: Тип контента Office
-- Поле: Тип содержимого Person
-- Поле: Тип содержимого Person

Мне нужен тип контента, чтобы иметь возможность распознавать его родителя или дедушку и бабушку. Однако этот каталог был создан с использованием типов контента для офисов, а не таксономий. Можно ли извлечь иерархическую информацию из вложенных типов контента? Должен ли вместо этого быть создан тип контента Office как таксономия?

Ссылки на детали и документацию приветствуются.

Я использую Друпал 9.3.х

флаг cn
В Drupal таксономии имеют иерархию, а типы контента — нет. Так что, если вам нужна иерархия, вам, скорее всего, будет гораздо проще реализовать ее с помощью таксономии, чем взламывать типы контента, чтобы сделать это самостоятельно.
No Sssweat avatar
флаг ua
Единственное, что близко к этому для D9, это [Corresponding Entity References] (https://www.drupal.org/project/cer), но, судя по описанию, это не похоже на то, что это позволит вам распознать дедушку и бабушку. Таким образом, вам придется использовать таксономию, если вы не хотите создавать свой собственный модуль для обработки такого дерева типов контента.
Jaypan avatar
флаг de
Вы можете создавать ссылки на объекты для создания иерархии. Но не совсем понятно, что вы подразумеваете под "признанием". Также неясно, какова ваша конечная цель.
флаг in
Спасибо всем за вашу помощь. Можно использовать таксономии, ссылки на сущности и даже добавление поля. Я протестировал несколько из них. Мой коллега уточнил и запросил решение для предварительной обработки, поэтому я собираюсь немного углубиться в продвинутый PHP.
Рейтинг:0
флаг in

Я пришел к решению, используя функцию предварительной обработки. Пара ключ/значение добавляется к родительскому узлу. Названный «headline_level», он позже упоминается дочерним элементом, и добавляется +1. Это число присваивается переменной ветки в качестве номера заголовка, "headline_level" увеличивается на 1 для дочернего элемента, если у него есть дочерние элементы.

На этом изображении мы видим, что родительский «офис» извлекает дочерние узлы в качестве полей. введите описание изображения здесь

Диаграмма уровня

Родитель (h1)
|_ Ребенок (h2) (см. изображение)
   |_ Внук (h3)
      |_ Великий внук (h4)

Функция предварительной обработки для темы

функция THEME_preprocess_HOOK(&$переменные) {
  $узел = $переменные['узел'];

    /**
     * Родительский уровень заголовка 
     * Отображает логическую структуру заголовка
     * Применяет более высокое значение к 'headline_level' для подчиненных типов контента; используется в '/templates/node--HOOK.html.twig'
     */
    если ($node->_referringItem) {
      // Переменные
      $счетчик = 1; // начать уровень с 1
      
      // Добавляем 'headline_level' к узлу HOOK
      $node->headline_level = $counter;
      $parentHeadline = $node->_referringItem->getEntity()->headline_level;
      
      // Проверяем узел на $parentHeadline, иначе $counter, устанавливаем переменную twig
      если (isset($parentHeadline)) {
        // Увеличиваем 'headline_level' на 1
        ++$родительский заголовок; // добавить 1
        $node->headline_level = $parentHeadline;
        $variables['office_headline_level'] = $parentHeadline; 
      } еще {
        $variables['headline_level'] = $counter;
      }
    }

Шаблон Twig для типа контента

  <div>
    <h{{ headline_level ?: 2 }}>{{ label }}</h{{ headline_level ?: 2 }}>
    {{ content.field_people }}
  </div>

Как упоминалось в комментариях, эти офисы должны были быть таксономией. Однако они были созданы как типы контента и на них ссылаются поля.

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

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