Наcледование таксономии в связях Node Reference с помощью Rules

Главные вкладки

Аватар пользователя Nick Fedchik Nick Fedchik 2 апреля 2012 в 13:04

Описание задачи:
Есть нода типа "Соревнование", категорированная словарем "Дисциплина" с одним вариантом выбора термина.
На "Соревнование" ссылаются (поле "Ссылка на материал") ноды типа "Этап" (создаем несколько этапов со страницы соревнования, по ходу спасибо модулю Node Reference URL Widget за автодобавление связи)

Вопрос:
Как сделать так, чтобы при создании экземпляр нодетипа "Этап" автоматически наследовал в своё поле "Дисциплина" (тип "Ссылка на термин") значение из такого же поля "Дисциплина" ноды "Соревнование"?
(т.е. аналогично тому, как это происходит с ссылками на ноды в Node Reference URL Widget)

Решение:
Делаем поле "Ссылка на термин" НЕ ОБЯЗАТЕЛЬНЫМ. В моем случае еще и единичное значение, как будет со множественными - не знаю.
Если используется Display Suite, то поле "Дисциплина" прячем от редактирования (ибо его мы должны наследовать).

Включаем модуль Rules и добавляем новое правило.
Event:
+ Before saving content

Условия:
+ Content is of type
Parameter: Содержимое: [node], Типы материалов: "Этап"
(Указываем тот нодетип, ноду которого будем добавлять и который будет ссылаться на нодетип парента)
и еще одно условие

+ Entity has field
Parameter: Entity: [node:field-ref-competition], Поле: field_disciplines
(здесь добавляем поле создаваемой ноды, которое ссылается на парент ноду, и указываем то поле парента, которое нам надо использовать)

Действия:
+ Set a data value
Parameter: Данные: [node:field-disciplines], Значение: [node:field-ref-competition:field-disciplines]
(Здесь собственно и делаем само присваивание)

Готово.

Комментарии

Аватар пользователя Nick Fedchik Nick Fedchik 2 апреля 2012 в 13:52

Пока не нашел, как в подстановочных шаблонах взять значение поля термина из ноды, на которую будет ссылаться новая нода...
С Действиями не понятно как...

Аватар пользователя Nick Fedchik Nick Fedchik 2 апреля 2012 в 14:02

Ch wrote:
Его надо добавить предварительно в область видимости через entity_has_field

Область видимости - это где добавляется?
Пардон, не силен я в Rules, но разберусь...

Аватар пользователя Nick Fedchik Nick Fedchik 2 апреля 2012 в 14:07

Ch wrote:
Его надо добавить предварительно в область видимости через entity_has_field

Ага, немного раскопал, только не понятно -какое поле добавить - поле ссылки на парент ноду?

Аватар пользователя Ch Ch 2 апреля 2012 в 14:24
{ "rules_autotags" : {
    "LABEL" : "Auto tags",
    "PLUGIN" : "reaction rule",
    "REQUIRES" : [ "rules" ],
    "ON" : [ "node_insert" ],
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "article" : "article" } } } },
      { "entity_has_field" : { "entity" : [ "node:field-rrr" ], "field" : "field_tags" } }
    ],
    "DO" : [
      { "data_set" : {
          "data" : [ "node:field-tags" ],
          "value" : [ "node:field-rrr:field-tags" ]
        }
      }
    ]
  }
}

Название типов и полей свои подставьте.