DocInfo
GitHub
Перейти

Сниппет выводит корзину заказов двух типов (расширенный и простой). Письмо с заказом можно отправлять на почту и в модуль Shopkeeper (рекомендуется). Товарам можно задавать дополнительные параметры, которые пользователь сможет выбрать. Для создания формы заказа нужно использовать сниппет eForm, для вывода списка товаров - CatalogView или Ditto.

Параметры

Основные параметры

Формат: russian | english | german | francais
Значение по умолчанию: Язык системы управления
Примечание:
Пример:
&lang=`english`
Формат: default | 0 | путь к файлу
Значение по умолчанию: assets/snippets/shopkeeper/style/default/
Примечание: 0 - если не нужен отдельный стилевой файл для корзины
Пример:
&style=`0`
Формат: full | small | empty
Значение по умолчанию: full
Примечание: `full` - расширенный
`small` - простой
`empty` - только очистка корзины без вывода на странице
Пример:
&cartType=`small`
Формат:
Значение по умолчанию: руб.
Примечание:
Пример:
&currency=``
Формат: имя TV-параметра
Значение по умолчанию: price
Примечание: Если ваш TV для цены имеет название не "price", обязательно укажите это имя в данном параметре
Пример:
&priceTV=`value`
Формат: id документа
Значение по умолчанию: 1
Примечание: обязательный параметр
Пример:
&orderFormPage=`10`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&noJQuery=`1`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&noConflict=`1`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание: 1 - скрыть
0 - не скрывать
Пример:
&noCounter=`1`
Формат: 0 | 1
Значение по умолчанию: 1
Примечание: Если этот параметр указан (0) на странице оформления заказа, письмо с составом заказа и список товаров в модуле будут без ссылок.
Пример:
&linkAllow=`0`
Формат:
Значение по умолчанию: div.shk-item
Примечание: В предыдущих версиях этот параметр назывался clStuffCont.
Пример чанка: chunk_shopStuff.tpl
Пример:
&stuffCont=``
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&debug=`1`
Формат: helper | image | nofly
Значение по умолчанию: helper
Примечание: helper - появляется блок со счетчиком кол-ва товаров и летит в корзину;
image - в корзину летит картинка товара;
nofly - в корзину ничего не летит;
При &flyToCart=`image` тег img должен иметь CSS-класс "shk-image"
Пример:
&flyToCart=`image`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&noLoader=`1`
Формат: 0 | 1
Значение по умолчанию: 1
Примечание:
Пример:
&excepDigitGroup=`0`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&counterField=`1`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание: Обратите внимание, что в чанке "shopCart" кнопка "Пересчитать" находится внутри тега "noscript". Если используется режим &noJavaScript=`1`, рекомендуется тег "noscript" удалить.
Пример:
&noJavaScript=`1`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание: Обычно используется в вызове сниппета краткого вида корзины. Указывается ID страницы с подробным видом корзины (оформление заказа). На этой странице краткий вид корзины будет отключен.
Пример:
&hideOn=`1`

Шаблоны

Формат: путь
Значение по умолчанию: assets/snippets/shopkeeper/chunks/ru/
Примечание:
Пример:
&tplPath=``
Формат: имя чанка | @FILE
Значение по умолчанию: @FILE:chunk_shopCart.tpl
Примечание: Чанк содержит сразу 3 шаблона - для пустой, заполненной расширенной и простой корзины. Если чанки хранятся в файлах, можно указать путь с командой "@FILE:". Если чанки созданы в системе управления, то указывается только имя чанка (например &cartTpl=`shopCart`)

Пример: chunk_shopCart.tpl(содержит 3 шаблона корзины)
<!--tpl_separator--> - разделитель шаблонов (удалять нельзя)

Шаблон расширенной корзины (&cartType=`full`)

Плейсхолдеры в шаблоне
[+inner+] - строка с информацией о товаре (cartRowTpl);
[+price_total+] - Общая сумма;
[+this_page_url+] - URL текущей страницы;
[+empty_url+] - URL для очистки корзины;
[+order_page_url+] - URL страницы оформления заказа;
[+currency+] - валюта;

