Вы здесь

Как при отправке Webform создать ноду, записав в ее поля значения из полей формы

0

Приветствую сообщество!

Возникла задача, при отправке webform перехватить поля, записав их в новую созданную автоматом ноду.

Есть тип материала reviews. У него есть поля: title, field_name, field_tel, body.
Есть webform с полями: name, phone, text.
При отправке формы происходит редирект на страницу подтверждения отправки формы - webform-confirmation.tpl.php

Подскажите как организовать перехват полей и создание ноды правильно? То что получается - это создание новой ноды, при отправки формы с помощью этого кода в файле webform-confirmation.tpl.php

//загружаем  функции для работы с результатами заполнения формы
include_once(drupal_get_path('module', 'webform') .'/includes/webform.submissions.inc');
// получаем параметры необходимые для работы функции это id node и  id результата
$nid = arg(1);
$sid = $_GET['sid'];
// получаем результат
$submission = webform_get_submission($nid, $sid);
// создаем переменные с данными для создания ноды
$name = $submission->data[1]['value'][0];
$phone = $submission->data[2]['value'][0];
$text = $submission->data[3]['value'][0];
$date =  $submission->submitted;

// тут создает объект ноды
$node = new stdClass();
$node->type = 'reviews';
$node->title = $name.' ('. $phone .')';
$node->language = LANGUAGE_NONE;
$node->body[$node->language][0]['value'] = $text;
$node->body[$node->language][0]['summary'] = '';
$node->body[$node->language][0]['format'] = 'filtered_html';
$node->field_tel[$node->language][0]['value'] = $phone;
$node->field_name[$node->language][0]['value'] = $name;
$node->uid = 1;
$node->status = 0;      // 1 - опубликовано, 0 - нет
$node->promote = 0;     // 1 - показывать на главной, 0 - нет

// создаем ноду
node_object_prepare($node);
node_save($node);

Но проблема в том, что в переменные $name, $phone, $text не записываются значения из полей формы, и не передаются в поля ноды. Или я просто не понимаю как правильно это сделать. Сразу скажу, что PHP практически не знаю, ковыряю по тиху, пытаюсь разобраться! Так что просьба в google не отсылать, а помочь по возможности.

Буду благодарен за помощь!

Добавлено (drupal выводит предупреждения):

Notice: Undefined index: value в функции include() (строка 30 в файле C:\OpenServer\domains\site.ru\sites\all\themes\sbgroup\webform-confirmation-40.tpl.php).
Notice: Undefined offset: 2 в функции include() (строка 31 в файле C:\OpenServer\domains\site.ru\sites\all\themes\sbgroup\webform-confirmation-40.tpl.php).
Notice: Undefined index: value в функции include() (строка 32 в файле C:\OpenServer\domains\site.ru\sites\all\themes\sbgroup\webform-confirmation-40.tpl.php).
Версия Drupal: 
7.x
Категория: 
Field APINode API
Связанные проекты: 
Webform
Вопрос задан 06.02.2016 - 14:18
Аватар пользователя Turon
Turon
17

Ответы

2

Есть возможность это целиком в UI настроить через rules, https://www.drupal.org/project/webform_rules .

Ответ дан 06.02.2016 - 14:37

А с помощью кода не получиться..? Вроде чуть-чуть осталось, но сам не могу разобраться.

Комментарий оставлен 06.02.2016 - 14:50

Короче кодом не победить. Подскажите, как при помощи rules передать в значения полей создаваемой сущности при отправке формы, значение полей из этой формы. Не могу найти как связать такое...

Комментарий оставлен 06.02.2016 - 19:30

Токены должны появиться при выборе реакции на "после отправки формы" и действия "создать ноду".

А еще посмотрите на http://www.drupalcontrib.org/api/drupal/contributions%21webform%21webfor... . У вас там в submission будут все поля. А с помощью http://xandeadx.ru/blog/drupal/549 вы удобно и красиво создадите ноду и заполните поля.

Комментарий оставлен 06.02.2016 - 21:58
1

Во первых писать бизнес логику в шаблонах нельзя, у Webform есть для этого соответствующие хуки - http://cgit.drupalcode.org/webform/tree/webform.api.php

Во вторых в ошибках вам пишут, что вы неправильно получаете данные из $submission->data. Смотрите структуру с помощью debug() или dsm().

Ответ дан 06.02.2016 - 15:20
Аватар пользователя xandeadx
xandeadx
1542

Почему логику в шаблонах нельзя?

Если это на паре страниц юзаемых раз в три года - то это вполне хорошее решение.

Комментарий оставлен 06.02.2016 - 16:24

это плохое решение, даже если используется на тестовом сайте или раз в 5 лет. Как говорится, мухи отдельно, котлеты отдельно. Если вы только начинаете изучать php, не начинайте с говнокода.

Комментарий оставлен 06.02.2016 - 16:31

php - мне никогда не асилить - у меня мозги по-другому работают... ))
Лично я против говнокода, но ещё больше против изначально не продуманных решений

Если не сложно посмотреть: http://dru.io/question/5800

А так... есть задачи, которые надо решать и не редко они решаются прикольно и креативно
Ну например во - забавное и простое решение http://dru.io/question/5797 особенно если в коде нифига не понимаешь

Комментарий оставлен 09.02.2016 - 15:07