Сегодня выложил обновленную сборку магазина 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. Здесь тоже надо детальней рассмотреть: — 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-у за картинкой? Вот это уже новшество наших хостинг-технологий, о которых я уже не раз писал. В общем теперь для сайта можно указывать специальный параметр, который параллельно поднимает специальный кеш-хост на уровне нгинкса, и начинает работать следующая схема: 1. Идет обращение браузера к серверу за подобной картинкой. 2. Нгинкс перенаправляет этот запрос на кеш-хост. 3. Кеш-хост проверяет, есть ли у него в кеше такая картинка. Если есть, то сразу отдает ее из кеша. Если нет, то отправляет уже запрос MODX-у, тот возвращает картинку или ошибку. Если картинка была получена, она кешируется и в дальнейшем уже, пока есть кеш, не выполняется повторных запросов к MODX-у. Что интересно в этой схеме, кеш-сервер ловит заголовки срока кеширования от сайта и для картинки указывает именно этот срок, то есть если на стороне сайта будет указан один день жизни кеша, то и картинка будет храниться только день, после чего будет выполняться повторный запрос.
Какой все это дает эффект? 1. Картинки сервером отдаются почти мгновенно joxi.ru/l2Zv8BQf8ME192 Даже не из кеша: joxi.ru/n2Y87DVhjdZ8nm 2. Гугл радуется joxi.ru/a2XVypGuyKDexr
Вот, собственно, небольшая часть нововведений. Да, это не все, так как про все писать очень долго. Но так или иначе, сборка становится более стабильная и гибкая, соответствующая реальным потребностям. Так же в ближайших релизах мы планируем реализовать группы товаров и вариации, так, чтобы совсем по фэншую было. Так что не стесняйтесь, приобретайте подписку.
А чтобы было еще интересней приобретать подписку, объявляю акцию: до 7-го апреля при оплате подписки пэй-бэк составит не 50%, а 100%, то есть 5000 монеток упадет вам на баланс. 5000 монеток — это три часа моего времени на ваш проект. Три часа — это не только обновление более ранней версии движка до последней, но и плюшек еще можно всяких добавить.
В общем, я был дико удивлен, увидев под капотом ShopModxBox-2.2.3)))) Анонс этой сборки состоялся полтора года назад :) Но еще больше я был удивлен, что подправив пару параметров в JS (пути на новые коннекторы), товары стали добавляться в корзину :) Резюме: вы не выполнили вот это условие:
— Обновить паблик и смарти шаблоны shopmodx с гита
У вас там весь фронт полуторагодичной давности. Вам надо смарти и паблик шаблоны обновить, а скин должен нормальным расширяющим быть. Если сами не справитесь с обновлением до последней версии, могу в счет 500 монет обновить вам.
Пришли доступ в админку на n.lanets@modxclub.ru, я посмотрю.
Вот этот пункт выполнен:
конечно
Вот этот пункт выполнен:
Удаляем папку core/cache/ (Обязательно!)
$this->modx->basket не должно быть в принципе.
после обновления, при попытке добавить в корзину «Ошибка выполнения запроса». $this->modx->basket->getActiveOrderID() пустая, ошибка в error.log; (ERROR @ /index.php) Processor core/model/modx/processors/basket/web/orders/products/getdata.php does not exist; Array ( ) Что то сделано не правильно?
Добрый день!
Перенёс сайт на modx 2.4.3 на хостинг. Залил базу данных, изменил пути во всех нужных файлах, прописал логин, пароль к базе данных в config.inc.php. Скачал на сервер папку setup в корень, чтобы протестировать, все ОК. Могу зайти в админку, но страницы сайта не отображаются (ошибка 500 Internal Server Error). В htaccess — только стандартные параметры, которые были при установке modx, я просто раскоментировал файл. test_config.php пишет:
The following errors were detected:
/home/y/y2481177/energy/public_html/connectors/browser folder does not exist! /home/y/y2481177/energy/public_html/connectors/context folder does not exist! /home/y/y2481177/energy/public_html/connectors/element folder does not exist! /home/y/y2481177/energy/public_html/connectors/layout folder does not exist! /home/y/y2481177/energy/public_html/connectors/resource folder does not exist! /home/y/y2481177/energy/public_html/connectors/source folder does not exist! /home/y/y2481177/energy/public_html/connectors/workspace folder does not exist!
Все пути в config.inc.php прописаны верно. В папке connectors этих папок быть не должно. Почему test_config ищет эти директории в папке connectors и в чём может быть причина того, что админка работает, а страницы не открываются?
Свои источники фалов не создавал.
Консоль, пусть и не самая свежая, даже в официальном репозитории modx.com лежит.
Прочитал ) правда комменты читал выборочно
Вставлю и свои пять копеек.
Слишком жесткие условия, как по мне. Да действительно за shopModxBox цена в 5к это копейки учитывая рыночную стоимость создания ИМ. Но есть же и другие пакеты! Например Смарти, Консоль, ГеоИП. Я никогда не юзал магазин на больше чем раз развернул на локалке, но консоль это первое что устанавливается мною.
Я незнаю частоту обновления этих продуктов но прятать их под платной подпиской жестоко как по мне. Но я так понял будет выложено где то что то.
п.с. а по большому счету разнылись что перестанут рубить бабло на ИМах :)
Вообще про modxSite будет еще отдельный топик завтра, так как в прошлых релизах были не раскрытые важные фишки, но текущего релиза наверняка многие долго ждали — это морфологический поиск по сайту (в том числе и по каталогу, если мы говорим об интернет-магазинах). Для этого был собран и опубликован новый компонент — modSearch. Собственно, он-то и индексирует содержимое сайта, используя библиотеку phpMorphy, но в modxSite в getdata-процессор был добавлен входной параметр search, по которому и происходит поиск документов. Конечно это далеко еще не исчерпывающее решение, так как с поиском очень много тонкостей, но это уже гораздо больше, чем ничего. К примеру и здесь на сайте Клуба поиск реализован с использованием этого компонента, и позволяет искать топики сразу по нескольким словам с учетом склонений. В процессе алгоритмы будем допиливать (включая возможность индексации не только полей самого документа, но и связанных с ним объектов и TV-полей).
Немного тонкостей.
В состав компонента modSearch входит одноименный плагин, который срабатывает на сохранение документа и индексирует его содержимое по указанным в настройках полям (по умолчанию это content, pagetitle и longtitle, но можно туда же добавить description, introtext и т.п.). Для того, чтобы полностью пересоздать индексы для документов (особенно это требуется, если пакет устанавливается на уже готовый сайт), в состав пакета входит готовый Console-скрипт. Он просто прогоняет все документы на обновление, а там уже вызывается плагин и создает индексы. Там же имеется и второй скрипт с примером поиска документов с помощью getdata-процессора.