Как выбрать данные, введенные через webform, в странице, которая указана в redirect?

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

Аватар пользователя igorrusy igorrusy 7 сентября 2012 в 16:33

Я только пару недель с Друпалом 6 работаю, прошу пардон за може простой вопрос.

Например, на странице с webform (node/27) имеется одно текстовое поле "количество" (машинное имя "qty")
и кнопка submit.

При этом в параметре "Redirect" указано: "?q=node/28".

Вопрос: Как мне после нажатия кнопки submit, узнать, какое значение было введено в поле "количество"?

Комментарии

Аватар пользователя sg85 sg85 7 сентября 2012 в 18:43

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

Аватар пользователя Orion76 Orion76 7 сентября 2012 в 18:58

Почему-то кажется, исходная задача намного проще решается...
Но данных , чтоб не казалось, не достаточно..

Не ленитесь расписывать вопрос подробнее..
сэкономите себе больше времени и получите более качественный ответ..

Аватар пользователя igorrusy igorrusy 7 сентября 2012 в 19:07

Попробую чуть уточнить проблему.
Есть две страницы: первая с формой (node/27), а вторая (node/28) должна принять и обработать данные из первой формы (в нашем случае "количество").
Так вот я пока не нашел, с помощью каких средств я могу узнать это количество.
php или токены?
Или еще как?
Подскажите, плиз.

Аватар пользователя sg85 sg85 7 сентября 2012 в 19:23

Что то я теперь совсем запутался... Почему ноды разные? Причем тут модуль webform? И как вы изменили в нем сабмит?

Аватар пользователя igorrusy igorrusy 7 сентября 2012 в 19:52

Тут всё просто:
когда Вы создаете\редактируете webform, то в Опроснике на вкладке form settings есть текстовое поле Redirect URL.
Вот здесь и указывается страница, на которую нужно передать управление (сделать редирект) после нажатия кнопки "Submit".

Но вопрос у меня другой, и тут неважно какая страница будет обрабатывать результаты ввода данных. Я не могу нигде найти КАК ВЫБРАТЬ ДАННЫЕ, ВВЕДЕННЫЕ В ФОРМЕ?
Какими конструкциями, операторами, селекторами и тд можно доступиться к этим данным???

Аватар пользователя Orion76 Orion76 7 сентября 2012 в 19:53

"igorrusy" wrote:

Попробую чуть уточнить проблему.


Это не проблема, а не правильный подход к решению..
Опишите задачу с привязкой контексту...
И возможно, вам подскажут более правильное и простое решение..
Это наверное какая-то форма оформления заказа на услугу или товар?

Аватар пользователя sg85 sg85 7 сентября 2012 в 20:01

А вы их и не увидите, ибо они уже обработаны и лежат в бд, т.е. веб форма это по сути опросник. Так что данный подход тут вообще никак. Так что оглашайте изначальную суть проблемы.

Аватар пользователя igorrusy igorrusy 7 сентября 2012 в 20:03

Хорошо, пусть - это будет форма на оформление заказа на товар.
Мне потом, после ввода юзером колличества, потребуется расчитать стоимость.
Так вопрос у меня звучит: Как (какими средствами) выбрать это самое количество, чтобы использовать его в расчетах?

Аватар пользователя sg85 sg85 7 сентября 2012 в 20:25

Вообще если делаете магазин, то лучше использовать что то вроде ubercart, но если вам нужно просто посчитать стоимость. То для меня проще было бы использовать даже не аякс, а вообще обычный js прямо в ноде(не совсем понятно почему она одна...) так что берите еще выше, какая вообще задача то стоит?

Аватар пользователя igorrusy igorrusy 7 сентября 2012 в 20:39

Для меня было просто выяснить, как получить данные, введенные юзером в форму.
Вся остальная кухня более сложная, и я ее потом буду делать.
ubercart у меня установлен, но это совсем другая ветка, здесь ubercart не нужен.
Мне требуется после получения определенных параметров (размеров, фактуры, качества изделия и тд), сделать расчет его стоимости.
ubercart здесь не причем.
Я уже практически нашел ответ на свой вопрос: ответ в хуке form_alter.
только нужно с ним еще разобраться (я пока в Друпале - зеленый).

Аватар пользователя sg85 sg85 7 сентября 2012 в 21:02

