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

    В данный момент форма заказа делается при помощи сниппета 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>

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