Как использовать пользовательский тип данных в качестве поля в drupal 7?

#drupal #drupal-7

#drupal #drupal-7

Вопрос:

У меня есть несколько пользовательских типов данных в drupal 7

  1. ресторан
  2. меню
  3. рецепт
  4. шеф

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

На языке SQL я бы назвал это внешним ключом, но у меня много проблем с поиском того, как это сделать в drupal 7.

Я подозреваю, что должен быть какой-то модуль или функциональность, с которыми я не знаком. Но drupal использует свой собственный жаргон, и я думаю, что я падаю в своем Google-fu

кто-нибудь знает, что я ищу?

Ответ №1:

Вероятно, это не типы данных, а, скорее всего, типы контента. То, что вы ищете, это

  • Способ связать узлы (т.Е. содержимое) из одного типа контента в узлы другого (шеф-повар в ресторан, меню в ресторан, рецепт в меню и т.д.).
  • Способ отображения информации из связанных узлов (прямые или косвенные отношения) при отображении конкретного узла.

Связь между узлами может быть достигнута с помощью модуля References (порт на Drupal 7 nodereference модуля, включенного в CCK для Drupal 6). Это позволяет вам добавлять ссылки на узлы при редактировании другого. Связь может быть настроена таким образом, чтобы можно было ссылаться только на узлы указанного типа. Ссылки такого рода не являются двунаправленными и могут (легко) перемещаться только с узла-реферера, а не с узла, на который дана ссылка. В Drupal 6 средство ссылки на узел предоставило дополнительное поле для навигации по отношению в обоих направлениях. К сожалению, он (пока) не был портирован на Drupal 7.

Ссылки могут устареть в ближайшем будущем в пользу модуля Entity reference. Ссылка на сущность позволяет предоставлять двунаправленные запросы через представления и надлежащую интеграцию с модулем Entity API. Последнее должно гарантировать, что отношения, определенные с модулем, полностью (проблематично) доступны для навигации и могут использоваться с модулями, использующими метаданные объекта (Seach API и другие).

Другим решением, которое также использует систему сущностей, является модуль Relation. Он обеспечивает полные двунаправленные отношения. Эти отношения сами по себе являются объектами с возможностью заполнения, что означает, что вы добавляете свойства к отношениям (например, даты начала и окончания работы шеф-повара в ресторане).

Как только вы получите отношение, существуют различные способы отображения связанной информации на странице узла. Я не знаю отношения, но если ссылки ведут себя как в версии Drupal 6, это позволит отображать только базовую информацию из непосредственно связанных узлов. Одним из решений является реализация hook_node_view() в пользовательском модуле для навигации по отношению, извлечения различных узлов, форматирования собранной информации с помощью пользовательского хука темы и добавления ее в $node->content для рендеринга.

Поскольку Entity reference интегрируется с view, вы должны быть в состоянии создать представление для отображения узла, связанного с отображаемым в данный момент узлом (используя текущий узел в качестве контекстного аргумента). Затем вы можете встроить представление программно в представление вашего узла (опять же, через hook_node_view() ) или использовать блочное отображение.

Ответ №2:

В Drupal 6 вы бы использовали подмодуль проекта CCK, называемый Node Reference. Ссылка на узел — это поле в одном типе контента, которое указывает на другой узел. В Drupal 7, поскольку большая часть функциональности CCK была перенесена в core, подмодуль ссылки на узел теперь является частью проекта References.

Комментарии:

1. Возможно, вы также захотите проверить сайт бета-тестирования Drupal Answers. Чем больше людей его используют, тем больше у него шансов пройти бета-тестирование: drupal.stackexchange.com