Fi1osof

Fi1osof

С нами с 05 мая 2014; Место в рейтинге пользователей: #10
Fi1osof
10 апреля 2017, 21:47
0
Михаил, вот еще информация: создание заметок по контактам и сделкам. В контакте результат выглядит так:

Возможность создавать заметки особенно полезна, когда с сайта передаются не только простые поля (типа емейл, имя и т.п.), а какие-нибудь данные из более сложных форм (произвольные текстовые сообщения, информация по товару или типа того).

Создание События:
if (!$amo = $modx->getService('amocrm', 'amoCRM', $modx->getOption('amocrm_core_path', null,
        $modx->getOption('core_path') . 'components/amocrm/') . 'model/amocrm/', array())
) {
    return 'Could not load amoCRM class!';
}

if($amo->auth()){
    
    $note = array(
        'element_type'          => 1,  
        'element_id'   => 123456789,  
        'note_type'   => 4,
        'text'   => "gfgggggff",
    );
    
    $data = array('request' => array('notes' => array()));
    $data['request']['notes']['add'] = array($note);
    
    $result = $amo->sendRequest('/private/api/v2/json/notes/set', $data);
    
    print_r($result);
}
else{
    print "Error auth";
}
element_type: 1 — контакт, 2 — сделка.
element_id: id объекта (в нашем случае аккаунта).
note_type: 4 — это произвольная заметка по контакту.
Полный список типов здесь: developers.amocrm.ru/rest_api/notes_type.php

Получение всех Событий по контакту:
if (!$amo = $modx->getService('amocrm', 'amoCRM', $modx->getOption('amocrm_core_path', null,
        $modx->getOption('core_path') . 'components/amocrm/') . 'model/amocrm/', array())
) {
    return 'Could not load amoCRM class!';
}

if($amo->auth()){
    
    $data = array(
        'type'          => 'contact',
        'element_id'   => 123456789,
    );
    
    $result = $amo->sendRequest('/private/api/v2/json/notes/list', $data, "GET");
    
    print_r($result);
}
else{
    print "Error auth";
}
Fi1osof
10 апреля 2017, 03:36
+1
Не за что.

addContext() — где такой метод? Мб, addContact()?
Да, все верно, моя ошибка.
Fi1osof
09 апреля 2017, 23:15
+1
Михаил, вот такой момент: в методе prepareContact() у тебя жестко прописано $default_fields = array('name'); На самом же деле дефолтных полей значительно больше developers.amocrm.ru/rest_api/contacts_set.php
Особенно важно поле tags. Если прописать хотя бы вот так $default_fields = array('name','tags'), уже получается создавать контакты с тэгами.
Пока же пришлось делать так:
if($amo->auth()){
    
    $contact = $amo->prepareContact(array(
        'name' => "Имя", 
        'email'     => "email@...", 
        'phone'     => "777777777",
    ));
    
    $contact['tags'] = 'RU';
    
    $data = array('request' => array('contacts' => array()));
    $data['request']['contacts']['add'] = array($contact);
    
    $result = $amo->sendRequest('/private/api/v2/json/contacts/set', $data);
}
И вот здесь всплывает еще один момент: хорошо было бы иметь возможность в метод addContext() передавать объект контакта, чтобы не приходилось формировать запрос.

А в целом все работает, контакты создаются, список контактов из АМО получается забрать и прочий необходимый функционал есть. Спасибо за компонент! Пригодился.
Fi1osof
08 апреля 2017, 21:58
0
Константин, вот прям одним комментарием выше спрашивали про это. На скриншотах не cacheRegenerator, а modMonitor. С помощью монитора я показывал результат работы компонента.

