Перейти к основному содержанию

Drupal — поиск статей, в которых используется Media

Drupal 9

Если вы не админите сайт на Drupal, то вам будет неинтересно. А если вы админите сайт на Drupal, то не факт что вам будет интересно. Однако, если вы админите сайт на Drupal и вам нужно то что здесь написано, то статья будет полезной, даже если вам неинтересно. 

Столкнулся с задачкой в Drupal. Нужно отобразить все сущности, в которых используется тот или иной объект Media. Проще говоря, мне нужно найти все статьи или термины таксономии, в которые я воткнул какой-либо видеоролик.

Из коробки Drupal не предоставляет такой функционал. Поиск в Интернет дал зацепку: модуль Entity Usage. Модуль позволяет выявлять всевозможные связи между различными сущностями.

https://www.drupal.org/project/entity_usage

Этот модуль предоставляет инструмент для отслеживания взаимосвязей между сущностями в Drupal.

Когда может пригодиться?

Этот модуль может быть полезен, если вы хотите:

  • Знать, где используются материалы (ноды), медиа-объекты или термины таксономии
  • Отображать использование/ссылки на ваш контент в целом
  • Иметь механизм, предотвращающий удаление контента (любой сущности), на который ссылаются другие материалы

Поддерживаемые типы связей

В настоящее время поддерживаются следующие методы отслеживания:

  • Сущности, связанные через поля типа entity_reference
  • Сущности, связанные через поля типа link
  • Стандартные HTML-ссылки внутри текстовых полей (если они ведут на URL сущности)
  • Сущности, встроенные в текстовые поля с помощью модулей Entity Embed или LinkIt
  • Сущности, связанные через поля, предоставляемые модулем Block Field, Entity Reference Revisions и Dynamic Entity Reference
  • Сущности, связанные через Layout Builder. Поддерживаемые методы: встроенные (не переиспользуемые) блоки контента из ядра Drupal и сущности, выбранные с помощью стороннего модуля Entity Browser Block.

Как работает?

Связь между двумя сущностями считается таковой, когда исходная сущность ссылается на целевую сущность одним из методов, описанных выше.

Вы можете настроить, какие типы сущностей следует отслеживать как исходные, а какие — как целевые. По умолчанию все контентные сущности (кроме файлов и пользователей) отслеживаются как исходные.

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

Когда исходная сущность создается / обновляется / удаляется, все активные плагины вызываются для регистрации потенциальных связей.

Контентные сущности могут иметь локальную задачу (вкладку) на своей канонической странице, ведущую на информационную страницу "Использование", где пользователи могут видеть, где эта сущность используется. Вы можете настроить, для каких типов сущностей должна отображаться локальная задача с информацией об использовании. По умолчанию вкладки не показываются.

Чтобы настроить эти и другие параметры, перейдите в "Конфигурация -> Авторство контента -> Настройки Entity Usage" (или перейдите по URL /admin/config/entity-usage/settings).

Известные ограничения

Плагины отслеживают одно использование на сущность для каждого поля

Модуль регистрирует только одно использование одной и той же целевой сущности для каждого поля. В текущей реализации это сделано намеренно. Если у вас есть случай использования, где это является проблемой, создайте issue.

Конкретный пример

Вернёмся к конкретному примеру, нужно найти все статьи, в которые я вставил какой-либо видеоролик.

Устанавливаем модуль:

composer require 'drupal/entity_usage:^2.0@beta'
drupal

Включаем его в расширениях.

drupal

Переходим к настройкам: /admin/config/entity-usage/settings. В блоке Enabled local tasks в разделе Local task entity types ставим галку на Мультимедиа.

drupal

Сохраняем настройки, всё остальное уже должно быть включено по умолчанию.

drupal

Если перейти в Мультимедиа и попробовать отредактировать любое Медиа, до увидим, что появилась новая вкладка Использование.

drupal

Правда внутри вкладки пусто, связи не найдены. Всё по одной простой причине, связи запоминаются при редактировании объекта, а он редактировался до того, как мы установили модуль Entity Usage.

drupal

Побороть это легко, идём в настройки модуля во вкладку Batch Update: /admin/config/entity-usage/batch-update.

drupal

И тыкаем в Recreate all entity usage statistics. Процесс сбора связей может занять время.

drupal

Дожидаемся завершения и смотрим вкладку Использование в выбранном нами Медиа.

drupal

Теперь видно, что выбранная Медиа сущность используется в двух статьях. То что доктор прописал. Теперь, ткнув в видеоролик, я увижу в каких статьях он используется.

Функционал модуля Entity Usage гораздо богаче чем то, для чего я его использую. К примеру, в настройках модуля в разделе Warning message on delete form ставлю галку на Мультимедиа. Теперь при попытке удалить Медиа, если оно где-то используется, получаю предупреждение о том, что объект где-то используется. Предупреждён, значит вооружён!

drupal

Это только встроенные способы использования модуля, предусмотренные разработчиками. При работе с Представлениями, использование связей между сущностями открывает дополнительные творческие возможности.

Теги

 

Похожие материалы

Drupal 7 — правка багов с кириллицей

В седьмом друпале есть несколько багов с кириллицей, которые никак не поправят. После каждой переустановки или обновлении drupal 7 я руками вношу следующие изменения, перезаписывая функции:

Теги

Drupal 9 — добавляем свой логотип на ссылки в Telegram и Яндекс Дзен

При отправке ссылки Telegram считывает метатеги на указанном URL, кеширует их и выводит на экран красивым блоком. Добавим в этот блок свой логотип.

Теги