ShopModxBox-3.1.0 + shopModx-2.1.0 со скидками и морфологическим поиском

Сегодня выложил обновленную сборку магазина 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% скидка. При этом не надо выполнять никаких сохранений. Если объект заказа по какой-то причине не будет сохранен (какие-то правила сработают), то и скидки эти не будут применены. Так же очень радует то, что скидки видно сразу при добавлении/удалении товаров, в том числе и просмотре корзины при изменении количества товаров. — Морфологический поиск. Пока что в шаблоны сборки я еще форму не прописал, но на демо-сайте покликать можно черновой вариант: demo.shopmodx.ru/catalog/?category_id[]=131&search=toshiba+%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9 — Поправил оплату Robokassa. Я был удивлен, что робокасса поменяла процесс тестирования и убрала старый тестовый сервер. Оказывается давно уже нельзя старым способом потестировать платежи. Но зато новый способ юолее прокаченный у нее теперь. Под новшества и обновился пакет. Так же в консоль закинул пару скриптов для отладки платежей. — Вечные ЧПУ-ссылки на картинки товаров. Вот это главная и самая сложная фишка недавнего релиза пакета modxSite, про которую давно уже хотел написать, но руки еще не доходили. Главная и сложная после object-процессора, который используется новым shopModx-ом, и о котором я тоже пока ничего не написал, но это уже слишком сложно все и об этом будет отдельная статья. Итак, давным-давно я писал вот эту заметку modxclub.ru/topics/absolyutnyie-ssyilki-bez-primesej-resajznutyix-kartinok-1268.html Там рассматривался способ формирования постоянных ссылок на изображения, чтобы не было всяких примесей в УРЛах и чтобы ссылки не бились при изменении параметров ресайзинга. Но был и есть в том методе один существенный минус: на каждый запрос к серверу дергался MODX. То есть каждый запрос картинки, если она не из кеша, отправлялся запрос на коннектор, там выполнялась инициализация всего MODX-а, который уже и обрабатывал запрос на эту картинку. Это решало вопросы с УРЛами, но в принципе не могло работать быстро. Вот чтобы это все решить был разработан довольно сложный инструмен, для качественной работы которого еще и требуется хитрая настройка сервера (чтобы сервер кешировал картинки от MODX-а и при повторных запросах отдавал из кеша, а не обращался опять к MODX-у). Часть первая. modxSite-коннектор и процессор для генерации картинок. Для примера: demo.shopmodx.ru/assets/components/modxsite/connectors/thumb.php?resource_id=120&alias=sony-c1605-black-xperia-e-dual-sim&type=small demo.shopmodx.ru/assets/components/modxsite/connectors/thumb.php?resource_id=120&alias=sony-c1605-black-xperia-e-dual-sim&type=medium demo.shopmodx.ru/assets/components/modxsite/connectors/thumb.php?resource_id=120&alias=sony-c1605-black-xperia-e-dual-sim&type=big Все эти картинки уходят на процессор modxSite. Здесь тоже надо детальней рассмотреть: — type — тип изображения. Задается в настройках в формате JSON joxi.ru/LmGVQx0uR5JBnr Для каждого типа задаются стандартные параметры phpThumb, так что вы спокойно можете своих типов добавить. — resource_id — ID документа, от которого картинка должна быть получена. Имейте ввиду, что используется TV-поле с названием image. — alias — это алиас самого документа. Такой хак был использован для того, чтобы у картинки сразу был ЧПУ-адрес по адресу документа. Плюс к этому еще и проверка уникальности адреса идет по этому алиасу. Если запрошенный алиас не будет совпадать, то будет 404. Важный момент: в случае каких-либо ошибок процессор не просто 404 отдает, но еще и сообщение, так что отладка рулит. joxi.ru/L21Leyds6ZgOZm И еще момент: при установке modxSite по умолчанию настройка modxsite.thumb_snippet пустая. Вот если она пустая, то используется родной phpThumb самого MODX-а. Настоятельно советую указывать именно какой-нибудь сниппет установленный, так как там есть траблы с заголовками кеширования, да и гибкость у тех получше. Часто вторая. Вечные ссылки, производительность и кеширование. Конечно же вышепредставленные на картинки ссылки далеки от идеала. Да, эти ссылки тоже вечные (то есть вы можете в настройках менять параметры и картинки будут меняться, но сами ссылки останутся прежними), но все-таки согласитесь, что такие ссылки лучше: demo.shopmodx.ru/static/images/small/sony-c1605-black-xperia-e-dual-sim-120.png demo.shopmodx.ru/static/images/medium/sony-c1605-black-xperia-e-dual-sim-120.png demo.shopmodx.ru/static/images/big/sony-c1605-black-xperia-e-dual-sim-120.png Как работают подобные ссылки, мы разбирали еще в приведенной выше статье. Но как сделать так, чтобы сервер не обращался каждый раз к MODX-у за картинкой? Вот это уже новшество наших хостинг-технологий, о которых я уже не раз писал. В общем теперь для сайта можно указывать специальный параметр, который параллельно поднимает специальный кеш-хост на уровне нгинкса, и начинает работать следующая схема:
  3. Идет обращение браузера к серверу за подобной картинкой.
  4. Нгинкс перенаправляет этот запрос на кеш-хост.
  5. Кеш-хост проверяет, есть ли у него в кеше такая картинка. Если есть, то сразу отдает ее из кеша. Если нет, то отправляет уже запрос MODX-у, тот возвращает картинку или ошибку. Если картинка была получена, она кешируется и в дальнейшем уже, пока есть кеш, не выполняется повторных запросов к MODX-у. Что интересно в этой схеме, кеш-сервер ловит заголовки срока кеширования от сайта и для картинки указывает именно этот срок, то есть если на стороне сайта будет указан один день жизни кеша, то и картинка будет храниться только день, после чего будет выполняться повторный запрос. Какой все это дает эффект?
  6. Картинки сервером отдаются почти мгновенно joxi.ru/l2Zv8BQf8ME192 Даже не из кеша: joxi.ru/n2Y87DVhjdZ8nm
  7. Гугл радуется joxi.ru/a2XVypGuyKDexr Вот, собственно, небольшая часть нововведений. Да, это не все, так как про все писать очень долго. Но так или иначе, сборка становится более стабильная и гибкая, соответствующая реальным потребностям. Так же в ближайших релизах мы планируем реализовать группы товаров и вариации, так, чтобы совсем по фэншую было. Так что не стесняйтесь, приобретайте подписку. А чтобы было еще интересней приобретать подписку, объявляю акцию: до 7-го апреля при оплате подписки пэй-бэк составит не 50%, а 100%, то есть 5000 монеток упадет вам на баланс. 5000 монеток — это три часа моего времени на ваш проект. Три часа — это не только обновление более ранней версии движка до последней, но и плюшек еще можно всяких добавить.