Добавил уточнение в топик.
Fi1osof
16 марта 2017, 17:44
0
Но на хрен использовать MODx?
Не все так просто. Здесь вопросы механизма политик безопасности, ORM и т.п. Да, все это есть в node-компонентах, но это вопрос типа «почему все пишут на разных языках, а не на одном каком-то самом крутом и т.п.». Так повелось, что я с MODX (и php) познакомился раньше, чем с node-js, поэтому большинство моих готовых решений написано на MODX. И я не готов прям сейчас все портировать на JS. И я не такой эксперт в JS, как в MODX. Если в MODX я могу ответить практически на любой вопрос, то в JS я еще очень далек от эксперта. И именно поэтому я ввожу ноду постепенно, а основная логика работает на MODX. Я вам более того скажу: я осваиваю сейчас разработку под андроид, и хотя мне это нравится, я не стану выбирать или-или. Для отдельных задач есть свои инструменты. Где-то js/php, а где-то java. И не думаю, что я даже в ближайшие два года смогу от MODX-а отказаться. А с чем вам работать — это так же ваше дело.
Fi1osof
10 марта 2017, 00:48
0
Не за что.
Максим ниже показал как.
Fi1osof
09 марта 2017, 23:43
+1
Уточните, вы спрашиваете как это сделать средствами switchUser? Или в принципе?
Если switchUser, то отвечу, что пока он этого не умеет делать, к сожалению. Может позже добавлю эту функцию. Пока же можете сделать копию текущего плагина, старый отключить, а в новом перечислить нужные контексты в конструкции $modx->user->addSessionContext($modx->context->key); типа
$modx->user->addSessionContext('web');
$modx->user->addSessionContext('web2');
$modx->user->addSessionContext('web3');
Если контекстов много, то конечно же можно получить список контекстов запросом.
Fi1osof
09 марта 2017, 20:07
0
modxclub.ru/ у нас крутится теперь на MODX + node.js. Но почти полный список технологий такой: webpack, redux, material-ui, react, react-dom-server, websocket, express, draft-js, prismjs.
Выглядит сайт пока не очень, но под капотом там очень серьезно получается.
Наиболее интересные моменты:
1. Сайт отображается без JS ровно так же, как и с JS (отрисовка происходит на стороне сервера).
2. По тестам гугла 94/100 баллов (картинки не оптимизировали, и ответ от сервера пока не очень).

3. Отдельная песня — работа сервера. Запрос идет не сразу на MODX-сайт, а проксируется нгинксом на node.js. Тот, если надо, отправляет запрос на MODX на отдельный порт, получает ответ от MODX-а, обрабатывает его (с отрисовкой на сервере) и возвращает конечный код. Сам же ответ от MODX-а идет не в HTML, а JSON (для этого переопределен modResponse-класс). Вот так примерно это выглядит:

Шаблонизация обеспечивается material-ui
Но самая гордость — это редактор на базе draft-js. На него особенно много времени ушло. Это потрясающая штука! Фишка в том, что все видимые сообщения — это все отдельные редакторы, просто в режиме readonly. И все эти сообщения отрисовываются из исходных данных в формате JSON. В одно сообщение можно закинуть сколько угодно различных информационных блоков, каждый из которых потом редактироваться может как самостоятельная сущность. К примеру здесь мы имеем различные блоки кода (с самостоятельными режимами подсветки).

Если кликнуть Редактировать, то редактор просто переходит в состояние readonly=false и становится полноценным редактором, без подгрузки каких-либо данных с сервера. И сразу видно как оно будет выглядеть в конечном итоге, и после сохранения оно будет выглядеть ровно так же, как и в режиме редактирования.

