Створення дочірніх нод з батьківської Ноди
Знайшов два цікавих мануала на просторах мережі, на тему «Зв'язок« батько-дитина »за допомогою Node reference«, і боюся що загубиться, зроблю копію собі ... Ось перший з них.
На першому етапі ми користуємося модулем References (drupal.org/project/references). А саме - Node reference який в нього включений. Цей модуль пов'язує 2 різних типи нод (типу вмісту) один з одним. Причому один тип це до якого кріпиться (point) і тип який прикріплюється (offer).
Отже відкриваємо налаштування полів типу вмісту offer (прикріплюється) і дивимося:
C працею, але можна розгледіти поле Node reference. На computed поки не зва. Отже саме це поле нас прикріплює до «основному» типу вмісту (point). Тиснемо «Змінити». Ну тут у нас все вже налаштовано, тобто прикріплено до Будівлі (point).
Тобто коли ми створюємо «Презентацію» (offer) в даний момент (/ node / add / offer).
Ми зі списку будівель (на малюнку в самому низу) можемо вручну вибрати до чого прикріпитися. Весь «метод Жиліна» полягає в тому, щоб Будівля (point) вибиралося зі списку автоматично при створенні Презентації (offer).
Computed field (drupal.org/project/computed_field)
Цей модуль створює поле, яке дозволяє виконувати довільний php код під час відображення типу вмісту (node) і / або під час під час його збереження. У «методі Жиліна» ми використовує його двічі.
Ось на зображенні з працею але можна розгледіти наше поле на цій сторінці. Тиснемо «Змінити»
Тут у нас 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).
Тобто вона виглядає приблизно так:
Де 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 возволяет views вставляти в поля типу вмісту.
Створюємо views / admin / structure / views / add
І настройки у нас виглядають наступним чином.
Тобто relationship у нас посилається на будівлю (point), а CONTEXTUAL FILTERS (Arguments в drupal 6) вказує на nid будівлі. Ну і в FIELDS вказуємо Тема, щоб було що відображати.
Далі переходимо на
Де створюємо поле типу views.
Ось його налаштування:
Тобто ми вказуємо назву views який був створений вище і в поле аргументс вказуємо token nid.
От і все. Тепер при відображенні типу вмісту point, повинні відмалювати посилання на на offer які прикріплені до нього.