Joomla 2.5 + Virtuemart 2: быстрый заказ в один клик

То, что пользователи крайне ленивы и не хотят заполнять формы (а хотят пыщ-пыщ! и быстрый заказ), не секрет практически для любого электронного коммерсанта. При этом решений для популярных платформ, так чтоб сразу из коробки почему-то нет. По крайней мере Shop-Script и Virtuemart этим порадовать не могут — всё приходится дописывать руками. И ладно бы Virtuemart — от него и ждать не приходится, но платный SS, заточенный под отечественного покупателя обладает таким оформлением заказа, что путаются в нём сами хозяева магазинов.

Доработку «Быстрый заказ» для Shop-Script 3 я ещё постараюсь выложить, а сейчас — «Заказ в один клик» для Virtuemart 2 своими руками. Бесплатно, без SMS и регистрации.

Итак, если сделать краткий разбор существующих решений, то можно увидеть довольно плачевную ситуацию. Один универсальный скрипт (условно-бесплатный), из разряда «после сборки тщательно обработать напильником» да один платный модуль российского разработчика (судя по демке впрочем, довольно годный).
Первое не подходит по очевидным причинам — мало того, что с этим нужно плясать с бубном, так ещё и за обновлениями следить самостоятельно. Второй вариант более подходящий, если есть немного (около 30$) лишних денег.

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

Начнём с настроек Virtuemart 2. Во вкладке «Внешний вид», отмечаем «Разрешить не вошедшему на сайт посетителю отправлять рекомендации или задавать вопросы» и «Разрешить задавать вопросы«, минимальную длину вопроса ставим 0, максимальную можно оставить как есть.

Далее, начинаем редактировать шаблон окошка «задать вопрос». У меня оно находится в /templates/название_шаблона/html/com_virtuemart/askquestion/form.php. Первое, что стоит сделать — удалить счётчик оставшихся символов (он тут явно лишний, да и нам не понадобится), для этого удалим блок

<div class="width50 floatright right paddingtop">
<?php echo JText::_('COM_VIRTUEMART_ASK_COUNT')  ?>
<input type="text" value="0" size="4" class="counter" id="counter" name="counter" maxlength="4" readonly="readonly" />
</div>

Под поле «телефон» нам идеально подходит textarea (поле ввода комментария), но просто так его взять не получится. Кроме того, нам нужно убрать поле e-mail — оно лишнее, но форма без этого поля отправляться не хочет ни в какую. Чтобы не разбирать механизм валидации формы и не лезть в дебри, идём в обход. В строке

<input type="text" class="validate[required,custom[email]]" value="<?php echo $this->user->email ?>" name="email" id="email" size="30"  validation="required email"/>

меняем value, на любой e-mail (абсолютно любой, не имеет значения) и добавляем type=»hidden», чтобы получилась в итоге строка

<input type="hidden" class="validate[required,custom[email]]" value="email@ya.com" name="email" id="email" size="30"  validation="required email"/>

Таким образом, поле мы сделали поле ввода почты скрытым. Теперь нужно приспособить поле для комментария для наших нужд. Вот оно:

<textarea title="<?php echo $ask_comment ?>" class="validate[required,minSize[<?php echo $min ?>],maxSize[<?php echo $max ?>]] field" id="comment" name="comment" rows="10"></textarea>

Меняем эту строку на

<input type="text" title="<?php echo $ask_comment ?>" class="validate[required,phone]" id="comment" name="comment" size="30" />

Кое-что из лишнего ещё осталось, а именно — строка «Пожалуйста, напишите свой вопрос….(от 0 до 2000 символов)». За неё отвечает блок

<?php
$ask_comment = JText::sprintf('COM_VIRTUEMART_ASK_COMMENT', $min, $max);
echo $ask_comment;
?>

Теперь, осталось переделать поле комментария в телефон окончательно, и ещё кое-какие мелкие доработки. Изменим название поля «» на «Телефон». Это лучше всего сделать, при помощи переопределения языковых констант. Сейчас у нас за это название отвечает строка

<td><label><?php echo JText::_('COM_VIRTUEMART_USER_FORM_EMAIL')  ?> :</label> </td>

Мы создадим в менеджере языков свою константу с блэк-джэком, например COM_VIRTUEMART_USER_FORM_PHONE и заменим строку:

<td><label><?php echo JText::_('COM_VIRTUEMART_USER_FORM_PHONE')  ?> :</label> </td>

Надпись на кнопке «Отправить вопрос», тоже было бы желательно заменить этим способом. Константы кстати не обязательно создавать заново, можно переопределять существующие. Например COM_VIRTUEMART_ASK_QUESTION_THANK_YOU переопределяем в «Спасибо за Ваш заказ. Мы свяжемся с Вами как можно скорее.»
Теперь форма выглядит как положено. Займёмся письмом администратору, которое она отправляет. Шаблон письма находится в /components/com_virtuemart/views/askquestion/tmpl/mail_html_question.php Даже с минимальными знаниями HTML, разобраться будет несложно. Ну и, не забудьте сменить надпись «Задать вопрос по этому товару» на что-нибудь более подходящее.

P.S. Вертикальный размер всплывающего окна можно подредактировать в самом шаблоне карточки товара. Если вы используете fancybox, то место в коде, которое содержит его опции выглядит так:

	if(VmConfig::get('ask_question', 0)){
		$boxAsk = "jQuery.fancybox({
				href: '" . $this->askquestion_url . "',
				type: 'iframe',
				height: '70%'
			});";

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