Drupal Модуль WebForm. Создание формы заказа товара

Drupal Модуль WebForm

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

Скачайте и установите модуль Webform.

После установки должен появиться контент тип Webform. Создайте материал типа Webform, назовите его Форма заказа товара (или как Вам будет удобно). После создания Вы будете перенаправлены на страницу настройки материала веб-формы.

Нам необходимо создать два поля под наименование товара и его количество, для этого понадобятся два textfield (текстовые поля).

В поле наименования нужно написать %get[product]

drupal webform форма заказа товара наименование.png

В поле цены значение по умолчанию поставим "1".

Также добавим text field для е-мейла и еще text area для пожеланий и предпочтений клиентов.

%get[product] - аналогично php-переменной $_GET['product'], которая получает значение из URL.

Форма готова, теперь надо сделать ссылку к этой форме, да и еще к этой ссылке приписать параметр product, в котором будет записано наименование товара. Оформим эту ссылку в виде отдельного блока, который будет размещаться внизу ноды каждого товара.

Для выполнения следующих операций необходимо включить встроенный модуль PHP filter, который позволяет вставлять пхп-код прямо в блок или материал. После включения этого модуля должен появиться новый формат ввода PHP code.

Создадим новый блок и выбирем формат ввода PHP code. В текст блока вставим следующее

<a href="<?php print base_path(); ?>node/6?product=<?php print drupal_get_title(); ?>">заказать тоавар</a>

 

, где node/6 адрес ноды веб-формы заказа товара.

функция drupal_get_title() возвращает заголовок ноды, в нашем случае заголовком ноды является наименование товара, функция base_path() - возвращает путь к корню сайта (например drupalbook.ru/). Теперь нужно разместить блок в регион Содержимое (Content). И задать следующую видимость блока в пхп-режиме (PHP mode):

$types['tovar'] = 1;
$match = false;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
  $node = node_load(arg(1)); 
  $match = isset($types[$node->type]); } 
  return $match; 
}

Здесь tovar машинное имя контент типа Товар.

Наша форма заказа товара готова.

Комментарии

Добавить комментарий

Войти, используя Loginza Google Account Yandex Mail.ru Vkontakte Facebook

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Здравствуйте.Спасибо за

Здравствуйте.Спасибо за уроки.У меня вот такая проблема после добавления модуля у меня не заходит а меню администрирования выдаёт вот такую ошибку:
 Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\testsayt\www\includes\common.inc on line 551

 подскажите, пожалуйста, как исправить.

Добрый день! webform

Добрый день!

webform выводится через Colorbox-node в popup. noda сформированyая через view, выводится через panels. так вот title товара не подхватывается. тк не силен в php, подскажите, пожалуйста, какой код в этом случае нужен?

Здравствуйте! А  какой код

Здравствуйте!

А  какой код нужно добавить к

$types['tovar'] = 1;
$match = false;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
  $node = node_load(arg(1));
  $match = isset($types[$node->type]); }
  return $match;
}

 чтобы форма заказа выводилась только на одной странице мой_сайт/on-line-zakaz  ?Спасибо за помощь.  

Здравствуйте! А какой мне

Здравствуйте! А какой мне добавить код, после кода

 

$types['tovar'] = 1;
$match = false;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
  $node = node_load(arg(1));
  $match = isset($types[$node->type]); }
  return $match;
}

Чтобы форма заказа товара выводилась не на каждой странице, а только на странице /on-line-zakaz  

Ну не нужен мне уберкарт или

Ну не нужен мне уберкарт или комерс изза одной формочки. Я же не об этом спросил. У Вас в примере неразобран случай как передавать количество а только тайтл. Хотя в заголовке сказано и о количестве.

Так вот об этом я и

Так вот об этом я и спрашиваю. Мне надо передать еще только одну переменную. Примеров найти не могу, У вас в статье было указано что кроме тайтла еще и количество будете передавать, количества не нашел, поэтому и спрашиваю.

Так оно работает как оно

Так оно работает как оно должно работать в HTML/PHP, пишите параметры get-запроса через знак & :

site.com/url?title=my-title&quantity=3&price=1000

Эти параметры будут доступны на странице через глобальную переменную $_GET:

$_GET['title']

$_GET['quantity']

$_GET['price']

Только не забудьте обработать значения функцией check_plain:

$myTitle = check_plain($_GET['title']);

Чтобы код нельзя было передать через параметры.

Вы можете в форму вставить значения в hook_form_alter(). По работе с формами и переменной $_GET есть в каждом учебнике по php. Про hook_form_alter(), можно здесь посмотреть:

http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_alter/7

Спасибо. У Вас в статье

Спасибо. У Вас в статье просто пошагово описано как сделать, я так и делал. Получил тайтл. А вот количество не получается все получить. Вот посмотрите попытался реализовать вот так. Но что то неправильно, ибо ругается на синтаксис. А в ПХП не силен:( Книгу вот пойду только завтра покупать. <a  href="<?php print base_path(); ?>&<?php print price=field_get_items('node', node_load(8), 'field_r_price');?>forma-zakaza.html?product=<?php print drupal_get_title();?>&price=<<? php print $node->field_r_price[LANGUAGE_NONE][0]['value']; ?> ">заказать товар</a>. Забираю параметр как и у Вас в примере через %get[price]

 

Спасибо, получилось. Сделал

Спасибо, получилось. Сделал немного нетак. Если кому пригодится сделал вот так:

<a href="<?php print base_path(); ?>forma-zakaza.html?
product=<?php print drupal_get_title();?>&
price=<?php $items = field_get_items('node', node_load(8), 'field_r_price');
print $items[0]['value']; ?>
">заказать товар</a>

Всем удачи.

Вобщем так и не дождался

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

Внизу у каждого материала

Внизу у каждого материала есть форма для отправки сообщений - создана модулем web-form! Она выводитcя на страницу в виде ссылки, с помощью модуля popup!

Как сделать, чтобы название материала подставлялось автоматически в web-форму?

Всем доброго дня!Есть

Всем доброго дня!
Есть одностраничный сайтик на Drupal 7. На сайте также установлен один блок с Webform и тремя полями: Имя, Email, Номер телефона. После того, как посетитель заполняет форму своими данными, его редериктом переносит на страницу благодарности, "Спасибо за заявку менеджер свяжется с вами в течение 30 минут". Вопрос, можно ли сделать так чтобы на странице благодарности, высвечивалось Имя введенное в поле webform? Пример: "Алексей!Спасибо за заявку менеджер свяжется с вами в течение 30 минут" Или может для этого нужно писать отдельный модуль. Спасибо!)