«Джинса» на Drupal или как «заказывать» материалы

При создании небольших сайтов часто бывает нужна какая-нибудь нестандартная особенность. Например, на сайте-каталоге товаров и/или услуг требуется форма заказа, привязанная к материалу (ноде). Подобный функционал: ссылка «Заказать» и форма для отправки сообщения с уже заполненной информацией о странице, которую заказали, уже близок к корзине онлайн-магазина. Но согласитесь, ставить ubercart или e-commerce ради одной нестандартной возможности несколько непрактично.

Всего-то надо немного расширить возможности штатных модулей. Итак, нам нужна форма отправки сообщения. Для ее создания воспользуемся модулем webform. Скачав и установив этот модуль обычным способом, мы получаем новый тип материала Webform, который позволяет создавать различные формы подтверждаемые пользователем. Создадим одну такую форму. Пусть ее NID равен 10 - он будет нам нужен, чтобы составить ссылку заказа. Добавим в эту форму несколько полей, Например имя посетителя, его адрес электронной почты и так далее. Не забудьте указать настройки e-mail для формы, тогда результат ее заполнения будет отправлен вам по электронной почте.

Пусть у нас также есть тип материала Продукт (product), который и представляет то, что наш пользователь будет заказывать. Идем в папку с шаблоном нашей темы и делаем там копию файла node.tpl.php под именем node-product.tpl.php. Открываем файл и добавляем в него нашу ссылку на форму заказа, сразу после переменной $content:

    <?php if ($page) { ?><div class="order">&raquo; <?php print l(t('Order'), 'node/10', array('query'=>array('product'=>$node->nid))) ?></div><?php }; ?>

Теперь при просмотре полной ноды типа product у нас будет видна гиперссылка на нашу форму (node/10) с параметром NID текущей ноды в строке запроса. Перейдя по ссылке мы попадаем на форму. Дело осталось за небольшим. Как минимум в форме надо все-таки проинформировать посетителя, что он заказывает, да и вам не мешало бы получить адрес искомой страницы вашего сайта.

Для реализации этого функционала добавим в нашу форму еще два поля. Первое поле типа markup назовем Продукт. В его настройках занесем в Значение PHP-код:

<?php
 if($node=node_load($_GET['product'])) print '<span class="label">' . t('Product') . ': </span>' . l($node->title, 'node/'.$node->nid)
?>

Пользователь увидит заголовок той ноды, которую он заказывает. Чтобы этот код обрабатывался как PHP, а не выводился в форму в виде текста, необходимо включить модуль ядра PHP-фильтр на странице сайта admin/build/modules.

Добавим еще одно поле типа hidden (скрытое). Значение по умолчанию выставим таким:

http://имя-вашего-сайта.ru/node/%request[product]

Теперь в нашей форме по умолчанию будет забит адрес исходной ноды сформированный при помощи токена %request[product], который позволяет обратится к параметрам строки запроса и получить значение product. Этот адрес будет отослан в письме вам, что и позволит найти интересующую пользователя страницу сайта.

Вот и все. Ваш материал «заказан».

Добрый день, директор,

Добрый день, директор, спасибо за данный способ! У меня к вам вопрос, у меня с помощью Webform было создано дополнительное поле типа textfield - price (цена), каким образом выводить цену, также как и title продукта? Т.е. чтобы при нажатии кнопки заказать там было написано Товар: такой-то, а цена: такая-то? Спасибо

«Джинса» на Drupal или как «заказывать» материалы

Спасибо за рецепт, очень универсальное решение.
Сделал как вы прописали, все работает только токен под анонимусом не отображает номер ноды в письме
что можно сделать?

Есть и исправленнй вариант,

Есть и исправленнй вариант, но никак не соберусь поправить статью

спасибо за статью, но есть вопрос

как эту самую гиперссылку заключить в стандартную кнопку темы? то есть чтобы выводилась гиперссылка не ввиде текста order а в виде кнопки с надписью заказать.

Стиль пропишитеborder: 2px

Стиль пропишите
border: 2px outset #999999;
background: #CCCCCC;
cursor:pointer;

 

Пример