Оформление заказа

В данный момент форма заказа делается при помощи сниппета eForm. Возможно также сделать всё на основе FormLister, используя prepare-конструкции.

Оформление заказа на eForm

Важно: на странице формирования заказа сниппет Shopkeeper должен вызываться раньше eForm!

В чанке формы заказа обязательно добавить скрытое поле:

<input type="hidden" name="reportTpl" value="shopOrderReport">

где shopOrderReport - это название чанка с шаблоном отчета (параметр &report сниппета eForm).

&eFormOnBeforeMailSent=`populateOrderData` - функция для заполнения данных о выбранных товарах.

Для того чтобы заказы отправлялись в модуль Shopkeeper, в вызов сниппета eForm добавить параметр

&eFormOnMailSent=`sendOrderToManager`

Пример вызова eForm:

[!eForm?
&formid=`shopOrderForm`
&tpl=`shopOrderForm`
&report=`shopOrderReport`
&ccsender=`1`
&gotoid=`11`
&subject=`Новый заказ`
&eFormOnBeforeMailSent=`populateOrderData`
&eFormOnMailSent=`sendOrderToManager`
!]

Товары в каталоге Shopkeeper

Можно сохранять товары в отдельльную таблицу БД (не документы).При этом остается возможность использовать стандартные TV-параметры для товаров и плагины. Для создания и редактирования товаров используется стандартный интерфейс (можно настраивать с помощью плагина ManagerManager). Для вывода товаров на сайте используется сниппет catalogView.

Товары можно "вложить" в любой документ (категорию), выбрав в дереве документов. Т.е. категории каталога (структура) создается как и раньше, документами, но сами товары будут храниться в отдельной таблице БД.

Если товар из каталога Shopkeeeper, в чанк товара (сниппет catalogView) нужно вставить скрытое поле:

<input type="hidden" name="shk-catalog" value="1">

Чтобы в модуле Shopkeeper (в админке) появилась ссылка "Каталог", нужно в конфигурации указать ID категории каталога (документ MODx) по умолчанию.

Также необходимо настроить конфигурацию плагина SaveToSHK — указать ID шаблона товаров и ID TV-параметра цены.

Важно!

Рекомендуется использовать ЧПУ. В шаблонах сайта рекомендуется использовать <base href="[(site_url)]"> внутри и относительные пути. Если чанки хранятся в файлах (используется команда @FILE:), проверьте кодировку этих файлов. Она должна быть такая же, как у вашего сайта.

Рекомендуется установить плагин PHx. В чанке chunk_shopOrderFormWebUser.tpl он используется для заполнения скрытых полей данными авторизованного пользователя.

Для вывода корзины (сниппета) в разных местах рекомендуется создавать разные шаблоны для страниц или использовать плагин PHx. Если используется умножение цены товара на цену доп.параметра, в шаблоне информации о товаре (chunk_shopStuff.tpl и chunk_shopToCart.tpl) поле с ID товара (<input name="shk-id" value="[*id*]">) должно быть выше доп. параметров по HTML-коду.

Оформление заказа на FormLister

В файле 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>

Обсуждение на сайте сообщества

Mem: 3.75 mb, MySQL: 0.0021 s, 2 req., PHP: 0.0296 s, all: 0.0317 s, cache.