[modRetailCRM] - 2.6.10 - Большое обновление
Давненько я ничего не писал про этот компонент, хотя продолжаю выпускать обновления.
Пожалуй пора бы рассказать, чего нового происходит.
Как я посмотрю, RetailCRM становится все более популярной системой для управления бизнесом. И не удивительно. Ребята активно дорабатывают CRM, появляется все больше фичей и возможностей. Не дремлет и маркетинг. В общем на волне популярности растет и число установок modRetailCRM, равно как и обращений в техподдержку.
Тем для обращения в основном несколько:
Первая проблема (или не проблема, как посмотреть) — кастомизация компонента. Многие магазины имеют свои уникальные поля в заказах, системы лояльности, варианты управления базой клиентов и прочее и прочее. Всем хочется получить в CRM больше информации, чем это предусмотрено из коробки. Каждому удается помочь, благо само ядро RetailCRM тоже не стоит на месте и обновляется, привнося в компонент потенциал.
Я крайне благодарен за подобные обращения в техподдержку, именно благодаря вам компонент развивается и обрастает возможностями.
Вторая проблема — линейное развитие кода компонента. Долгое время весь код содержался в одном плагине, незаметно расширившись из сотни строк до тысячи. И проблема даже не в этом (хотя это тоже бардак и безответственность разработчика). Проблема в том, что доработав плагин клиенту под его индивидуальные нужды — приходилось отключать обновление, дабы не затереть изменения. Клиент терял возможность получить свежие возможности. И эта проблема наконец решена!
Представляю вам обновленную версию modRetailCRM с возможностью кастомизации без потери обновлений.
Идея основана на модульных принципах работы нашего любимого, единственного и незаменимого (как известный политик прямо) miniShop2.
Я вынес добрую половину кода из плагина в классы.
Добавлены классы
Итак, после установки modRetailCRM я хочу изменить логику отправки заказа в CRM. Что делаем.
Шаг 1.
Создаю новый php файл в каталоге
Называю файл custom_orders.php
Название файла и путь расположения не имеют значения и приведены для примера
Шаг 2
Открываю свежесозданный файл и начинаю заполнять
Заполняем системную настройку modretailcrm_custom_orders_class указывем имя кастомного класса и его расположение.
Я пока не делал специального инструмента для быстрого заполнения этой системной настройки, как это сделано в miniShop2, потому придется выполнить в консоли простенький скрипт следующего содержания
Шаг 4
Изменяю метод msOnCreateOrder, чтобы реализовать свою собственную дополнительную логику
Компонент за последние полгода был сильно переработан, включая расположение файлов внутри.
Многие возможности, хоть и проверены на боевых проектах пока носят эксперементальный характер.
Потому обновляя существующие проекты (тем более если вносили изменения в логику modRetailCRM) — вы делаете это на свой страх и риск. Если не уверены, если все и так работает — дважды подумайте. Возможно обновляться не стоит.
Всем тем кто приобрел компонент, я готов бесплатно помочь обновить его, и перенести вашу измененную логику работы (если вы переписывали плагин) в новый режим. Пишите в техподдержку — все решим. Главное убедитесь что покупка была осуществлена не позже чем год назад, так как техподдержка действует в течение года, после покупки.
Пожалуй пора бы рассказать, чего нового происходит.
Как я посмотрю, RetailCRM становится все более популярной системой для управления бизнесом. И не удивительно. Ребята активно дорабатывают CRM, появляется все больше фичей и возможностей. Не дремлет и маркетинг. В общем на волне популярности растет и число установок modRetailCRM, равно как и обращений в техподдержку.
Тем для обращения в основном несколько:
Первая проблема (или не проблема, как посмотреть) — кастомизация компонента. Многие магазины имеют свои уникальные поля в заказах, системы лояльности, варианты управления базой клиентов и прочее и прочее. Всем хочется получить в CRM больше информации, чем это предусмотрено из коробки. Каждому удается помочь, благо само ядро RetailCRM тоже не стоит на месте и обновляется, привнося в компонент потенциал.
Я крайне благодарен за подобные обращения в техподдержку, именно благодаря вам компонент развивается и обрастает возможностями.
Вторая проблема — линейное развитие кода компонента. Долгое время весь код содержался в одном плагине, незаметно расширившись из сотни строк до тысячи. И проблема даже не в этом (хотя это тоже бардак и безответственность разработчика). Проблема в том, что доработав плагин клиенту под его индивидуальные нужды — приходилось отключать обновление, дабы не затереть изменения. Клиент терял возможность получить свежие возможности. И эта проблема наконец решена!
Представляю вам обновленную версию modRetailCRM с возможностью кастомизации без потери обновлений.
Идея основана на модульных принципах работы нашего любимого, единственного и незаменимого (как известный политик прямо) miniShop2.
Я вынес добрую половину кода из плагина в классы.
Добавлены классы
- Orders (управляет сбором и передачей информации о заказе),
- Customers (сбор и передача информации о клиенте).
Дальше пойдут практические примеры.
Итак, после установки modRetailCRM я хочу изменить логику отправки заказа в CRM. Что делаем.
Шаг 1.
Создаю новый php файл в каталоге
/core/components/modretailcrm/model/modretailcrm/
Называю файл custom_orders.php
Название файла и путь расположения не имеют значения и приведены для примера
Шаг 2
Открываю свежесозданный файл и начинаю заполнять
<?php
//Подключаю основной класс управления заказами. Мы будем его наследовать
if(!class_exists('ordersInterface')){
require_once dirname(__FILE__) . '/orders.class.php';
}
// Объявляю свой класс. Он должен наследовать родительский класс и реализовывать определенный интерфейс
class Custom_orders extends Orders implements ordersInterface {
//Интерфейс ordersInterface требует чтобы в классе обязательно был метод msOnCreateOrder
public function msOnCreateOrder($msOrder)
{
//Для начала можно вызвать родительский метод и ничего больше не делать.
parent::msOnCreateOrder($msOrder);
}
}
Шаг 3Заполняем системную настройку modretailcrm_custom_orders_class указывем имя кастомного класса и его расположение.
Я пока не делал специального инструмента для быстрого заполнения этой системной настройки, как это сделано в miniShop2, потому придется выполнить в консоли простенький скрипт следующего содержания
$value = array(
//Имя класса
'Custom_orders',
//Путь к классу, включая имя файла
MODX_CORE_PATH . 'components/modretailcrm/model/modretailcrm/custom_orders.php'
);
$setting = $modx->getObject('modSystemSetting', array('key' => 'modretailcrm_custom_orders_class'));
$setting->set('value', json_encode($value));
$setting->save();
После выполнения этого кода, по идее мы уже задействовали свой собственный класс, который можем как хотим кастомизировать. При этом сам компонент будет без проблем обновляться и поддерживать в актуальном состоянии главный класс приложения, вспомогательные классы и скрипты. Шаг 4
Изменяю метод msOnCreateOrder, чтобы реализовать свою собственную дополнительную логику
<?php
//Подключаю основной класс управления заказами. Мы будем его наследовать
if(!class_exists('ordersInterface')){
require_once dirname(__FILE__) . '/orders.class.php';
}
// Объявляю свой класс. Он должен наследовать родительский класс и реализовывать определенный интерфейс
class Custom_orders extends Orders implements ordersInterface {
//Интерфейс ordersInterface требует чтобы в классе обязательно был метод msOnCreateOrder
public function msOnCreateOrder($msOrder)
//Главный метод пока не трогаю
{
//Для начала можно вызвать родительский метод и ничего больше не делать.
parent::msOnCreateOrder($msOrder);
}
//Переписываю метод сбора данных о заказе, добавляю туда информацию о свежевыпеченном msPromoCode2
/**
* @param xPDOObject $msOrder
* @return mixed
*/
public function orderCombine($msOrder)
{
$pdo =& $this->pdo;
$order = $msOrder->toArray();
$order['address'] = $pdo->getArray('msOrderAddress', array('id' => $order['address']), array('sortby' => 'id'));
$order['delivery'] = $pdo->getArray('msDelivery', array('id' => $order['delivery']), array('sortby' => 'id'));
$order['payment'] = $pdo->getArray('msPayment', array('id' => $order['payment']), array('sortby' => 'id'));
$order['profile'] = $pdo->getArray('modUserProfile', array('internalKey' => $order['user_id']), array('sortby' => 'id'));
$order['products'] = $pdo->getCollection('msOrderProduct', array('order_id' => $order['id']), array('sortby' => 'id'));
// Теперь я могу работать с информацией о примененному к заказу промокоду
$order['sale'] = $pdo->getArray('mspc2CouponOrder', array('order' => $order['id']));
return $order;
}
}
Внимание!
Компонент за последние полгода был сильно переработан, включая расположение файлов внутри.
Многие возможности, хоть и проверены на боевых проектах пока носят эксперементальный характер.
Потому обновляя существующие проекты (тем более если вносили изменения в логику modRetailCRM) — вы делаете это на свой страх и риск. Если не уверены, если все и так работает — дважды подумайте. Возможно обновляться не стоит.
Всем тем кто приобрел компонент, я готов бесплатно помочь обновить его, и перенести вашу измененную логику работы (если вы переписывали плагин) в новый режим. Пишите в техподдержку — все решим. Главное убедитесь что покупка была осуществлена не позже чем год назад, так как техподдержка действует в течение года, после покупки.
Поблагодарить автора
Отправить деньги
Комментарии: 3
Николай, приветствую! Вопрос по возможностям модуля.
Если в CRM меняем остатки товара, то на сайте в модификациях msOptionsPrice они изменятся? Такая синхронизация поддерживается?
Если в CRM меняем остатки товара, то на сайте в модификациях msOptionsPrice они изменятся? Такая синхронизация поддерживается?
Здравствуйте. Нет такого не предусмотрено.
понял. спасибо за ответ!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.