Здравствуйте, светила друпальной науки! Дошел я таки до создания формы обратной связи. Последние штрихи, так сказать.
Суть вопроса.
Создал форму с webform 6.x-2.9, темизировал ее с помощью node-webform.tpl.php и вставил в ноду(страница) с помощью CCK. Отображается, полет нормальный. Но! Мне не нравится как она себя ведет после заполнения. Заполняю форму на странице, которая призвана показывать контакты и ее соответственно (изображение 1 в аттаче). После заполнения она переадрессует на сообщение об отправке и под сообщением дает ссылку на себя, как на материал (изображение 2 в аттаче). Переходим по ссылке и попадаем на материал опрос с формой (изображение 3 в аттаче).
Вопрос знатокам. Как научить ее чтобы после заполнения возвращалась та же страница (нода призванная служить для показа контактов) и при этом выводилось сообщение об успешной отправке? Аякс не обязателен.
Комментарии
Прочитайте внимательнее поле заполнения ответа:
«Сообщение с подтверждением заполнения или ссылка, на которую будет переправлен пользователь, после заполнения опросника. :»
Это и есть ответ на ваш вопрос.
Те вам надо туда запихать вот это:
«message: Сообщение успешно отправлено, скоро отвечу!»
На всякий случай, вот код который отвечает за перенаправления:
<?php // Check confirmation field to see if redirect should be to another node or a message.
if (isset($form_state['values']['submission'])) {
drupal_set_message(t('Submission updated.'));
$redirect = NULL;
}
elseif (valid_url(trim($node->webform['confirmation']), TRUE)) { // <--- перенаправление по внешней ссылке
$redirect = trim($node->webform['confirmation']);
}
// Check if the form should redirect to an internal URL, strip tags off
// first in case a WYSIWYG editor messed it up.
elseif (preg_match('/^internal:/', trim(strip_tags($node->webform['confirmation'])))) { // <--- перенаправление по внутренней ссылке (например 'node/123/edit')
$path = preg_replace('/^internal:/', '', trim(strip_tags($node->webform['confirmation'])));
$redirect = array(trim($path), 'sid='. $sid);
}
elseif (preg_match('/^message:/', $node->webform['confirmation'])) { // <--- вас вот это интересует, просто печать сообшения
$message = preg_replace('/^message:/', '', $node->webform['confirmation']);
drupal_set_message($message);
$redirect = NULL;
}
else {
$redirect = array('node/'. $node->nid .'/done', 'sid='. $sid); // <!--- а вот так у вас сейчас происходит
}
$form_state['redirect'] = $redirect; ?>
.
Странно. antevgen написал сообщение, на почту пришло, а тут не отображается.
Продублирую на всякий:
antevgen, дело в том, что webform планируется применять не только как форму контактов и "запиливать" ее в любом случае придется. Например заявку на семинар,услугу или еще что-то в этом роде.
Всеже, спасибо!
t3hk0d3 , Спасибо за код! Я правильно понимаю: вставлять его нужно в тоже поле, что предназначено для сообщения после отправки, только формат ввода выставить PHP?
И еще... С друпалом месяц с небольшим, а с PHP вообще на вы. В какое место в коде нужно вставить ID ноды для внутреннего редиректа. Ну, и куда вставить сообщение после отправки тоже не знаю(((
Да (надеюсь под "кодом" вы имеете ввиду не то что я написал во втором комменте)
Ок давай в примерах:
Переход на ноду номером 123
«internal:node/123»
Отображение сообщения на той-же странице
«message:Привет»
Вот теперь я точно запутался
Это я понял. Вставляем эти дела в поле:
Сообщение с подтверждением заполнения или ссылка, на которую будет переправлен пользователь, после заполнения опросника. :
если по-отдельности, то
они работают как часы. Если постивить вместе вот так(без кавычек естессно):
"internal:node/20
message:Привет"
то передрессация проходит на главную, а в адресной строке отображается %%%Привет%%% и еще куча каракулей.
Вот я и думал, что код, который ты написал во втором комменте можно куда-то воткнуть и онбудет и переадрессовывать а затем выводит сообщение. Только куды этот код девать..?
Конечно можно для данной ситуации поместить остальные контактные данные над полями и в меню дать ссылку на форму как на ноду, а не как у меня сейчас через CCK. Но для будущего функционала это не по феншую как-то.
Там нельзя одновременно переадресовывать и писать сообщение.
Код который я во втором комменте привел - это код из модуля webform который отвечает за действия после отправки формы.
никто не мешает тебе его модифицировать, например сделать его таким:
<?php // Check confirmation field to see if redirect should be to another node or a message.
// добавляем новое поведение
if (isset($form_state['values']['submission'])) {
drupal_set_message(t('Submission updated.'));
$redirect = NULL;
}
elseif (valid_url(trim($node->webform['confirmation']), TRUE)) { // <--- перенаправление по внешней ссылке
$redirect = trim($node->webform['confirmation']);
}
elseif (preg_match('/^messageandredirect:', trim(strip_tags($node->webform['confirmation'])))){
$content = preg_replace('/^messageandredirect:/', '', trim(strip_tags($node->webform['confirmation'])));
list($message, $path) = explode('|', $content, 2);
drupal_set_message($message);
$redirect = array(trim($path), 'sid='. $sid);
}
// Check if the form should redirect to an internal URL, strip tags off
// first in case a WYSIWYG editor messed it up.
elseif (preg_match('/^internal:/', trim(strip_tags($node->webform['confirmation'])))) { // <--- перенаправление по внутренней ссылке (например 'node/123/edit')
$path = preg_replace('/^internal:/', '', trim(strip_tags($node->webform['confirmation'])));
$redirect = array(trim($path), 'sid='. $sid);
}
elseif (preg_match('/^message:/', $node->webform['confirmation'])) { // <--- вас вот это интересует, просто печать сообшения
$message = preg_replace('/^message:/', '', $node->webform['confirmation']);
drupal_set_message($message);
$redirect = NULL;
}
else {
$redirect = array('node/'. $node->nid .'/done', 'sid='. $sid); // <!--- а вот так у вас сейчас происходит
}
$form_state['redirect'] = $redirect; ?>
соответственно пихать туда надо
«messageandredirect:привет!|node/123»
Ага! Вижу что это листинг кода файла webform.module оказывается не все так плохо))) но что с этим делать ума не приложу.
см. сообщение выше. Я там кое-что подрисовал
t3hk0d3 , опередил с сообщением. Как видно из моего предыдущего, до меня начало доходить)))
только вот коммент твой обрубило
(((
а чего там сложного, там нужно вклинить вот это
<?php
elseif (preg_match('/^messageandredirect:', trim(strip_tags($node->webform['confirmation'])))){
$content = preg_replace('/^messageandredirect:/', '', trim(strip_tags($node->webform['confirmation'])));
list($message, $path) = explode('|', $content, 2);
drupal_set_message($message);
$redirect = array(trim($path), 'sid='. $sid);
}
?>
Мне сейчас лень патч накатывать, уж извини
Уррааа заработало! t3hk0d3 ты - ГЕНИЙ!
Единственно ошибка. Ты забыл поставить слешь "/" здесь
<?php elseif (preg_match('/^messageandredirect:СЛЕШЬ СЮДА', trim(strip_tags($node->webform['confirmation'])))){?>
А так пучком все))) Спасибо!!!
А как можно добавить значения полей формы в адрес ссылки, на которую редиректимся после заполнения формы? (Бодаюсь с этим здесь - http://www.drupal.ru/node/49544)