Skip to content

Что такое pbShop ​

pbShop — магазин для сайтов на PageBlocks 3.x: товары (они же тарифы и услуги) с опциями и вариантами, категории, остатки, корзина, доставка, заказы, цены в нескольких валютах, платежи, подписки и события, на которые сайт вешает свою логику.

Это не самостоятельное приложение. Без установленного PageBlocks компонент пишет ошибку в лог и выключается: оттуда приходят таблицы и конструктор полей, роутинг, контроллеры, файловые шаблоны, миграции и шаблонизатор. pbShop не изобретает ничего из этого — он приносит доменную логику магазина и два способа её вызвать.

Один результат — три пути ​

Это главная мысль, и с неё стоит начать, потому что дальше вся документация поделена именно так.

php
// Вёрстка — шаблон MODX
[[!pbProducts? &parent=`mugs` &tpl=`card` &limit=`12`]]

// Вёрстка — Fenom в файловом шаблоне
{'!pbProducts' | snippet: ['parent' => 'mugs', 'tpl' => 'card', 'limit' => 12]}

// Разработчик — контроллер, сниппет не нужен вообще
$products = $shop->products()->inCategory('mugs')->limit(12)->get();

return $this->render('catalog.tpl', ['products' => $products]);

Три пути — один сервис. Ни один из них не «правильнее» остальных, и ни один не проходит через другой: верстальщик никогда не обязан открывать IDE, разработчик никогда не обязан пользоваться сниппетами. Проект может быть собран целиком первым способом, целиком вторым или вперемешку — для агентства это основной сценарий, а не экзотика.

Логика живёт в сервисе

Сниппет — адаптер на десяток строк. Всё, что он умеет, доступно прямым вызовом, и наоборот: возможность, нужная в типовом сценарии, обязана иметь вызов одной строкой. Если что-то есть только в сниппете — это дефект, а не удобство.

Куда идти дальше ​

ВыНачните с
Знаете HTML и CSS, работаете в шаблонах MODXБыстрый старт
Пишете роуты и контроллеры, работаете в IDEРазработчику

Что внутри ​

Каталог. Категории с вложенностью, товар в нескольких категориях, ЧПУ с каноническим адресом, опции и характеристики, варианты со своей ценой, весом, остатком и артикулом, генератор вариантов, подбор по опциям, цена «от» у составного товара.

Корзина и оформление. Гостевая корзина по cookie, слияние с пользовательской при входе, промокоды, расчёт доставки под состав, покупка в один клик, согласие на обработку данных, регистрация на оформлении через pbAuth.

Деньги. Суммы везде целые в минорных единицах — никаких float. Цены фиксированные на валюту и по курсу не пересчитываются. Драйвер обязан проверять подпись колбэка сам, сверку суммы делает сервис сверху, а сумму из колбэка не принимает на веру никто.

Заказы и подписки. Отдельной сущности «подписка» нет: подписка — это заказ с периодом, сроком, признаком автопродления и токеном привязки. Когда звать продление и снятие истёкших, решает крон сайта, а не компонент.

Чеки 54-ФЗ. Шлюз бьёт чек сам, если умеет; для остальных путей прихода денег есть касса (АТОЛ) с очередью документов и ключом идемпотентности.

Чего pbShop не делает ​

Вход и регистрацию — этим занимается pbAuth либо сам сайт. Ссылки в шапке витрины берутся из настроек, а если их нет — из именованных маршрутов pbAuth; нет ни того ни другого — ссылки не показываются вовсе. «Войти», ведущий на 404, хуже, чем его отсутствие.

Расписание тоже: dueForRenewal(), renew(), expire(), рассылку подписок на поступление и добор недопечатанных чеков зовёт крон магазина. Компонент даёт методы, но не решает, когда им сработать.

pbShop — магазин для сайтов на PageBlocks