Так вам не этот хук нужен, а drupal_get_form, для создания и управления своими формами, так же в идеале туда же hook_menu для задачи пути в URL вашей форме, так же есть смысл почитать вообще про form API, чтоб понять как оно вообще работает, остается только сделать файл .info и вот вам модуль с вашей уникальной формой и расчетами результатов, в идеале сделать это аяксом.
Так же есть более примитивный и совсем не друпальный способ, использование PHP прямо в нодах для всего этого без использования drupal API, но со временем сами поймете почему так лучше не делать

Аватар пользователя Orion76 Orion76 8 сентября 2012 в 10:26

хуком form_alter добавляете форме свой обработчик сабмита

<?php
$form
['#submit'][]='my_submit_function';
?>
<?php

function my_submit_function($form,&$form_state){
$values=$form_state['values'];
}
?>
Аватар пользователя sg85 sg85 8 сентября 2012 в 11:07

Я не думаю что это подойдет, ибо веб форма будет параллельно делать еще много ненужного(например мусорить в бд результатами отправок форм), при этом модуль писать придется в любом случае, так что по мне проще саму форму создать в том же модуле, к тому же в друпал форму создать модулем проще не бывает.

Если я правильно понял, то это что то вроде встроенного калькулятора, данные которого используются только для удобства пользователей?

Есть вариант затереть стандартный сабмит, однако сам подход лично мне кажется не совсем логичным и удобным

Аватар пользователя Orion76 Orion76 8 сентября 2012 в 11:13

"sg85" wrote:

Я не думаю что это подойдет,


Написал для собственного успокоения.. так сказать-))
Мы ж еще не в курсе, на какой ноге ТС с php..
Может он от фразы "print $var" в обморок падает..
Сейчас проверим-))

Аватар пользователя igorrusy igorrusy 8 сентября 2012 в 11:28

Спасибо за советы.
А, если честно, то я очень удивлен, что в Друпале нет такого стандартного способа (функции, массива и тп) узнать, что же юзверь ввел в поля формы!
Ну, имеем то, что имеем и будем с этим работать.

Аватар пользователя sg85 sg85 8 сентября 2012 в 11:40

Есть, во входных переменных сабмита а так же валидации формы, как раз в массиве, а в других местах по моему оно и не нужно

Аватар пользователя sg85 sg85 8 сентября 2012 в 16:30

Допустим, у вас функция сабмита some_form_submit($form, &$form_state),
в $form_state['values'] и есть массив с результатами формы, посмотреть что в нем можно через например
<?php
drupal_set_message('

'.print_r($form_state).'

');
?>

Мог что то напутать(это я умею), потому стоит уточнить в справочнике
Вообще это все вроде подробно расписано в forms api

Да, rules под 6 не так всемогущ ;(

Аватар пользователя igorrusy igorrusy 8 сентября 2012 в 20:04

Спасибо за посты и поддержку.
Я так понял, что webform заточен под рассылку мейлов, но не на передачу принятых данных дальше (другой странице\форме).
Получается, что сразу после нажатия submit, webform "оправляет" почтовое сообщение,
затем выдает на экран радостное сообщение об отправке почты. И уже нет никаких значений полей, которые заполнял пользователь.
Т.е. их как бы можно было перехватить с помощью функции сабмита типа some_form_submit.
Но при этом, если не указывать email, то друпал будет ругаться...
Пожалуй стоит посмотреть на модуль form.

Аватар пользователя sg85 sg85 8 сентября 2012 в 20:34

Webform это изначально опросник, который с помощью костылей и напильника можно приспособить подо что то другое, хоть он изначально не предназначен для этого, что подходит простеньким сайтам и разработчикам не владеющим php и тем более drupal API, либо, если нужен функционал самого опросника + что то еще, в вашем же случае проще использовать form api. При условии, что хорошо знаете php и готовы осваивать API друпала. Однако можно найти и альтернативные способы, предложенные орионом, например лично у меня уйдет около минуты на создание такого модуля(я бы вам его прямо тут выдал, но с телефона это мазахизм), а вот через кучу модулей возился в лучшем случае пол дня. На то чтоб вникнуть в form API, систему хуков drupal, написание модулей, мне кажется что времени понадобится меньше, чем перебирать несколько модулей, вникать в их суть(хотя это тоже весьма полезно)
Так что выбор за вами, можете попытаться написать модуль, если владеете PHP, заодно научитесь это делать и немного вникните в суть drupal API, либо попытаться реализовать это же через несколько модулей, заодно поняв как они работают и выработать для себя способы их применения в будущем. Словом, в данном случае оба йогурта будут одинаково полезны