В общем, при желании можно много всего навернуть, но, все это реально очень сложно. Поверьте на слово. Наша команда два месяца с головой была в изучении всего этого, и только сейчас можно сказать что мы боле менее что-то освоили. Использовать это на мелких сайтах — очень сомнительно. Сложность проекта будет расти сильно, риски тоже, а вот реальная отдача не особо. Но для сервисов можно действительно крутые вещи получать.
Fi1osof
20 февраля 2017, 13:51
0
Я не просил сюда писать вопросы. Я сказал, что вопросы писать надо сюда. Но там же и написал
В ближайшие несколько дней вопросы можно не задавать, я занят.
Fi1osof
10 февраля 2017, 07:28
0
Игорь, пока нет. Все сервера наших клиентов мы ведем сами, обходимся без панели. Но количество клиентов растет, так что скоро будем просто вынуждены ее сделать, как минимум для себя))
Fi1osof
01 февраля 2017, 06:01
+1
Не за что.
Юрий, я не знаю такого курса. Но информации много и здесь, и у нас на сайте modxclub.ru, и на других ресурсах. Другое дело, что этой информации очень много, и все равно только в процессе работы будет приходить необходимый опыт. Я этот свой комментарий оставил просто для того, чтобы видели, что есть и другие рабочие механизмы в MODX, которые лучше подходят для реализации подобных задач, чтобы знали в сторону чего копать. Но четкого сценария нет, надо в любом случае изучать все это.
Fi1osof
31 января 2017, 01:35
+1
Синхронизация всего со всем (документы, ТВшки и прочее) в разных контекстах — дикая заморочка. Потом начнется где-то в одном документе отредактировал, а в других не поменялось и т.д. и т.п. Да и при реальном каталоге в 10 000 документов при 10 контекстах иметь 100 000 документов — не очень интересно.
Прочитайте вот этот комментарий, может идеи возникнут.

P.S. Я бы так не стал делать, слишком много тонких моментов.
Fi1osof
26 января 2017, 00:13
0
Не надейтесь. Просто напишите лучше.
Fi1osof
25 января 2017, 21:44
+1
На чём написаны ваши сайты с подобной архитектурой?
Не поверите, на MODX (ShopModxBox).
Но мы ничего не знаем что там у них на стороне 1С. Знаем только, что там работают 1С-ники в штате, который разрабатывают необходимое API, чтобы мы со стороны сайта в любой момент могли подключиться и получить нужную информацию (или передать инофрмацию).
Fi1osof
25 января 2017, 20:42
0
Спасибо, поправил.
Fi1osof
25 января 2017, 20:35
+1
Здесь больше вопрос в 1Ске — она сама должна слать сразу информацию на сайт сразу при изменении остатков или цен, а не выгружать каталог по расписанию, что будет приводить к неточностям в промежутках. И это на самом деле мало относится к рассматриваемым здесь технологиям, так как даже если она будет просто слать запросы обычные (только сразу, а не с задержкой), то можно сделать так, как вы думаете.
Но на самом деле у нас есть пара других кейсов, когда на сайте вообще цены и остатки по сути не хранятся. На любое взаимодействие с товаром информация по остаткам и т.п. запрашивается в 1С, и заказы отправляются в 1С. Сайт здесь выступает просто как веб-морда. И это опять-таки не относится к рассматриваемым здесь технологиями, хотя решает поднятые вами вопросы.
Fi1osof
25 января 2017, 20:20
0
Ты что, обиделся что ли? Не надо, не расстраивайся. Эмоции тут не при чем совсем.

1) Ты мне писал «У тебя только GET запросы, а когда будут другие?». Теперь посмотри на либу которую ты используешь, я там только GET и увидел.
ОК. +1.

2) Твой клиент не работает с socketio и не будет. Для меня главное чтоб socketio понимал входящие сообщения, у него эвент и дата разделены, именно поэтому там где-то стояло 42/. Почему socketio? Да потому что это фреймоврк для сокетов, с серверной и фронтэнд частью.
Серьезно?


Пришлось, правда, покопаться, в основном с установкой твоих компонентов. Почитай мануал по установке у себя и сравни с этим: npm install modmonitor

Кстати, почему ты у себя в документации лукавишь? Пишешь
1. Отправка эвента в nodejs из modx
case 'msOnCreateOrder':
$modNodejs = $modx->getService('modnodejs');
	$modNodejs->emit('msOnCreateOrder', $msOrder->toArray());
	break;
