Николай Савин

Николай Савин

С нами с 01 января 1970; Место в рейтинге пользователей: #2
Николай Савин
06 мая 2017, 20:42
+2
Готова интеграция с обсуждаемой RetailCRM
Николай Савин
06 мая 2017, 09:10
+1
<?php
if (!$RetailCrm = $modx->getService('RetailCrm','modretailcrm',MODX_CORE_PATH.'components/modretailcrm/model/modretailcrm/')) {
    $modx->log(1, '[RetailCrm] - Not found class RetailCrm');
    return;
} 
$site = $modx->getOption('modretailcrm_siteCode');
/** @var modX $modx */
switch ($modx->event->name) {
   
    case 'msOnCreateOrder':
        $Address = $msOrder->getOne('Address');
        $orderData = array();
        $orderData['customer']['externalId'] = $Address->get('user_id');
        //Отправляем данные клиента
        if ($profile = $modx->getObject('modUserProfile', $Address->get('user_id'))) {
            $customer = array();
            $customer['externalId'] =  $Address->get('user_id');
            $customer['firstName'] = $profile->fullname;
            $customer['email'] = $profile->email;
            if(!empty($profile->phone)){
                $customer['phones'][]['number'] = $profile->phone;
            }
            if(!empty($profile->mobilephone)){
                $customer['phones'][]['number'] = $profile->mobilephone;
            }
            $response = $RetailCrm->customersCreate($customer, $site);  
        }
        
        $orderData['externalId'] = $Address->get('id');
        $orderData['firstName'] = $Address->get('receiver');
        $orderData['phone'] = $Address->get('phone');
        $orderData['email'] = $Address->get('email');
        
        $Products = $msOrder->getMany('Products');
        
        $items = array();
        $key = 0;
        foreach ($Products as $pr) {
            $options = $pr->toArray();
            $orderData['items'][$key]['initialPrice'] = $pr->get('cost');
            $orderData['items'][$key]['purchasePrice'] = $pr->get('cost');
            $orderData['items'][$key]['productName'] = $pr->get('name');
            $orderData['items'][$key]['quantity'] = $pr->get('count');
            $orderData['items'][$key]['offer']['externalId'] = $pr->get('id');
            $key ++;
		}
        //Указываем какие поля заполняются в корзине
        $fields = array(
            'index' => 'Индекс', 
            'country' => 'Страна', 
            'region' => 'Регион', 
            'city' => 'Город', 
            'metro' => 'Метро', 
            'street' => 'Улица', 
            'building' => 'Дом', 
            'room' => 'Квартира\офис',
            'comment' => 'Комментарий к адресу'
        );
        $address = '';
        foreach($fields as $field=>$comment){
            if(!empty($Address->get($field))){
                $address .= $comment.':'.$Address->get($field).' ';
                $orderData['delivery']['address'][$field] = $Address->get($field);
            }
        }
        $orderData['delivery']['address']['text'] = $address;
//Оплата и доставка довольно индивидуальны
//Если надо заполнять данные о сервисе и методе доставки заполняем поля раздела order[delivery] 
	//Данные об оплате заполняются в order[paymentType] order[paymentStatus] order[paymentDetail]
        $response = $RetailCrm->ordersCreate($orderData, $site);
      
        break;
}
Николай Савин
05 мая 2017, 15:19
-1
Здравствуйте. Если стоимость обсуждаема — готов обсудить. Навскидку 5000 руб.
Контакты в профиле.
Николай Савин
04 мая 2017, 12:26
+2
По переходу это совсем просто. Добавить GET параметр в адресную строку, через JS отловить его и запустить событие $.fancybox.open (или как там по документации)
По клику тоже думаю несложно. Все так же через JS. Отловить событие вызова fancybox (в документации есть события), и через callback из документации добавить нужный параметр в строку. Id можно отловить через data атрибуты
Николай Савин
24 апреля 2017, 14:53
0
Имя, Email и ссылка на фото или на профиль сохраняются в поле properties самого комментария.
Далее при помощи записанного Email можно определять автора комментария для каких либо действий в будущем.
Ну а задача проекта, насколько я понимаю просто скрыть форму комментрирования и показывать ее, тем кто в сессию добавил данные о себе из соц сети.
Николай Савин
24 апреля 2017, 00:35
+1
Интересное решение. Пока не знаю где применить, но жопой чую уверен, что пригодится и не раз.
P.S. Ссылка на Git не работает.
Николай Савин
24 апреля 2017, 00:31
0
Лучшее спасибо — ваш плюсик в рейтинге статьи.
Шучу — деньги конечно. Но плюсик тоже приятно.
Николай Савин
22 апреля 2017, 18:32
+1
Ну может. Я не вникал и аналогов не искал.
Появилась задача — сделал — рассказал как.
Спасибо за наводку.
Николай Савин
22 апреля 2017, 18:19
-3
Нет.
1. Там старая версия Api
2. Там все равно нужно координаты указывать в TV
Николай Савин
19 апреля 2017, 20:29
+9
Я делал интеграцию для конкретного интернет-магазина.
При создании заказа — данные отправляются в CRM. Там менеджер уже видит всю информацию по заказчику и товарным позициям. Может позвонить, уточнить, подкорректировать карточку заказа и карточку клиента. Там же можно управлять позициями и видеть остатки на складе.
Там же можно оформить заказ на склад, оформить дозаказ недостающего товара.
К примеру можно объединить заказ с другими. Система автоматически показывает совпадения по email или номеру телефона. Можно управлять системой лояльности и бонусной системой. В общем нормальная такая система управления взаимоотношениями с клиентом.

