Сущности Drupal без полей

Цитата из русского перевода руководства пользователя Drupal:

«В пределах сущности, данные хранятся как отдельные поля, каждое из которых содержит один тип данных, такие как форматированный или обычный текст, изображения или другие файлы или даты. Типы полей могут быть определены через ядро Drupal или модули.

Поля могут быть добавлены администратором для подтипа сущности, так что все сущности этого подтипа имеют одинаковый набор доступных полей. Например, Продавец тип материала на сайте городской ярмарки может иметь поля для Имя продавца, логотипа, URL сайта и описания, в то время как Основная страница тип материала может иметь только поля для заголовка и текста. Когда вы создаете или редактируете сущности, вы определяете значения для полей в сущности».

Всегда ли сущностям Drupal необходимы поля? Возможно ли обойтись без полей, как обойтись без полей и что это даст? Редакция от 14.03.2021.

Создан 14.03.2021 11:32:39

- Сущности Drupal без полей

Вот картинка того самого подтипа Основная страница, содержащего единственное поле Body. Поле это заполняется вручную, способ заполнения зависит от используемых в Drupal текстовых форматов и установленных редакторов.

А если контент разрабатывается не средствами редактирования Drupal, а с применением какого-либо иного инструментария, обеспечивающего возможность легкой и удобной генерации чистенького и хорошо отформатированного с помощью CSS HTML-кода? Или, допустим, необходимо связать создаваемый материал с каким-нибудь HTML-кодом страницы Confluence? Тогда нет необходимости ни в поле Body сущности Drupal, ни во встроенных редакторах. Достаточно обеспечить внедрение этого самого HTML-кода непосредственно в HTML-код создаваемого материала.

Внедрение страницы Confluence в сущность Drupal

Внедрение страницы Confluence в сущность Drupal более очевидно и понятно всем, не один же автор будет периодически возвращаться и читать всю эту ахинею 😜

Итак, на любой пользовательской странице Confluence имеется меню •••, что в переводе означает Другие действия. Если двинуться дальше (Дополнительные сведения), то можно запросто Просмотреть формат хранения и убедиться в том, что страничка не только хранится в чистеньком HTML-коде, но имеет еще и уникальный идентификатор pageId в адресной строке браузера. Вот этим pageId и следует оперировать, используя способы загрузки контента сущностей Drupal без применения полей, а именно:

  • при создании сущности Drupal ей присваивается синоним path со значением, равным pageId;
  • при загрузке (генерации) сущности в сущность автоматически внедряется и рендерится страница с адресом, содержащим «на хвосте» pageId, равный path.

Вот и вся любовь.

Способы загрузки контента сущностей Drupal без применения полей

Способы загрузки контента сущностей Drupal без применения полей могут быть реализованы с помощью шаблонов страниц. Для Drupal 7 основным шаблоном будет node.tpl.php, для Drupal 8 и 9 - node.html.twig. Данные шаблоны копируются из каталогов /modules/node и /core/modules/node соответственно в каталоги используемой темы оформления.

Затем оба эти файла переименовываются под тип материала. Тип материала лучше создать свой собственный, например topic. В этом случае шаблоны будут иметь наименования node--topic.tpl.php и node--topic.html.twig.

Далее немножко логики (вместо конкретного кода):

  • создается переменная, которой присваивается значение идентификатора текущей ноды - nid или url (зависит от версии Drupal);
  • из созданной переменной выгрызается «передняя» часть адреса, включая слеш. На выходе получается числовое значение, соответствующее идентификатору внедряемой страницы Confluence pageId;
  • выполняется проверка существования страницы с идентификатором pageId в Confluence. Это явная перестраховка, но «береженого Бог бережет (решила монахиня, надевая презерватив на свечку)»;
  • если таковая страница существует, то оператор include, имеющийся как в php, так и в twig, «всасывает» ее HTML-код из Confluence в ноду Drupal;
  • рендерится код в какой-нибудь обертке типа div.

Вот и весь расклад.

В чем польза от бес_ПОЛЕ_зных сущностей Drupal?

В чем польза от бес ПОЛЕ зных сущностей Drupal? Трудно сказать. Но первое, что приходит в голову - это отсутствие необходимости манипуляций с запросами к базе данных Drupal, если речь идет о динамике. При загрузке значения поля «на лету» получается лишнее обращение к БД, в данном же случае такое обращение исключается. Это хорошо.

Можно по аналогии избавиться и от полей связанных сущностей. Можно вообще прикрутить HTML-код страницы не только Confluence, а даже Git или любого другого источника. Прогер пишет там себе что-то в Git, а его писанина синхронно обновляется в Drupal, что может быть очень удобно при глубоком детальном и дотошном документировании какого-нибудь программного обеспечения.

Автор при создании контента применяет AuthorIT, подготавливая при этом минимум два HTML-файла: один под анонс (teaser), а другой уже непосредственно под Body. Перед кодом файла анонса добавляется нолик, как в сов. секретных приказах Сталина. В частности, данную статью можно посмотреть в исходниках (форматах хранения):

  • анонс - /sites/default/files/054836.htm;
  • полная версия - /sites/default/files/54836.htm,

добавив перед ними доменное имя.

Как-то так...