Шаблон упрощенной корзины (&cartType=`small`)

Плейсхолдеры в шаблоне
[+price_total+] - Общая сумма;
[+total_items+] - Число выбранных товаров;
[+plural+] - слово "товар" во множественном числе в зависимости от числа выбранных товаров;
[+this_page_url+] - URL текущей страницы;
[+empty_url+] - URL для очистки корзины;
[+order_page_url+] - URL страницы оформления заказа;
[+currency+] - валюта
Пример:
&cartTpl=`shopCart`
Формат: имя чанка | @FILE
Значение по умолчанию: @FILE:chunk_shopCartRow.tpl
Примечание: Плейсхолдеры в шаблоне
[+id+] - ID товара (документа);
[+name+] - название товара;
[+link+] - ссылка на страницу товара;
[+addit_data+] - строка с информацией о доп. параметрах товара;
[+price+] - цена;
[+price_total+] - цена товара + доп. параметры;
[+price_count+] - цена товара * кол-во;
[+currency+] - валюта;
[+count+] - количество;
[+this_page_url+] - URL текущей страницы;
[+index+] - номер товара в корзине (от нуля);
[+любой TV+] - любой TV-параметр, например [+image+];
[+shk_любой TV+] - любой доп. параметр, выбранный при добавлении товара в корзину (из [+addit_data+]), например [+shk_param1+].

Пример: chunk_shopCartRow.tpl и chunk_shopCartRow2.tpl


Пример:
&cartRowTpl=`shopCartRow`
Формат: имя чанка | @FILE
Значение по умолчанию: @FILE:chunk_shopCartHelper
Примечание:
Пример:
&cartHelperTpl=`cartHelperTpl`
Формат: имя чанка | @FILE
Значение по умолчанию: @FILE:chunk_additDataTpl
Примечание: Плейсхолдеры в шаблоне
[+param+] - имя и цена параметра. Цена указывается в скобках. Если цена = 0, то пишется только название параметра (без скобок);
[+name+] - имя параметра;
[+price+] - цена параметра;

Пример: chunk_additDataTpl.tpl


Пример:
&additDataTpl=`additDataTpl`
Формат: имя чанка | @FILE
Значение по умолчанию: @FILE:chunk_orderDataTpl
Примечание: Используется в письме с отчетом о заказе (eForm &report) и в модуле
Плейсхолдеры в шаблоне
Все плейсхолдеры чанка &cartRowTpl
[+loop+], [+end_loop+] - начало и конец строки данных товаров (цикл).
Пример:
&orderDataTpl=`orderDataTpl`
Формат:
Значение по умолчанию:
Примечание: Плейсхолдеры в шаблоне
[+orderData+] - состав заказа (список покупок);
[+orderID+] - номер заказа;
Пример: chunk_shopOrderReport.tpl и chunk_shopOrderReportWebUser.tpl
Пример:
&report=``

Примеры

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

[!Shopkeeper? &priceTV=`price` &orderFormPage=`10`!]
[!Shopkeeper? &cartType=`small` &priceTV=`price` &orderFormPage=`10` &changePrice=`1` &counterField=`1` &flyToCart=`nofly`!]

Необходимые CSS-классы, Id и имена полей

ШаблонCSS-классыid HTML-элементовИмена полей и кнопокПримечание
Шаблон вывода информации товара shk-item - класс "обертывающего" элемента блока с информацией о товаре;
shk-image - картинка товара (если используется &flyToCart=`image`);
shk-price -класс элемента с ценой товара.
shk-id - имя скрытого поля с id товара;
shk-count - имя скрытого поля с кол-вом товара.
Пример chunk_shopStuff.tpl
Шаблон корзины shopCart - id "обертывающего" элемента блока корзины;
butEmptyCart - id кнопки-ссылки очистки корзины;
butOrder - id ссылки на страницу оформление товара.
shk_recount - кнопка "Пересчитать". Пример chunk_shopCart.tpl
Шаблон строки информации о товаре в корзине shk-del - кнопка-ссылка удаления товара. count[] - name полей с кол-вом товара. Пример chunk_shopCartRow.tpl
Шаблон формы заказа email - поле "E-mail";
phone - поле "Телефон"
Пример chunk_shopOrderForm.tpl и chunk_shopOrderFormWebUser.tpl