При онлайн оплате на сайте — данный факт так же фиксируется и отправляется в CRM.
Я честно говоря данную CRM впервые вижу и не знаю, насколько она популярна и востребована.
API мне понравился. Очень детально документировано все + примеры. Есть какие то модули готовые, но мне было проще и интереснее разобраться именно через API, дабы знать возможности системы.

Посмотрим в этой теме, если будет реальный интерес — попробую собрать пакет.
Николай Савин
19 апреля 2017, 18:58
2
+6
Интернет-магазин — это по сути онлайн-витрина, а не средство управления складом, взаимоотношениями с клиентами и прочим.
Для ваших целей Вам нужно использовать CRM систему. А конкретно — RetailCRM. Там вы можете делать уже что угодно.
Данная система прекрасно интегрируется с MODX через API.
Modx передает первоначальный заказ, и профиль пользователя, в сам магазин даже заходить не надо для обработки заказа.
А дальше менеджер уже в CRM, где ему положено находиться обрабатывает заказ, меняет позиции, управляет доставкой и оплатой, передает в ответственные отделы и так далее.
Николай Савин
18 апреля 2017, 21:15
0
Публикуете форму на странице, делаете ее скрытой через CSS.
<div class="hiddenForm" style="display:none>
	<form id="myForm"></form>
</div>
Далее в любом месте на этой же странице публикуем ссылку, в которой ссылаемся на данную форму. Остальное fancybox сделает сам.
<a href="#myForm" class=«fancybox>Открыть форму

Если вы хотите вызвать форму, которой нет на странице — создаете пустую страницу, там выводите форму.
Далее в ссылке просто ссылаетесь на нее
<a href=»formpage.html" class=«fancybox>Открыть форму
Николай Савин
18 апреля 2017, 21:10
+2
Уже делал интеграцию с retailCRM для минишоп (частный случай для конкретного магазина).
Есть ли необходимость данного компонента? Голосуйте за этот комментарией, посмотрю сколько человек вообще хотя бы знакомы с RetailCRM.
Чет я как то сомневаюсь в ее популярности, хотя не могу не признать — очень удобная система и API хороший, хотя и с явными недочетами.
Николай Савин
18 апреля 2017, 21:08
+1
Пилю интеграцию с сервисом SendPulse.
Кто не знает — данный сервис предоставляет мощности Email рассылки через собственные белые сервера.
Кроме того есть реализация SMS рассылки и Push уведомлений.
Будет ли востребован подобный компонент?
Николай Савин
18 апреля 2017, 20:11
0
Я так понимаю помимо карточек продуктов на modstore, нужно еще переводить соответствующую документацию на docs.modx.pro?
Насчет скриншотов не совсем понятно. Беглый просмотр англоязычного контента — показал, что скриншоты на русском.
Николай Савин
18 апреля 2017, 19:21
0
CSS и JS вполне себе нормально минифицируются
Николай Савин
18 апреля 2017, 14:43
+2
А можно перевод в стиле персонажа с картинки, но за те же деньги?
Николай Савин
18 апреля 2017, 09:20
0
Я сказал про НЕЛЬЗЯ, условно. Можно конечно, но это все велосипедно-костыльные труды. При большом количестве информации производительность крайне низкая из-за того, что все хранится в json строках. Это нужно сначала выбрать ВСЕ данные, декодировать их, собрать в единый массив. Ну а дальше конечно можно уже крутить этим массивом как хочешь.
Если таких таблиц тысячи, то нужно немалое количество ОЗУ, чтобы все это обработать.