?Вышла новая сборка магазина ShopModxBox-2.1.0-beta.
Список изменений
Обновлен пакет shopModx до версии 0.2.0-beta.
Добавлено TV-поле keywords. Теперь легко можно указать ключевые слова для документа.
Полностью переписан класс modMgrOrdersProductsAddProcessor компонента billing. Удален метод getInstance(). Теперь логика вызова Add- или Create- процессора выполнена прям в методе process() текущего класса. Это позволяет гораздо легче расширять логику на уровне классов.
Улучшен компонент basket:
Механизм корзины полностью переписан на основе базы данных. В сессии хранится только id заказа, и то исключительно для того, чтобы поддерживать механизм корзины для неавторизованных пользователей. Если пользователь авторизованный, то будет автоматически получен id его актуальной корзины. В остальном все данные хранятся в базе данных.
Созданы новые basket/web/orders/update и basket/web/orders/status/update процессоры. В update-процессоре прописана проверка, действительно ли данный заказ принадлежит текущему пользователю.
Переписан процессор очистки корзины. Теперь дополнительно еще проверяется, чтобы статус корзины (заказа) был только 1 — то есть новый. После того, как он оформлен, ее уже нельзя очистить. В дальнейшем еще будет дописан процессор orders/cancel, чтобы пользователь имел возможность отменить уже оформленный заказ, но не взятый в работу менеджерами.
Все процессоры теперь не в папке processors/, а в папке processors/basket/. Это необходимо, чтобы не было конфликтов имен классов с процессорами других компонентов (например биллинга). Дело в том, что механизм MODX-а устроен так, что лучше использовать автоматически создаваемые имена классов (MODX имена генерирует). И если у нас процессоры будут лежать в одинаковых папках, но в разных модулях, то имена классов могут совпасть, и будет фатальная php-ошибка. А там процессоры именуются по маске modBasketWeb… и modBasketMgr...
Старые процессоры оставлены для обратной совместимости, но они все помечены как _depricated. От их использования необходимо отказываться, изменив пути в вызовах процессоров.
Обновляется basket простой заменой файлов.
Различные багфиксы и мелкие улучшения.
Под катом подробная инструкция по обновлению существующих магазинов на ShopModxBox-2.0.1-beta.
Обновление работающего сайта на ShopModxBox-2.0.1
Через пакет ShopModxBox не обновить, так как это пакет всего сайта, и он затрет текущую версию сайта. Тем не менее я приложил максимум усилий для обратной совместимости со старой версией и чтобы легко было обновить существующий сайт. В целом цель достигнута, как правило за счет вот подобных замен старых процессоров:
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/basket/web/orders/empty.class.php';
class modEmptyProcessor_depricated extends modBasketWebOrdersEmptyProcessor{}
class modEmptyProcessor extends modEmptyProcessor_depricated{
public function initialize(){
$this->modx->log(xPDO::LOG_LEVEL_ERROR, "[- Basket -] Class '". __CLASS__ ."' is depricated. ".__FILE__.":".__LINE__);
return parent::initialize();
}
}
return 'modEmptyProcessor';
Здесь сразу и обозначение, что он устаревший, и сохранение старого названия (на случай, если вы где-то его переопределили и явно указали имя класса, и чтобы переименование процессора не привело к фатальной ошибке), и сразу логирование в MODX, что процессор устарел, и что от него надо избавляться.
Процесс избавления очень просто: в том месте, где вызывается этот процессор, меняете вызываемый процессор на актуальный, то есть тот, который расширяет depricated (да, меня уже поправляли, что правильно deprecated, но сейчас буду писать так, как в коде, чтобы не путать. В новой версии переименую или удалю нафиг :-) ). В нашем случае это modBasketWebOrdersEmptyProcessor. Путь к нему указан выше.
Итак, перейдем непосредственно к процессу обновления.
1. Обновите пакет shopModx до последней версии.
Текущая актуальная версия — shopModx-0.2.0-beta.
Это необходимо сделать, так как если не сделать, то процессор modxsite/processors/web/getdata.class.php почти наверняка развалится по причине того, что новый процессор требует метода в родительском процессоре, который появился как раз в shopModx-0.2.0.
2. Скачайте и распакуйте у себя git-репозиторий ShopModxBox
Да, мы выложили гит-репозиторий сборки :-) Адрес: https://github.com/Fi1osof/ShopModxBox
Конечно, это не вся сборка, а только самые основные пакеты (basket, billing, modxsite), и то не установочные, а только их файлы, тем не менее это во-первых, позволит мне же гораздо проще тыкать в нужную строчку кода, чтобы показать где что происходит, а во вторых у нас сборка на 98% основывается на файлах (процессоры, xPDO-объекты и т.п.), так что всегда можно будет их репозитория быстро обновиться.
Если вы умеете работать с гитом, то конечно же лучше всего как раз делать клон проекта. Но если нет, или какие-то сложности, то можно и просто скачать zip-архив репозитория.
?
3. Залейте поверх новые файлы
assets/componensts/basket/
core/components/basket/
core/components/billing/
core/components/modxsite/ (Убедитесь, что у вас не используется default шаблон. Переименуйте его в core и в assets и укажите смените настройку шаблона в modxSmarty).
4. Добавьте новый MODX-сервис basket.
Для этого в консоли выполните следующий код:
<?php
$modx->removeExtensionPackage('basket');
$modx->addExtensionPackage('basket', '[[++core_path]]components/basket/model/', array(
"serviceName" =>"basket",
"serviceClass"=>"Basket",
));
Теперь у вас всегда будет доступен новый объект-сервис компонента basket. Пока в нем мало что есть, но как минимум есть следующее:
$modx->basket->getActiveOrderID();
То есть в любом месте можно получить id текущей корзины (именно новой, не оформленной корзины, которую набивает пользователь товарами).
5. Добавьте в свой Smarty-шаблон новые шаблоны писем
В новом модуле оформления заказов появились отдельные письма для конечных пользователей, и для менеджеров. Эти письма отправляются, когда пользователь оформляет заказ на сайте.
Скопируйте в свой Smarty-шаблон папку core/components/modxsite/templates/default/message
Там два шаблона: contractor.tpl и manager.tpl
6. Обновите вызовы старых процессоров.
После обновления скорее всего вам в MODX-логи начнут сыпаться сообщения по поводу устаревших процессоров. Я про это написал выше. Просто обновите вызовы этих процессоров.
UPD: Нашел место, где параметр один старый потерян. То есть он устаревший, но вот надо шаблон поправить. Шаблон shop/basket/overview/index.tpl
Надо заменить $object.order_price на $object.price, и значение key подправить
gist.github.com/Fi1osof/ed7d055071b2e80fd84e/revisions
Это на странице просмотра корзины.
7. Подредактировать плагин basket.
Там появились две переменные:
$basket_processor и $basket_namespace.
В параметрах этого процессора надо указать basket/web/public/action и basket соответственно.
?
Эти параметры для того, чтобы можно было изменить вызываемый роутер-класс.
Вот, собственно, и все. Обновление прошло :-)
Если у кого-то возникнут сложности, пишите прям здесь.
P.S. Если кому помогает наша работа, не стесняйтесь слать донейты ;-) Больше донейтов — больше нашей занятости над сборкой. Координаты указаны в верхнем правом углу.