CSS-классы (и id) используются в JS-функциях. Их можно использовать как дополнительные. Пример:

<div class="shop-stuff shk-item">

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

Форма заказа делается при помощи сниппета eForm. При вызове этого сниппета обзательно указать параметры:

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

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

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

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

Подключение системы оплаты

Для подключения системы оплаты (выписки квитанций и т.п.) можно сделать дополнительный сниппет, который может использовать переменные сессии, создаваемые после отправки заказа:

$_SESSION['shk_order_id'] - ID заказа в БД;
$_SESSION['shk_payment_method'] - выбранный способ оплаты (список с name="payment" в форме);
$_SESSION['shk_order_price'] - общая цена;
$_SESSION['shk_currency'] - валюта;
$_SESSION['shk_order_user_id'] - ID пользователя (если не зарегистрирован = 0);
$_SESSION['shk_order_user_email'] - адрес электронной почты плательщика (если не зарегистрирован).

События для создания плагинов

  • OnSHKFrontendInit - инициализация сниппета Shopkeeper во внешней части.
  • OnSHKChangeStatus - изменение статуса заказа.
  • OnSHKOrderDescRender - вывод подробной информации о заказе в модуле.
  • OnSHKMailApprovedForPayment - отправление письма при статусе "Принят к оплате". Плагин может добавлять в письмо доп. информацию ().
  • OnSHKcartLoad - загрузка корзины (вывод информации в чанке &cartTpl - ).
  • OnSHKstatusSendMail - отправка письма о смене статуса.
  • OnSHKmodRenderTopLinks - вывод ссылок вверху в модуле Shopkeeper.
  • OnSHKmodPagePrint - вывод страницы модуля. Можно использовать для создания своей страницы (см. пример OnSHKmodPagePrint_plugin_example.txt).
  • OnSHKbeforeSendOrder - перед отправкой заказа. Можно использовать для изменения полей ($fields).
  • OnSHKsaveOrder - сохранение заказа.
  • OnSHKcalcTotalPrice - расчет общей стоимости.

В папке shopkeeper/docs/ есть примеры плагинов.

"Сallback-функции" на JavaScript

setCartActionsCallback - перезагрузка корзины,
fillCartCallback - добавление товара в корзину,
emptyCartCallback - очищение корзины.

Просто создайте функции с такими именами и они будут вызываться при соответствующих действиях.

Две и более цены для одного товара

Для этого нужно создать две или более формы (<form>) и в поле name="shk-id" после ID написать имя TV с ценой.

Пример:

<input type="hidden" name="shk-id" value="[+id+]__price2" />

При submit формы в корзину добавится цена из TV-параметра с именем "price2".

Добавление в корзину данных, не создавая TV-параметры

Пример:

<input type="text" name="test__[*id*]__add" value="дополнительные данные" />

В корзину добавится параметр, который можно выводить в месте вставки плейсхолдера (выведется "дополнительные данные").

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

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

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

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

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

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