А на самом деле должно быть
case 'msOnCreateOrder':
	$modNodejs = $modx->getService('modnodejs', 'modNodejs', $modx->getOption('core_path') .  'components/modnodejs/model/modnodejs/');
	$modNodejs->emit('msOnCreateOrder', $msOrder->toArray());
	break;
У тебя даже в плагине так прописано.
Видимо тебя фатальные ошибки у клиентов не волнуют.

Почему socketio? Да потому что это фреймоврк для сокетов, с серверной и фронтэнд частью.
Для сокетов вполне годится ws. Под уведомления во всплывашках alertifyjs. Тебе веб-морду надо какую-то надо накидать? — express в помощь. И это будет, вполне возможно, более гибкое решение, чем socket.io. Но это так, к слову. Конечно же каждый сам для себя выбирает инструмент.

поэтому добавлю 3й параметр хоста в ->emit($action, $data, $host);
Вот. Уже лучше становится. А если ты добавишь возможность слать запрос вообще на любой адрес, а не только на /socket.io/, то сможешь уже слать запросы куда угодно, а не только на socket.io. Не понимаю почему ты этому так сильно противишься.

Перестань уже при каждой возможности тыкать в мою тему, хочешь помочь — пиши\предлагай на гитхабе и\или личке. Все что я увидел за 2 дня: «Никита все очень плохо, я не могу сделать систему мониторинга для моего компонента из твоего компонента, надо тебе это доработать.» и «Всем привет, Никита не доработал свой компонент, поэтому я сделал ЛУЧШЕ и он будет работать с моим компонентом, да и возможностей у меня больше». Уже смешно.
Еще раз: не обижайся ты так. Не спорить надо было, а дорабатывать свой функционал. Тогда бы я сказал не «к сожалению, он не умеет работать с посторонними ресурсами», а «для отправки запросов можно воспользоваться компонентом modNodeJS», и скорее всего вообще не стал бы оформлять свой этот компонент. А бегать за тобой и упрашивать тебя доработать это все дело, да еще так, чтобы не обидеть тебя — вообще не улыбается. И, ты пишешь на публичном форуме. Будь готов к публичной обратной связи. За какие каврижки я должен тебя в личке консультировать (а то и слать готовые исправления), чтобы твой продукт стал лучше. Он ТВОЙ? Вот и делай его лучше. Я итак тебе много чего полезного сказал, а что в ответ получил? Минуса в карму. Не вынуждай меня переходить на личную тему, мне это не интересно. Мне интересна функциональность. Знал бы, что ты такой обидчивый, ничего бы тебе не писал. Но упомянуть твой компонент обязан был, потому что знаешь что мне сказали бы все? «А что это ты новый компонент запилил и выложил, если уже есть аналог». И все равно к этому пришли бы. Прекращай ныть, серьезно.

Ну и самое главное: у меня готовое бесплатное решение для реалтайма (фронт и бэк), у тебя просто отправлялка которая на данный момент работает только с твоим не бесплатным компонентом.
Ты сделай опрос. Как много людей смогло воспользоваться твоим готовым решением. У кого в реальности это заработало? Оформи хотя бы нормальный сборщик, чтобы это действительно в одну строчку устанавливалось, тогда будешь говорить. Пока что это «готовое решение» только для тебя. И под каждый чих ты будешь такие готовые решения выпускать. Потому что ты решение делаешь, а не технологию. В общем, время покажет. Мне пофигу на всю эту конкуренцию, я делаю свое, так что особо меряться не собираюсь. Но рассчитывал, что параллельно еще кто-то подобные технологии будет растить, но вижу сейчас не технологии, а детские обиды.
Fi1osof
25 января 2017, 17:24
0
А я пока сижу и отлавливаю ошибки, которые ранее не отслеживались.