Форма заказа товара на Webform (заказ в один клик)

31 Jul, 2014

В этой статье я расскажу, как делал форму заказа товара для одного сайта на друпале.

Специфика этого сайта такова, что не было смысла прикручивать громоздкие модули интернет-магазинов, таких как commerce или ubercart, да и вообще необходимости в корзине особо не было, т.к. ситуация, когда делался заказ сразу на несколько товаров была очень редка. Требовалась просто форма с емейлом, именем, адресом и информацией о том, какой именно товар заказан. Модуль Webform подходит для данной задачи идеально. И кстати, даже если у вас традиционный интернет магазин с корзиной, вы можете дополнить его такой упрощенной формой заказа в один клик, как правило, это положительно сказывается на конверсии.

Начинается все стандартно, ставим модуль webform, создаем ноду типа webform для нашей формы заказа, добавляем необходимые поля для ввода имени, электронной почты и адреса. В настройках формы в разделе расширенных настроек ставим галку "Available as block" и там же вводим название кнопки отправки формы. Дальше размещаем блок в нужном регионе или выводим в нужном месте шаблона программно с помощью функции "block_load()":

<?php
  $block
= block_load('webform', 'client-block-"ID webform ноды"');
 
$block_content = _block_render_blocks(array($block));
 
$build = _block_get_renderable_array($block_content);
  print
drupal_render($build);
?>

Если необходимо, чтобы после отправки формы пользователь оставался на текущей странице, то в настройках формы параметр "Redirection location" ставим в "No redirect (reload current page)", а в настройках самого блока отмечаем чекбокс "Show all webform pages in block".

Теперь вроде бы все круто, форма работает, но не хватает одного: неясно, с какой именно страницы отправлена форма и какой товар хотел заказать покупатель. Для решения этой задачи я поставил модуль Webform Link, который позволяет добавить в форму поле с url-адресом (тип Link). У меня в этом поле будет содержаться адрес страницы, с которой была отравлена форма. Также я добавил еще одно простое текстовое поле, в котором будет содержаться название товара. Затем с помощью CSS я скрыл эти поля (простой display:none;), чтобы они не смущали покупателей. А заполняться эти поля будут автоматически, для чего в файл template.php своей темы я добавил функцию hook_form_alter():

<?php

function YOURTHEME_form_alter(&$form, $form_state, $form_id) {
 
/*
  * Форма заказа в один клик (webform node id: 24)
  */

 

if($form['#id'] == 'webform-client-form-24') {
   
// добавляем название товара и ссылку на него как значения по умолчанию
   
if(arg(0) == 'node' && is_numeric(arg(1))) {
     
$node = node_load(arg(1));
     
// добавляем в поле название текущей ноды
     
$form['submitted']['oneclick_goods']['#default_value'] = $node->title;
     
// добавляем в поле урл на ноду
     
$form['submitted']['oneclick_link']['#default_value'] = url('node/'.arg(1), array('absolute' => true));
    }
  }
 
}

?>

Теперь администратор сайта видит в админке помимо имени, емайла и адреса клиента название заказанного товара и ссылку на него. Пользователю мы также можем отправить письмо, содержащее данную информацию.

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

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

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