Мне кажетс, что вы топчитесь на месте… Как можно такой поиск делать на сайте? ищу слово «просто» он выдает в поиск товары со словами «просмотры», то есть то, что ты ищешь по факту может быть в самом конце. Зачем он нужен такой? «Фишечка с постоянными ссылками к картинкам» — зачем? зачем он мне нужен на моих платных серверах? Что бы он всегда обращался и инициализировал modx? эта фишка Только для вас и ваших серверов, да я знаю про вашу технологию «пупет», но сколько человек ею пользуется? А скидки? оказывается мне еще процедуру как обычному обывателю надо писать? ладно я знаю как это все устроено, а обычные новички? конечно же должны тратить монетки))) ну и на последок, у вас на демо сайте корзина не очищается.

Как можно такой поиск делать на сайте? ищу слово «просто» он выдает в поиск товары со словами «просмотры» Не «просмотры» выдает, а «проще». Можете поверить на слово, я перепроверил. И это гораздо больше, чем ничего (это к вопросу «зачем»). Хотя да, есть еще что улучшать. И будем улучшать обязательно. А вот не делать и не улучшать — это топтаться на месте. зачем он мне нужен на моих платных серверах? Что бы он всегда обращался и инициализировал modx? Настройте кеширование сервера сами, и не будет дергать каждый раз MODX. У нас не дергает. Только для вас и ваших серверов, да я знаю про вашу технологию «пупет», но сколько человек ею пользуется? Пользуемся мы и наши клиенты. Пока не много. Будет больше обязательно. А скидки? оказывается мне еще процедуру как обычному обывателю надо писать? ладно я знаю как это все устроено, а обычные новички? Сейчас да. Чуть позже будут простые настройки. конечно же должны тратить монетки))) Да, и это нормальная практика. Можете сами — не придется тратиться. Не можете — надо платить. Я вам тайну открою: я ни для кого бесплатно ничего не делаю. Раньше вот делился наработками бесплатно, но не делал бесплатно, если вы разницу улавливаете. ну и на последок, у вас на демо сайте корзина не очищается. Спасибо за багрепорт, вечером выпущу патч.

Все по делу, спасибо за ответ! Хоршо если на слово «проще», нужно дорабатывать, согласен, с поиском морфологическим проблем больше чем кажеться. Я бы даже сказал бездонная работа которую всегда можно улучшать и лучшать. На платных серверах кэш смогу настроить? ну скажем nic.ru, reg.ru, timeweb.ru итд.? если да, почему бы сразу в пост не прописать как это делается? А поля на акцию надо обязательно, все таки у вас теперь платный «продукт», который должен работать из коробки =) PS. не обращайте внимания на грамматические и пунктационные ошибки.

На платных серверах кэш смогу настроить? ну скажем nic.ru, reg.ru, timeweb.ru итд.? За всех не скажу, но скорее всего да. если да, почему бы сразу в пост не прописать как это делается? Погуглите. Я гуглил и вы погуглите. А поля на акцию надо обязательно, все таки у вас теперь платный «продукт», который должен работать из коробки =) Ну, пока вы не купили, вам я не обязан пока ничего срочно дорабатывать. Так что или покупать и требовать (в рамках бюджета) или подождать когда появится.