Как создать узел из веб-формы с помощью правил?
Я хочу создать узел на основе данных веб-формы, используя модуль Правила. Это связано с усложнением отношений внутри соответствующей CRM-системы.
Я уже нахожусь в точке, где у меня создана веб-форма, и добрался до следующей (и рабочей) точки в рамках правил:
{ "rules_member_news_import_" : {
"LABEL" : "Member News (cloned)",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "webform_rules", "rules" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "webform_has_id" : {
"form_id" : [ "form_id" ],
"selected_webform" : { "value" : { "webform-client-form-730" : "webform-client-form-730" } }
}
}
],
"DO" : [
{ "entity_create" : {
"USING" : {
"type" : "node",
"param_type" : "newsfrommembers",
"param_title" : "[data:title_member_news-value-raw]",
"param_author" : [ "user" ]
},
"PROVIDE" : { "entity_created" : { "entity_created" : "Created entity" } }
}
}
]
Что мне нужно сделать, так это использовать остальные поля веб-формы для переноса информации, например, основной текст и изображение.
Чему я пытаюсь научиться, так это тому, как также включать тело и другую информацию. Я использовал экспорт, чтобы добавить то, что, по моему мнению, будет работать, например:
"param_body" : "[data:body]"
В действии entity_create, однако, когда я импортировал отредактированный текст, он просто исчез, поэтому я предполагаю, что мне нужно добавить отдельное действие для добавления переменных сущности.
Я вернулся к использованию меню и снова не смог заставить его работать. Должно быть, я делаю что-то в корне неправильное.
1 answers
1-я попытка
Перед использованием действия правил, такого как "Установить значение данных" для вашего поля a, вы должны убедиться, что добавили условие правил Entity has field
(связанное с полем, для которого вы хотите установить значение). И обязательно добавьте это условие Entity has field
ПЕРЕД другими Условиями правил, в которых вы, возможно, захотите сослаться на это поле.
Это также упоминается в пользовательском интерфейсе правил, например, когда вы добавляете условие "сравнение данных": где-то написано " Селектор данных помогает вам детализировать данные, доступные для правил. Чтобы поля сущности отображались в селекторе данных, вам, возможно, придется использовать условие "у сущности есть поле" (или "содержимое имеет тип')".
Вышесказанное относится к любому из ваших "... остальные поля в веб-форме" (как в вашем вопросе).
Для видеоурока, иллюстрирующего важность этого условия Entity has field
, обратитесь к Типам данных и выбору данных, особенно к тому, что показано между примерно 13:30 и 17:30 в нем.
2-я попытка
Предыдущая попытка более или менее похожа на Начало работы с правилами, которая разрешает различные ситуации, когда некоторые переменные, по-видимому, недоступны в действиях правил и т. Д. Однако для этого конкретного вопроса, который касается использования правил в сочетании с веб-формой, все немного сложнее, как будет объяснено ниже.
Давайте предположим, что у меня есть веб-форма, созданная с некоторыми его полей с именами машин, такими как:
-
contact_us_first_name
. -
contact_us_last_name
. -
contact_us_subject
.
После добавления этих полей (с одинаковыми именами машин) в любую из ваших собственных форм вы сможете импортировать прототип -правило ниже (с использованием пользовательского интерфейса правил) в вашей собственной среде (без ограничения целостности):
{ "rules_create_a_node_from_a_submitted_webform" : {
"LABEL" : "Create a node from a submitted webform",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "webform_rules" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "user_has_role" : { "account" : [ "user" ], "roles" : { "value" : { "2" : "2" } } } }
],
"DO" : [
{ "drupal_message" : { "message" : "The webform component submitted by [data:contact_us_first_name-value] (= [data:contact_us_first_name-title]) [data:contact_us_last_name-value] (= [data:contact_us_last_name-title]) contains a field labeled \u0022[data:contact_us_subject-title]\u0022 which has value \u0022[data:contact_us_subject-value]\u0022." } }
]
}
}
В приведенное выше правило я включил дополнительное условие Правил, чтобы предотвратить выполнение действия Правил для анонимные пользователи (не стесняйтесь изменять идентификатор роли или просто удалять это условие правил. И правило запускается с помощью события правил "После отправки веб-формы".
Действие "Правила" отображает (информационное) сообщение на сайте (мой рекомендуемый способ написания и отладки правил...) только после отправки веб-формы. Вот что я указал (в пользовательском интерфейсе правил) в качестве отображаемого сообщения:
Компонент веб-формы, представленный [данные: contact_us_first_name-значение] (= [данные: contact_us_first_name-название]) [данные:contact_us_last_name-значение] (= [данные:contact_us_last_name-название]) содержит поле с надписью "[данные:contact_us_subject-название]", которое имеет значение "[данные:contact_us_subject-значение]".
Вот пример сообщения, показанного в моей собственной настройке:
Компонент веб-формы, представленный Dries (= Имя:) Buytaert (= Фамилия:) содержит поле с надписью "Тема:", которое имеет значение "Ходят слухи, что модуль правил может даже заменить модуль node_convert! ".
Что показывает приведенное выше правило прототипа, так это то, что "подсказка" для ответа на ваш вопрос заключается в том, что у вас есть доступ ко всем меткам и всем значениям любого доступного поля веб-формы, т. Е.:
-
[data:MachineFieldName-title]
содержит Метку поля с именем машины MachineFieldName. -
[data:MachineFieldName-value]
содержит Значение поля с именем машины Имя поля машины
3-я попытка
Вышесказанное - хорошее начало, но все же недостаточное для достижения вашей цели (="... используйте остальные поля веб-формы для переноса информации, например, основной текст...", как в вашем вопросе). Однако вы можете использовать метод, аналогичный описанному в моем ответе на " Как выполнить сравнение данных с представленными данными веб-формы при использовании модуля правил?". Для коротко:
- Добавьте дополнительное действие правил в
Add a variable
(для каждого из компонентов веб-формы для переноса информации, с присвоенным ему значением, равным вашему[data:ComponentName-value-raw]
(и с типом данных, который равен типу данных вашего компонента веб-формы). - В своих последующих действиях с правилами вы можете ссылаться на значение этих переменных, которые вы только что добавили (это ключ к разгадке!).
Демонстрационная версия
Компоненты веб-формы
Предположим, что веб-форма с form_id=191
и с эти компоненты веб-формы:
- Метка =Заголовок, Имя машины =
demoform_title
, Тип данных = Текстовое поле. - Метка = Текст, Имя машины =
demoform_text
, Тип данных = Текстовая область. - Метка =Номер, Имя машины =
demoform_number
, Тип данных = Номер. - Метка = Опция, Имя машины =
demoform_option
, Тип данных = Выбор параметров (одно значение).
Тип содержимого статьи
Предположим, что тип содержимого статьи содержит следующие поля:
- Метка =Название, Имя машины=
title
, Тип поля = элемент модуля узла. - Метка = Тело, Имя машины =
body
, Тип поля = Длинный текст и сводка. - Метка = Номер свободного формата, Имя машины =
field_free_format_nr
, Тип поля = Целое число. - Метка = Список опций, Имя машины =
field_optionlist
, Тип поля = Список(текст).
Пользовательское правило
Вот пользовательское правило (в формате экспорта правил), которое является расширенной (улучшенной) версией правила, включенного в вопрос. Это правило создаст новый узел (из введите Article
), и который будет использовать данные, включенные в вышеупомянутые компоненты веб-формы:
{ "rules_create_a_node_from_webform_data" : {
"LABEL" : "Create a node from webform data",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "webform_rules", "rules" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "webform_has_id" : {
"form_id" : [ "form_id" ],
"selected_webform" : { "value" : { "webform-client-form-191" : "webform-client-form-191" } }
}
}
],
"DO" : [
{ "drupal_message" : { "message" : "The webform submitted contains these fields:\r\n\u003C\/ul\u003E\r\n\u003Cli\u003Ethe field labeled \u0022[data:demoform_title-title]\u0022 which has value \u0022[data:demoform_title-value-raw]\u0022.\u003C\/li\u003E\r\n\u003Cli\u003E the field labeled \u0022[data:demoform_text-title]\u0022 which has value \u0022[data:demoform_text-value-raw]\u0022.\u003C\/li\u003E\r\n\u003Cli\u003E the field labeled \u0022[data:demoform_number-title]\u0022 which has value \u0022[data:demoform_number-value-raw]\u0022.\u003C\/li\u003E\r\n\u003Cli\u003E the field labeled \u0022[data:demoform_option-title]\u0022 which has value \u0022[data:demoform_option-value-raw]\u0022.\u003C\/li\u003E\r\n\u003C\/ul\u003E" } },
{ "variable_add" : {
"USING" : { "type" : "text", "value" : "[data:demoform_text-value-raw]" },
"PROVIDE" : { "variable_added" : { "var_demoform_text" : "Form variable text" } }
}
},
{ "variable_add" : {
"USING" : { "type" : "text", "value" : "[data:demoform_number-value-raw]" },
"PROVIDE" : { "variable_added" : { "var_demoform_number_text" : "Form variable number text" } }
}
},
{ "data_convert" : {
"USING" : { "type" : "integer", "value" : [ "var-demoform-number-text" ] },
"PROVIDE" : { "conversion_result" : { "var_demoformvar_number" : "Form variable number" } }
}
},
{ "variable_add" : {
"USING" : { "type" : "text", "value" : "[data:demoform_option-value-raw]" },
"PROVIDE" : { "variable_added" : { "var_demoform_option" : " Form variable option" } }
}
},
{ "entity_create" : {
"USING" : {
"type" : "node",
"param_type" : "article",
"param_title" : "[data:demoform_title-value-raw]",
"param_author" : [ "user" ]
},
"PROVIDE" : { "entity_created" : { "article_created" : "Created article" } }
}
},
{ "data_set" : {
"data" : [ "article-created:body:value" ],
"value" : [ "var-demoform-text" ]
}
},
{ "data_set" : {
"data" : [ "article-created:field-free-format-nr" ],
"value" : [ "var-demoformvar-number" ]
}
},
{ "data_set" : {
"data" : [ "article-created:field-optionlist" ],
"value" : [ "var-demoform-option" ]
}
},
{ "data_set" : { "data" : [ "article-created:comment" ], "value" : "0" } },
{ "entity_save" : { "data" : [ "article-created" ], "immediate" : "1" } },
{ "drupal_message" : { "message" : "A new article got created, with nid=[article-created:nid] and url=[article-created:url]" } }
]
}
}
Некоторые дополнительные сведения о действиях Правил, которые были добавлены:
-
Show a message on the site
: Это только для целей отладки/демонстрации (удалите его, если он вам больше не нужен/не нужен). Вот пример сообщения, которое отображается после отправки веб-формы:Отправленная веб-форма содержит следующие поля:
- поле с надписью "Название" который имеет значение "Какое-то интересное название моей веб-формы".
- поле с надписью "Текст", которое имеет значение "Просто какой-то текст, с некоторым дополнительным текстом и еще одной строкой и еще одной".
- поле с надписью "Число", имеющее значение "842316".
- поле с надписью "Опция", имеющее значение "A".
Add a variable
( дважды): Чтобы сделать значение компонентов веб-формыdemoform_number
иdemoform_option
доступным в последующих действиях Правил. Обратите внимание, что дляdemoform_number
дополнительное действие правилConvert data type
необходимо, чтобы заставить его работать.Set a data value
(3 времена): Для заполнения тела узла и 2 полей узла, используя переменные, созданные в предшествующем действии Правил.Set a data value
: Чтобы установить "Комментарии закрыты" для создаваемого узла (это необязательное действие правил, просто иллюстрация других вещей, которые вы можете сделать с таким узлом созданный).Save entity
: Чтобы фактически сохранить узел.-
Show a message on the site
: Это только для целей отладки/демонстрации (удалите его, если он вам больше не нужен/не нужен). Вот пример сообщения, которое отображается после отправки веб-формы:Создана новая статья с nid=123 и url=http://www.example.com/node/123
Конечный результат
После отправки веб-формы с данные как и в приведенном выше примере, была создана новая статья (с идентификатором узла = 123
), и с этими сведениями об этом узле:
- Название : Какое-то интересное название моей веб-формы
-
Тело:
Просто немного текста,
С некоторым дополнительным текстом
И еще одна строка
И еще один
Свободный Формат Nr: 842316
-
Список опций : Дополнительно (метка, соответствующая значению ключа "
A
")
Дополнительные возможности
С некоторыми дополнительными уточнениями вышеупомянутое правило-прототип также может быть использовано для создания альтернативы на основе правил для модуля Преобразования узлов... и, похоже, у него также есть потенциал для создания аналогичного эквивалента Преобразования сущности .