Создание дочерних нод из родительской ноды

Нашел два интересных мануала на просторах сети, на тему «Связь «родитель-ребенок» с помощью 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.

005-2.png

А так же он передает в этой ссылке свой 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

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*


двенадцать + одиннадцать =