Нашел два интересных мануала на просторах сети, на тему «Связь «родитель-ребенок» с помощью Node reference«, и боюсь что потеряется, сделаю копию себе… Вот первый из них.
На первом этапе мы пользуемся модулем References (drupal.org/project/references). А именно — Node reference который в него включен. Этот модуль связывает 2 разных типа нод (типа содержимого) друг с другом. Причем один тип это к которому крепится (point) и тип который прикрепляется (offer).
Итак открываем настройки полей типа содержимого offer (прикрепляемый) и смотрим:
/admin/structure/types/manage/offer/fields
C трудом, но можно разглядеть поле Node reference. На computed пока не смотим. Итак именно это поле нас прикрепляет к «основному» типу содержимого (point). Жмем «Изменить». Ну тут у нас все уже настроено, то есть прикреплено к Зданию (point).
То есть когда мы создаем «Презентацию» (offer) в данный момент(/node/add/offer).
Мы из выпадающего списка зданий (на рисунке в самом низу) можем вручную выбрать к чему прикрепиться. Весь «метод Жилина» заключается в том, чтобы Здание (point) выбиралось из списка автоматически при создании Презентации (offer).
Computed field (drupal.org/project/computed_field)
Этот модуль создает поле, которое позволяет выполнять произвольный php код во время отображения типа содержимого (node) и/или во время во время его сохранения. В «методе Жилина» мы использует его дважды.
Создаем ссылку
Ссылка создается на прикрепляемый(offer) тип содержимого из основного типа содержимого(point). Итак переходим в настройки полей point.
/admin/structure/types/manage/point/field
Вот на картинке с трудом но можно разглядеть наше поле на этой странице. Жмем «Изменить»
Здесь у нас php код вставлен в поле Display Code (PHP) как на картинке. Этот код будет выполняться всегда когда запрошено отображение типа содержимого (в нашем случае — point).
$display_output = l('СОЗДАТЬ ПРЕЗЕНТАЦИЮ', 'node/add/offer/' . $entity->nid, array('query' => array('destination' => 'node/' . $entity->nid)));
Собствено вот он. Он создает при отображентии типа содержимого (point) «основной» ссылку на создание типа содержимого «прикрепляемый» (offer). На которую можно нажать и попасть на создание ноды offer.
А так же он передает в этой ссылке свой nid (node id).
То есть она выглядит примерно так:
/node/add/offer/70?destination=node/70
Где 70 это nid типа содержимого point.
Сохраняем nid типа содержимого point в поле node refernce
Поле node reference мы уже создали выше.
Итак мы уже попали на страницу где создается offer. И грубо говоря мы должны этот nid поймать и впихнуть в поле node reference.
Для этого мы воспользуемся полем Computed field
Вернемся на /admin/structure/types/manage/offer/fields
Теперь в поле Computed field жмем «Изменить»
В как мы видим в поле Computed Code (PHP) мы вставили следующий код.
$this_uri = request_uri();
$point_nid = explode("/", $this_uri);
if (is_numeric($point_nid[5])) {
$entity->field_display_point[$langcode][0]['nid'] = $point_nid[5];
} else {
}
$entity_field[0]['value'] = '';
Тут я после else хотел вставить дебаг, но не успел. В этом коде мы берем ссылку которую передали из point типа /node/add/offer/70?destination=node/70. И выдергиваем из него nid (цифру 70). Далее мы прогамно вставляем nid в поле node reference который мы уже создали. Этот код выполняется во время сохранения типа содержимого offer.
Итак связку мы совершили и node reference во время отображения offer, сам покажет что данный offer пкрикриплен к point из которого был создан. Теперь надо чтобы во всех point отрисовались все offer которые были из него созданы. Для этого воспользуемся модулями views (drupal.org/project/views) и viewfield (drupal.org/project/viewfield)
Viewfield
Viewfield возволяет views вставлять в поля типа содержимого.
Создаем views /admin/structure/views/add
И настройки у нас выглядят следующим образом.
То есть relationship у нас ссылается на здание (point), а CONTEXTUAL FILTERS (Arguments в drupal 6) указывает на nid здания. Ну и в FIELDS указываем Заголовок, чтобы было что отображать.
Далее переходим на
/admin/structure/types/manage/point/field
Где создаем поле типа views.
Вот его настройки:
То есть мы указываем название views который был создан выше и в поле аргументс указываем token nid.
Вот и все. Теперь при отображении типа содержимого point, должны отрисоваться ссылки на на offer которые прикреплены к нему.
Drupal 7
h++ps://docs.google.com/document/pub?id=1ZC4TWhpagidRCVSxQbFQo770y2ATMA-E-rcjUGXcds0
Оставьте первый комментарий