Итак, все долго-долго ждали, и таки дождались! :-) Встречайте! ShopModxBox-2.0.0-beta.
Времени потратили «чуть больше», чем планировалось, но это совсем не от безделья. Просто хотелось как можно более полную и грамотную основу заложить. Плюс была проделана огромная работа с фронтом сайта, и это не только адаптивная верстка, но и полноценное JS-API, за что Сергею огромнейшее спасибо! Все сделанное во фронте — это Сергей. Я серверную часть программировал.
В общем, вот демо-ролик (демонстрация + два способа установки). А под катом детали.
Сразу ссылки на ролик с привязкой по времени:
Итак, вот неполный список изменений:
Полностью переработан весь движок. Обратная совместимость с 1.1.0 не подразумевается.
Добавлен компонент Billing. На этом модуле завязано все, что связано с заказами, оплатой и т.п.
Корзина перестала существовать отдельно. Теперь Корзина — это еще не оформленный Заказ (Order). Теперь даже не оформленные заказы хранятся в базе данных, что как минимум позволяет видеть кого что интересует, а так же определять реальный процент конверсии и выявлять возможные ошибки.
Компонент Basket (Корзина) остался, но почти все, что связано с самими заказами, перенесено в Billing. Basket и дальше останется отдельным модулем, а в Billing-е будет только необходимый минимум логики. Рассчет на то, что сам механизм заказа, оплаты и т.п. можно будет реализовывать в любых сторонних модулях, которые будут взаимодействовать с биллингом.
Добавлен и сверстан новый шаблон по умолчанию с использованием bootstrap. Много всяких аджаксовых плюшек и полноценное JS-API.
Добавлен табличный редактор документов.
Добавлено управление заказами.
Добавлен личный кабинет пользователя, регистрация, смена пароля, восстановление пароля и т.п.
Настроена регистрация через Login, смена/восстановление пароля и т.п.
Добавлен модуль modHybridAuth (авторизация через социальные сети). Пока четко проверены Twitter, Facebook и Google, но должны и другие работать.
Подключен сервис оплаты Robokassa.
Настроены политики безопасности:
Контент-менеджер;
Администратор магазина;
Менеджер магазина;
Продвинутый менеджер магазина.
Всякие вкусности, а так же планы на будущее.
Движок на самом деле разрабатывался добротно, просто еще не все появилось. Но есть главное — основа. И эту основу мы будем постепенно развивать, а всякий, кому чего-то не хватит, без особых проблем сможет добавить свое. Вот простой алгоритм, как этот магазин переделать под себя:
1. Разворачиваем эту сборку.
2. Делаем копии шаблонов (assets/components/modxsite/templates/default/ (публичная часть шаблона) и core/components/modxsite/templates/default/ (Смарти-шаблоны)). Называем шаблон каким-то своим именем.
3. Меняем название шаблона в настройке.
?
На самом деле можно было просто переименовать эти папки и настройку поменять :-) Но я так, описал полностью возможный механизм.
Все, у вас свое собственное оформление сайта. То есть пока еще только такой же шаблон, но вы его можете смело редактировать как хочется. Так вот, далее просто надо учесть, что у нас Смарти, а не просто сухие чанки, то есть в самих шаблонах можно менять логику отображения и работы сайта. А так же можно создавать свои процессоры и расширять имеющиеся. За счет этого вообще кардинально можно все изменить.
Но есть еще один огроменный фронт: новые модули для магазина. Мы закладываем основу так, чтобы можно было довольно легко добавить что-нибудь свое. Покажу один пример, правда он чисто для программистов.
Вот у нас есть оплата через робокассу, и стоит задача прикрутить еще какой-нибудь способ оплаты. Посмотрим, как это делается.
Вот это базовый процессор для любых типов оплаты: 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 строчек кода. Но в результате не только будет проведена оплата с учетом кто платил, через что, сколько и т.п., но и будет автоматически изменен статус заказа на Оплачен. И вот прикрутить еще какой-нибудь способ оплаты — это всего несколько десятков строк.
Вот пока на этом я прервусь. Скачивайте сборку, устанавливайте, изучайте, задавайте вопросы.