В данный момент форма заказа делается при помощи сниппета eForm. Возможно также сделать всё на основе FormLister, используя prepare-конструкции.
Важно: на странице формирования заказа сниппет Shopkeeper должен вызываться раньше eForm!
В чанке формы заказа обязательно добавить скрытое поле:
<input type="hidden" name="reportTpl" value="shopOrderReport">
где shopOrderReport - это название чанка с шаблоном отчета (параметр &report сниппета eForm).
&eFormOnBeforeMailSent=`populateOrderData` - функция для заполнения данных о выбранных товарах.
Для того чтобы заказы отправлялись в модуль Shopkeeper, в вызов сниппета eForm добавить параметр
&eFormOnMailSent=`sendOrderToManager`
[!eForm?
&formid=`shopOrderForm`
&tpl=`shopOrderForm`
&report=`shopOrderReport`
&ccsender=`1`
&gotoid=`11`
&subject=`Новый заказ`
&eFormOnBeforeMailSent=`populateOrderData`
&eFormOnMailSent=`sendOrderToManager`
!]
Можно сохранять товары в отдельльную таблицу БД (не документы).При этом остается возможность использовать стандартные TV-параметры для товаров и плагины. Для создания и редактирования товаров используется стандартный интерфейс (можно настраивать с помощью плагина ManagerManager). Для вывода товаров на сайте используется сниппет catalogView.
Товары можно "вложить" в любой документ (категорию), выбрав в дереве документов. Т.е. категории каталога (структура) создается как и раньше, документами, но сами товары будут храниться в отдельной таблице БД.
Если товар из каталога Shopkeeeper, в чанк товара (сниппет catalogView) нужно вставить скрытое поле:
<input type="hidden" name="shk-catalog" value="1">
Чтобы в модуле Shopkeeper (в админке) появилась ссылка "Каталог", нужно в конфигурации указать ID категории каталога (документ MODx) по умолчанию.
Также необходимо настроить конфигурацию плагина SaveToSHK — указать ID шаблона товаров и ID TV-параметра цены.
Рекомендуется использовать ЧПУ. В шаблонах сайта рекомендуется использовать <base href="[(site_url)]">
внутри
Рекомендуется установить плагин PHx. В чанке chunk_shopOrderFormWebUser.tpl он используется для заполнения скрытых полей данными авторизованного пользователя.
Для вывода корзины (сниппета) в разных местах рекомендуется создавать разные шаблоны для страниц или использовать плагин PHx.
Если используется умножение цены товара на цену доп.параметра, в шаблоне информации о товаре (chunk_shopStuff.tpl и chunk_shopToCart.tpl) поле с ID товара (<input name="shk-id" value="[*id*]">
) должно быть выше доп. параметров по HTML-коду.
В файле assets/snippets/shopkeeper/shopkeeper.inc.php ищем строчки
require_once MODX_BASE_PATH."assets/snippets/shopkeeper/classes/class.shopkeeper.php";
$shopCart = new Shopkeeper($modx, $shkconf);
заменяем их на
require_once MODX_BASE_PATH."assets/snippets/shopkeeper/classes/class.shopkeeper.php";
$shopCart = new Shopkeeper($modx, $shkconf);
if (!empty($saveObject)) {
$modx->setPlaceholder($saveObject, $shopCart);
}
В вызов Shopkeeper на странице заказа теперь нужно добавить параметр:
&saveObject=`shk`
Далее следует создать сниппет ShkForm, через который будем вызывать FormLister:
<?php
$out = '';
$purchases = !empty($_SESSION['purchases']) ? unserialize($_SESSION['purchases']) : array();
if (!empty($shkObject) && ($shk = $modx->getPlaceholder($shkObject)) && ($shk instanceof Shopkeeper) && !empty($purchases)) {
$params['ignoreMailerResult'] = 1;
$params['protectSubmit'] = 0;
$params['submitLimit'] = 0;
$params['prepareProcess'] = [function ($modx, $data, $FormLister) use ($shk) {
$shk->populateOrderData($data);
$shk->sendOrderToManager($data);
return $data;
}];
$out = $modx->runSnippet('FormLister', $params);
}
return $out;
Пример
Вызов Shopkeeper:
[!Shopkeeper?
&cartType=`full`
&priceTV=`price`
&changePrice=`1`
&counterField=`1`
&style=`0`
&noJavaScript=`0`
&noJQuery=`1`
&flyToCart=`nofly`
&orderFormPage=`5067`
&cartTpl=`shopCart`
&cartHelperTpl=`cart_action_helper_tpl`
&cartRowTpl=`shopCartRow`
&orderDataTpl=`shopOrderData`
&saveObject=`shk`
!]
Вызов ShkForm:
[!ShkForm?
&formid=`shopOrderForm`
&shkObject=`shk`
&formTpl=`shopOrderForm`
&reportTpl=`shopOrderReport`
&captcha=`modxCaptcha`
&parseDocumentSource=`1`
&rewriteUrls=`1`
&filters=`{
"name":["trim", "stripTags", "removeExtraSpaces"],
"email":["trim", "email"],
"phone":["trim", "phone", "removeExtraSpaces"],
"address":["trim", "stripTags", "removeExtraSpaces"],
"message":["trim", "stripTags", "compressText"]
}`
&rules=`{
"name":{
"required":"Введите имя"
},
"email":{
"required":"Введите электронный ящик",
"email":"Введите электронный ящик правильно"
},
"phone":{
"required":"Введите номер телефона",
"phone":"Введите номер телефона правильно"
},
"address": {
"required":"Введите адрес"
},
"payment":{
"required":"Выберите способ оплаты",
"!equals": {
"params":["0"],
"message":"Выберите способ оплаты"
}
}
}`
&formControls=`payment,delivery`
&subject=`Новый заказ на сайте`
&to=`test@test.ru`
&successTpl=`shopThankYou`
!]
Чанк shopOrderReport:
<p>В интернет-магазине сделан заказ.</p>
<p>Номер заказа: [+orderID+]</p>
<b>Состав заказа:</b>
[+orderData+]
<br /><br />
<b>Данные покупателя:</b><br />
<table cellpadding="3">
<tr><td><b>Адрес: </b></td><td>[+address.value+]</td></tr>
<tr><td><b>Способ доставки: </b></td><td>[+delivery.value+]</td></tr>
<tr><td><b>Способ оплаты: </b></td><td>[+payment.value+] </td></tr>
<tr><td><b>Ф.И.О.: </b></td><td>[+name.value+]</td></tr>
<tr><td><b>E-mail: </b></td><td><a href="mailto:[+email.value+]">[+email.value+]</a></td></tr>
<tr><td><b>Телефон: </b></td><td>[+phone.value+]</td></tr>
<tr><td><b>Сообщение: </b></td><td>[+message:nl2br+]</td></tr>
</table>
Обсуждение на сайте сообщества