Как использовать пользовательский тип данных в качестве поля в Drupal 7? - PullRequest
5 голосов
/ 01 июня 2011

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

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 01 июня 2011

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

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

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

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

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

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

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

2 голосов
/ 01 июня 2011

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

...