Важно!

  • На странице формирования заказа сниппет Shopkeeper должен вызываться раньше eForm.
  • В чанке формы заказа обязательно добавить скрытое поле
    <input type="hidden" name="reportTpl" value="shopOrderReport" />
    где shopOrderReport - это название чанка с шаблоном отчета (параметр &report сниппета eForm).
  • Сниппет можно вызывать на странице несколько раз, но корзина выводится только в месте первого вызова. Второй и последующие вызовы игнорируются. Если у Вас корзина на страницах каталога товаров находится в правой колонке шаблона, а на странице оформления заказа вызов сниппета вставлен в контент страницы, то на этой странице корзина будет выведена только в ценральной колонке (в правой вызов сниппета можно не убирать).
  • Рекомендуется использовать ЧПУ (семантические URL). В шаблонах сайта рекомендуется использовать <base href="http://i--gu.ru/" /> (внутри <head>) и относительные пути.
  • Если чанки хранятся в файлах (используется команда @FILE:), проверьте кодировку этих файлов. Она должна быть такая же как у вашего сайта.
  • Рекомендуется установить плагин PHx (http://modxcms.com/extras/package/?package=342).
    В чанке chunk_shopOrderFormWebUser.tpl для примера он используется для заполнения скрытых полей данными авторизованного пользователя.
  • Для вывода корзины (сниппета) в разных местах рекомендуется создавать разные шаблоны для страниц или использовать плагин PHx.
  • Если используется умножение цены товара на цену доп.параметра, в шаблоне информации о товаре (chunk_shopStuff.tpl и chunk_shopToCart.tpl) поле с ID товара (<input type="hidden" name="shk-id" value="1653" />) должно быть выше допюпараметров по HTML-коду.
  • Рекомендуется имена TV-параметров и чанков писать на латинице.
  • Рекомендованная кодировка - UTF-8.
  • Для работы необходим PHP версии не позднее 5.0. На PHP 5.3 пока не тестировалось.

Все примеры прилагаются (папка shopkeeper/chunks/).

Примеры чанков в папке install/examples/

  • chunk_shopCart.tpl - чанк корзины. Может быть использован как значение параметра &cartTpl при вызове Shopkeeper. Чанк содержит сразу 3 шаблона - для пустой, заполненной расширенной и простой корзины.
  • chunk_shopCartRow.tpl - чанк шаблона строки с информацией товара в расширенной корзине.
  • chunk_shopCartRow2.tpl - -//- пример с картинкой (TV - image) и условием PHx.
  • chunk_shopStuff.tpl - чанк краткой информации о товаре. Может быть использован как значение параметра &tpl при вызове Ditto.
  • chunk_shopStuff_2.tpl - -//- пример с двумя ценами для одного товара (продажа и прокат).
  • chunk_shopToCart.tpl - может быть использован в шаблоне страницы подробного описания товара или можно вставлять вызов чанка в визуальный редактор.
  • chunk_shopCartHelper.tpl - чанк шаблона "хелпера" - блока, который появляется для подтверждения действий.
  • chunk_additDataTpl.tpl - шаблон для доп. параметров товаров в корзине.
  • chunk_shopOrderForm.tpl - чанк форма оформление заказа. Может быть использован как значение параметра &tpl при вызове eForm.
  • chunk_shopOrderFormWebUser.tpl - чанк форма оформление заказа для зарегистрированных пользователей.
  • chunk_shopOrderReport.tpl - чанк письма с информацией о заказе. Может быть использован как значение параметра &report при вызове eForm.
  • chunk_shopOrderReportWebUser.tpl - чанк письма с информацией о заказе для зарегистрированных пользователей.
  • chunk_FormSignup.tpl - пример чанка с шаблоном формы регистрации для сниппета WebSignup.
  • chunk_weblogin.tpl - пример чанка с шаблоном формы авторизации сниппета WebLogin.
  • chunk_orderDataTpl.tpl - шаблон списка товаров в отчете о заказе ()

Виджеты для параметров товаров

Для создания виджетов (выпадающий список, радиокнопка, чекбокс) используется модификатор PHx - shk_widget.

Предупреждение

Т.к. сниппет производит действия с базой данных (запись, чтение), это может быть опасно. Автор попытался защититься от наиболее распространенных методов взлома системы, но всё может быть... Вы используете этот код на свой страх и риск. Автор не несет ответственности за последствия.

Поделитесь ссылкой

Статистика

Яндекс цитирования
© 2011 - 2023 Школа MODX
Напишите нам в Telegram