Сборка интернет-магазина для MODX Revolution - ShopModxBox-2.0.0-beta
Итак, все долго-долго ждали, и таки дождались! :-) Встречайте! ShopModxBox-2.0.0-beta.
Времени потратили «чуть больше», чем планировалось, но это совсем не от безделья. Просто хотелось как можно более полную и грамотную основу заложить. Плюс была проделана огромная работа с фронтом сайта, и это не только адаптивная верстка, но и полноценное JS-API, за что Сергею огромнейшее спасибо! Все сделанное во фронте — это Сергей. Я серверную часть программировал.
В общем, вот демо-ролик (демонстрация + два способа установки). А под катом детали.
Сразу ссылки на ролик с привязкой по времени:
- Установка через менеджер пакетов в админке: https://www.youtube.com/watch?feature=player_detailpage&v=g_cSfGgSO9g#t=558
- Установка через консоль (более предпочтительный метод): https://www.youtube.com/watch?feature=player_detailpage&v=g_cSfGgSO9g#t=1003
Итак, вот неполный список изменений:
- Полностью переработан весь движок. Обратная совместимость с 1.1.0 не подразумевается.
- Добавлен компонент Billing. На этом модуле завязано все, что связано с заказами, оплатой и т.п.
- Корзина перестала существовать отдельно. Теперь Корзина — это еще не оформленный Заказ (Order). Теперь даже не оформленные заказы хранятся в базе данных, что как минимум позволяет видеть кого что интересует, а так же определять реальный процент конверсии и выявлять возможные ошибки.
- Компонент Basket (Корзина) остался, но почти все, что связано с самими заказами, перенесено в Billing. Basket и дальше останется отдельным модулем, а в Billing-е будет только необходимый минимум логики. Рассчет на то, что сам механизм заказа, оплаты и т.п. можно будет реализовывать в каких угодно сторонних модулях, которые будут взаимодействовать с биллингом.
- Добавлен и сверстан новый шаблон по умолчанию с использованием bootstrap. Много всяких аджаксовых плюшек и полноценное JS-API.
- Добавлен табличный редактор документов.
- Добавлено управление заказами.
- Добавлен личный кабинет пользователя, регистрация, смена пароля, восстановление пароля и т.п.
- Настроена регистрация через Login, смена/восстановление пароля и т.п.
- Добавлен модуль modHybridAuth (авторизация через социальные сети). Пока четко проверены Twitter, Facebook и Google, но должны и другие работать.
- Подключен сервис оплаты Robokassa.
- Настроены политики безопасности:
- Контент-менеджер;
- Администратор магазина;
- Менеджер магазина;
- Продвинутый менеджер магазина.
Всякие вкусности, а так же планы на будущее.
Движок на самом деле разрабатывался добротно, просто еще не все появилось. Но есть главное — основа. И эту основу мы будем постепенно развивать, а всякий, кому чего-то не хватит, без особых проблем сможет добавить свое.
Вот простой алгоритм, как этот магазин переделать под себя:
- Разворачиваем эту сборку.
- Делаем копии шаблонов (
assets/components/modxsite/templates/default/(публичная часть шаблона) иcore/components/modxsite/templates/default/(Смарти-шаблоны)). Называем шаблон каким-то своим именем. - Меняем название шаблона в настройке.

На самом деле можно было просто переименовать эти папки и настройку поменять :-) Но я так, описал полностью возможный механизм.
Все, у вас свое собственное оформление сайта. То есть пока еще только такой же шаблон, но вы его можете смело редактировать как хочется. Так вот, далее просто надо учесть, что у нас Смарти, а не просто сухие чанки, то есть в самих шаблонах можно менять логику отображения и работы сайта. А так же можно создавать свои процессоры и расширять имеющиеся. За счет этого вообще кардинально можно все изменить.
Но есть еще один огроменный фронт: новые модули для магазина. Мы закладываем основу так, чтобы можно было довольно легко добавить что-нибудь свое. Покажу один пример, правда он чисто для программистов.
Вот у нас есть оплата через робокассу, и стоит задача прикрутить еще какой-нибудь способ оплаты. Посмотрим, как это делается.
Вот это базовый процессор для любых типов оплаты: https://gist.github.com/Fi1osof/0d0df9bb085195205d25
Он абстрактный, и его нельзя вызвать напрямую, так как у каждой конкретной платежной системы свои механизмы проверки платежа. Но этот класс уже обеспечивает всю необходимую логику, и от расширяющего процессора ждет только одного: подтверждения правильности платежа и установки суммы и прочих данных платежа.
И вот расширяющий процессор конкретно для робокассы:
<?php
/*
Проводка платежа от робокассы
*/
require_once dirname(dirname(__FILE__)). '/create.class.php';
class modWebPaymentsRobokassaCreateProcessor extends modWebPaymentsCreateProcessor{
public function initialize(){
$this->setProperties(array(
"paysystem_id" => $this->modx->getOption('robokassa.bill_serv_id'),
));
return parent::initialize();
}
/*
Проверяем подпись с робокассы
*/
protected function checkSignature(){
$mrh_pass2 = $this->modx->getOption('robokassa.mrh_pass2');
// Параметры, передаваемые в запросе от робокассы
$crc = mb_strtoupper($this->getProperty('SignatureValue'));
$out_sum = $this->getProperty('OutSum');
$inv_id = $this->getProperty('InvId');
$shp_aid = $this->getProperty('shp_aid');
$shp_order = $this->getProperty('shp_order', null);
$shp_trff = $this->getProperty('shp_trff');
$shp_uid = $this->getProperty('shp_uid');
$my_crc = mb_strtoupper(md5("{$out_sum}:{$inv_id}:{$mrh_pass2}:shp_aid={$shp_aid}:shp_order={$shp_order}:shp_trff={$shp_trff}:shp_uid={$shp_uid}"));
$this->modx->log(xPDO::LOG_LEVEL_INFO, "[Robokassa - robokassa.payResult]", print_r($_REQUEST, true));
// проверка корректности подписи
if ($my_crc !=$crc){
$error = "[Robokassa - robokassa.payResult] - Неверная подпись. Получена: '{$crc}'. Должна быть: '{$my_crc}'";
$this->modx->log(xPDO::LOG_LEVEL_ERROR, $error);
return "bad sign";
}
// else
$this->setProperties(array(
"sum" => $out_sum,
"order_id" => $shp_order,
"owner" => $shp_uid,
"paysys_invoice_id" => $inv_id,
));
return true;
}
protected function getSuccessMessage(){
return 'OK'.$this->getProperty('InvId');
}
}
Как видно, это всего 60 строчек кода. Но в результате не только будет проведена оплата с учетом кто платил, через что, сколько и т.п., но и будет автоматически изменен статус заказа на Оплачен. И вот прикрутить еще какой-нибудь способ оплаты — это всего несколько десятков строк.
Вот пока на этом я прервусь. Скачивайте сборку, устанавливайте, изучайте, задавайте вопросы.