Сегодня выложил обновленную сборку магазина ShopModxBox с новым shopModx на борту. Серьезно проработал код, пофиксил баги и улучшил функциональность. В основном изменения коснулись самого компонента shopModx, то есть простое его обновление уже добавит функциональности магазину, но все же и про шаблоны не стоит забывать.
Сразу дам ссылку на демо-сайт, где можно во фронте потестировать новый функционал: demo.shopmodx.ru
Немного распишу основные новшества.
— Скидки. Да, теперь довольно хитрый скидки можно рулить на уровне плагина. Создаете плагин на событие OnShopModxOrderBeforeSave и пишите там, к примеру, вот такое:
switch($modx->event->name){
case 'OnShopModxOrderBeforeSave':
$discount = 0;
if($OrderProducts = $object->OrderProducts){
$total = 0;
foreach($OrderProducts as $OrderProduct){
$price = $OrderProduct->Product->ProductData->price;
if($OrderProduct->quantity >= 3){
$price = $price * 0.9;
}
$OrderProduct->price = $price;
$total += $OrderProduct->quantity;
}
if($total >= 10){
$discount = 10;
}
}
$object->discount = $discount;
break;
}
Уточню, что здесь происходит:
$object — это объект текущего заказа.
$object->OrderProducts — это объекты-связки Заказ-Товар.
$OrderProduct->Product->ProductData — это данные самого товара.
В данном случае учитывается сразу два типа скидок:
1. Если одного товара более или равно 3 штуки в корзине, то на этот товар идет скидка 10% (*0.9).
2. Если в корзине всего более и равно 10 товаров, то еще и на весь заказ идет 10% скидка.
При этом не надо выполнять никаких сохранений. Если объект заказа по какой-то причине не будет сохранен (какие-то правила сработают), то и скидки эти не будут применены. Так же очень радует то, что скидки видно сразу при добавлении/удалении товаров, в том числе и просмотре корзины при изменении количества товаров.
— Поправил оплату Robokassa. Я был удивлен, что робокасса поменяла процесс тестирования и убрала старый тестовый сервер. Оказывается давно уже нельзя старым способом потестировать платежи. Но зато новый способ юолее прокаченный у нее теперь. Под новшества и обновился пакет. Так же в консоль закинул пару скриптов для отладки платежей.
— Вечные ЧПУ-ссылки на картинки товаров. Вот это главная и самая сложная фишка недавнего релиза пакета modxSite, про которую давно уже хотел написать, но руки еще не доходили. Главная и сложная после object-процессора, который используется новым shopModx-ом, и о котором я тоже пока ничего не написал, но это уже слишком сложно все и об этом будет отдельная статья.
Итак, давным-давно я писал вот эту заметку modxclub.ru/topics/absolyutnyie-ssyilki-bez-primesej-resajznutyix-kartinok-1268.html
Там рассматривался способ формирования постоянных ссылок на изображения, чтобы не было всяких примесей в УРЛах и чтобы ссылки не бились при изменении параметров ресайзинга. Но был и есть в том методе один существенный минус: на каждый запрос к серверу дергался MODX. То есть каждый запрос картинки, если она не из кеша, отправлялся запрос на коннектор, там выполнялась инициализация всего MODX-а, который уже и обрабатывал запрос на эту картинку. Это решало вопросы с УРЛами, но в принципе не могло работать быстро. Вот чтобы это все решить был разработан довольно сложный инструмен, для качественной работы которого еще и требуется хитрая настройка сервера (чтобы сервер кешировал картинки от MODX-а и при повторных запросах отдавал из кеша, а не обращался опять к MODX-у).
Все эти картинки уходят на процессор modxSite. Здесь тоже надо детальней рассмотреть:
— type — тип изображения. Задается в настройках в формате JSON joxi.ru/LmGVQx0uR5JBnr
Для каждого типа задаются стандартные параметры phpThumb, так что вы спокойно можете своих типов добавить.
— resource_id — ID документа, от которого картинка должна быть получена. Имейте ввиду, что используется TV-поле с названием image.
— alias — это алиас самого документа. Такой хак был использован для того, чтобы у картинки сразу был ЧПУ-адрес по адресу документа. Плюс к этому еще и проверка уникальности адреса идет по этому алиасу. Если запрошенный алиас не будет совпадать, то будет 404.
Важный момент: в случае каких-либо ошибок процессор не просто 404 отдает, но еще и сообщение, так что отладка рулит.
joxi.ru/L21Leyds6ZgOZm
И еще момент: при установке modxSite по умолчанию настройка modxsite.thumb_snippet пустая. Вот если она пустая, то используется родной phpThumb самого MODX-а. Настоятельно советую указывать именно какой-нибудь сниппет установленный, так как там есть траблы с заголовками кеширования, да и гибкость у тех получше.
Как работают подобные ссылки, мы разбирали еще в приведенной выше статье. Но как сделать так, чтобы сервер не обращался каждый раз к MODX-у за картинкой? Вот это уже новшество наших хостинг-технологий, о которых я уже не раз писал. В общем теперь для сайта можно указывать специальный параметр, который параллельно поднимает специальный кеш-хост на уровне нгинкса, и начинает работать следующая схема:
1. Идет обращение браузера к серверу за подобной картинкой.
2. Нгинкс перенаправляет этот запрос на кеш-хост.
3. Кеш-хост проверяет, есть ли у него в кеше такая картинка. Если есть, то сразу отдает ее из кеша. Если нет, то отправляет уже запрос MODX-у, тот возвращает картинку или ошибку. Если картинка была получена, она кешируется и в дальнейшем уже, пока есть кеш, не выполняется повторных запросов к MODX-у.
Что интересно в этой схеме, кеш-сервер ловит заголовки срока кеширования от сайта и для картинки указывает именно этот срок, то есть если на стороне сайта будет указан один день жизни кеша, то и картинка будет храниться только день, после чего будет выполняться повторный запрос.
Вот, собственно, небольшая часть нововведений. Да, это не все, так как про все писать очень долго. Но так или иначе, сборка становится более стабильная и гибкая, соответствующая реальным потребностям. Так же в ближайших релизах мы планируем реализовать группы товаров и вариации, так, чтобы совсем по фэншую было. Так что не стесняйтесь, приобретайте подписку.
А чтобы было еще интересней приобретать подписку, объявляю акцию: до 7-го апреля при оплате подписки пэй-бэк составит не 50%, а 100%, то есть 5000 монеток упадет вам на баланс. 5000 монеток — это три часа моего времени на ваш проект. Три часа — это не только обновление более ранней версии движка до последней, но и плюшек еще можно всяких добавить.