В даний момент форма замовлення робиться за допомогою сніпета 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>
Обговорення на сайті співтовариства