[msVKMarket] или как я знакомился с modx


Надо признать, что с MODX я знаком уже года два наверное, ну как знаком… верстаю и собираю сайты различного типа сложности, но в основном типовые интернет-магазины. С концепцией программирования я знаком чуть по больше. Но совсем недавно меня таки клюнул петух и я решил, что пора что-то менять в своей жизни и стоит повышать скил, выходить на новый уровень одним словом. Для того чтобы погрузиться в материал по плотнее я придумать себе задачу среднего уровня сложности и попробовал ее реализовать. В итоге получился компонент который позволяет:
— выгружать товары в вк, в одну или несколько групп включая выбранные подборки этих групп
— создавать/редактировать/удалять подборки в различных группах
— есть различные режимы синхронизации, например можно исключить изображение из уже синхронизированных позиций, что позволит не учитывать задержку
— формирования описания с учетом различных параметров товара, типа цвет/размер/артикул/описание/ и т.д.
— можно синхронизировать все сразу, отдельно по категориям или каждую позицию по отдельности
— ну и еще по мелочи

Под катом скриншотики, описание и парочка интересных моментов с которыми я столкнулся.
Тут происходит подключение групп и управление подборками к данным группам:



Последняя вкладка ничем не примечательно, там просто краткая инструкция по созданию vk приложения и получению токена.
Управление процессом синхронизаций происходит тут:

Есть два режима синхронизации «быстрая» и «подробная». При быстром режиме? ранее синхронизируемые позиции просто переобновяться в тех группах в которых они состояли. Если позиция ранее не синхронизировалась, то она будет синхронизирована в группу по умолчанию (задается в системных настройках). При подробном режиме можно выбрать группы и подборки в которые нужно синхронизировать позиции, если она ранее в ней состояла, то она просто обновиться, если-же не состояла, то просто добавиться.

Процесс синхронизации:

Так-же можно посмотреть в каких группах и подборках состоит та или иная позиция.

Приоритет выбора синхронизации немного специфичен. Первым делом синхронизируются только выделенные позиции из таблицы, если выделенных позиций нет, то проверяем выбраны ли категории в дереве ресурсов, если да, то работаем только с позициями выбранных разделов. Ну а если нет выделенных позиций в таблице или дереве ресурсов, то синхронизироваться будут все позиции минишопа.
Список настроек:
  • Можно задать одну или несколько групп по умолчанию, перечислив их id через запятую.
  • Статус по умолчанию для ранее не синхронизированных позиций. Т.е. если позиция ранее не синхронизировалась и статус данной опции установлен в false, то ничего не произойдет.
  • Задержка в миллисекундах, нужно при загрузки нового изображения в вк
  • Описание — json массив который будет формировать описание. Например из этого {«Производитель»: «vendor.name»,«Артикул»: «article», «Цвет»: «color», «Размер»: «size», «Описание»:«content»}, получиться такое:
    Производитель: vendor 2
    Артикул: arе555
    Цвет: edit, black, color3, color1
    Размер: m, l, x, xl
    Описание: Некое описание к данной позиции 
    
    Ссылка на позицию: http://sitename.ru/category/test-1.html
  • Ссылка — формировать ли ссылку на позицию в конце описания
  • Текст к описанию ссылки — по умолчанию «Ссылка на позицию:»
  • Изображения при обновлении. Если позиция ранее синхронизировалась, то изображения данной позиции не будут синхронизированы. Это позволит ускорить процесс, так как не будет применяться задержка. Кстати если нет картинки, по подгружается картинка по умолчанию, если картинка меньше 400х400 то обрабатывается при помощи phpthumb
  • Общая синхронизация — данная опция отрабатывается обычным плагином на onDocFromSave, если она активна, то плагин обновляет позицию в состоящих группах.
Также по невнимательности я пропустил еще пару пунктов, которые в ближайшее время будут реализованы… Загрузка изображения к подборке и выбор категории из списка vk (мужское/женское и т.д.).
В скором времени подмалофечу, упакую, и дам линк.
На этом пожалуй с описанием все.

Что мне показалось интересным.
Для человека начинающего вникать в modx, интересного было достаточно много, от extjs и механизмами работы процессоров до банальных лексиконов. До этого момента с extjs я был не знаком, делая выводы по некоторым сообщениям в различных топиках, я думал, что это будет невыносимо сложно и цвет моего ануса будет таким-же красным как и пламя в аду. Сложности конечно были, но связано это было с тем, что я толком не понимал как это работает и начал понимать только в самом конце.
Кстати одна из самых интересных задач состояла в реализации пошагового выполнения. Я хз как ее делать правильно, отпишите в комментариях если знаете как. Но я делал ее так:
I) отправляю на сервер весь список с id`шками позиций которые надо синхронизировать, начальный шаг
...
baseParams: {
	id: ids,
	step: 0,
},
...
II) обрабатываю на сервере и возвращаю обратно
III) убираю первый элемент, увеличиваю шаг и снова отдаю на сервер
...
updatQuery: function(){ 
	var step 	 = this.baseParams.step;
	var arrId  	 = this.baseParams.id;
	var arrSplit = arrId.split(',');
	arrSplit.shift();
	this.baseParams.id = arrSplit.join(',');
	this.baseParams.step = step+1;
},
...
При этом сервер будет возвращать $continue = true и продолжать работать, пока this.baseParams.id не станет пустой. Конечно-же минусы тут очевидны. Например если 1 позиция состоит в 20+ группах и надо обновиться в быстром режиме с учетом изображения этой позиции, то тут в таймиинг конечно никак не попасть. Это не совсем верная тактика, но пока ничего лучше я не придумал, точнее придумал… но это уже совсем другая история.

Что получил в итоге?
На самом деле это был действительно интересный опыт, который поменял мое отношение к MODX и понимании того куда двигаться дальше. Это дало пинок и в итоге я:
1) начал изучать php, понял концепцию работы с классами и функциями, так же понял, что такое полиморфизм/инкапсуляция/наследование/монитор, правда не с первого раза и не в самом начале этого процесса. Но все-же…
2) понял концепцию работы с extjs, подтянул знания js в целом
3) понял принципы работы компонентов в MODX
4) ну и жирный плюс в том, что я узнал много нового о самом MODX
5) сделал вывод, что разрабатывать лучше все таки в ide. Жаль только, что эти выводы я сделал буквально вчера, посидев перед этим 1,5 дня в phpstorm. Думаю еслиб я изначально купил оперативки для ноута и началбы разработку с phpstorm, то сэкономилбы просто кучу времени.

Сейчас основной задачей, поставил для себя написание не просто рабочего кода, но красивого еба читабеолного рабочего кода. А это на самом деле не так просто!
Если у вас есть интересные идеи для новых компонентов которых вам не хватает и которые помоглибы мне еще глубже вникнуть в экосистему MODX, то былоб очень интересно услышать их.
09 января 2018, 18:29    srs   
10    370 +17

Комментарии (23)

  1. Василий Столейков 09 января 2018, 19:24 # +1
    Здорово!
    Спасибо за компонент и за историю его создания!
    Компонент планируется заливать в ModStore?
    1. srs 09 января 2018, 21:41 # +1
      Планировал, но насколько я понял там уже есть аналог. Тем более коммерческий, былоб не красиво с моей стороны становиться «конкурентом». Скорее всего просто линк на github кину да и все=)
      Хотя конечно былоб удобней устанавливать его с ModStore.
      1. Василий Столейков 09 января 2018, 21:46 # 0
        Действительно было бы удобно с репозитория его качать!
        Может хотя бы в родной репозиторий modx.com получится его закинуть?
        1. srs 09 января 2018, 22:08 # +2
          Да кстати, можно и туда. Так как новогодние праздники кончились, допилю пару функций наведу красоту и максимум через пару недель залью.
        2. Александр 18 января 2018, 11:12 # 0
          Привет. а где компонент можно взять поюзать?

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

          и напиши пожалуйста мне в скайп: sandro.aa13))
          1. srs 18 января 2018, 11:27 # +1
            Привет, в субботу/воскресенье кину ссылку. Сейчас сильный завал на основной работе… ухожу рано, прихожу очень поздно, времени совсем нет(
            К сожалению у меня нет скайпа, но ваше сообщение увидел, вечером отпишу на почту)
            1. Александр 18 января 2018, 11:44 # 0
              укажи тогда контакты в профиле))
      2. Михаил 09 января 2018, 19:56 # +2
        Вот почему люди пишут отличные компоненты, а я пишу говно )))))))))))))
        1. Василий Столейков 09 января 2018, 20:22 # +1
          Наверное потому что люди не говорят о себе так как ты. Самонастройка…
          1. Василий Наумкин 09 января 2018, 20:37 # 0
            Потому что надо писать свои компоненты, а не самоуничижительные комментарии к чужим.
            1. Михаил 09 января 2018, 20:38 # +1
              да это сарказм был )))
            2. Николай Савин 09 января 2018, 21:11 # 0
              Потому что надо писать что то, а не фоткать еду и сообщество дразнить
              1. srs 09 января 2018, 22:12 # +1
                Зато у тебя всегда отличная еда =) я вот питаюсь либо полуфабрикатами либо пиццей)
                p.s. changeDomain очень выручает.
              2. Николай Савин 09 января 2018, 20:22 # 0
                На первый взгляд впечатляет.
                Как изучал extJS? Судя по скриншотам его в проекте много.
                Что то читал или разбирал примеры других компонентов?
                1. srs 09 января 2018, 22:01 # +5
                  По большей части с помощью просмотра исходников, больших и маленьких компонентов. В общей концепции построения таблиц, окон и пунктов меню к таблице, очень помог компонент easyBlacklist. Он достаточно маленький, запутаться в нем сложно, при этом имеет необходимую базу. После того как я уловил концепцию, пошел смотреть в minishop. Исходники minishop — это просто клад информации, который может восприниматься даже таким тугим новичком как я. Плюс есть еще docs.sencha.com/extjs/ крайне полезный ресурс, ну и конечно же кое какие стати в русском и зарубежном сегменте. На самом деле, каждый день разработки был достаточно объемный (в плане информации), который только все больше и больше затягивал меня. Теперь даже не понимаю почему я раньше не занимался этим =)
                  Я думал о том, чтобы описать в статье наиболее интересные и забавные моменты, но я не писака, это не личный блог, получилось бы довольно объемно и вряд ли интересно аудитории modx.pro. Все таки тут дяди серьезные сидят =)
                2. Илья Уткин 10 января 2018, 00:06 # +1
                  Интересно, сколько времени заняла разработка этого компонента, включая изучение «extjs и механизмов работы процессоров и банальных лексиконов»?
                  1. srs 10 января 2018, 11:13 # 0
                    Мммм, сложный вопрос на самом деле. Сел я в в первых числах декабря наверное, закончил все первоначальные задачи несколько дней назад. После этого я начал смотреть, как все это дело можно запаковать. Когда я понял, что надевал брюки через голову и все таки упаковал его прошло еще пару дней.
                    Но собирал я эту штуку сугубо вечерами и по выходным, пик активности был в новогодние праздники, ел салат и разбирался =)
                    p.s. Спасибо тебе за статьи и компоненты, у тебя отличный стиль изложения материала и крайне полезные заметки. Если когда нибудь буду собирать коммерческий компонент, то тебе и Василию по любому буду перечислять десятину)
                  2. Константин Ильин 10 января 2018, 07:33 # 0
                    Кажется у нас скоро появится еще один хороший modx разработчик)
                    Хочется таки воспользоваться воспользоватся прилагательным, часто используемым на кавказе: «Красавчик!»

                    Меня очень интересует 5-й пункт, расскажите мне пожалуйста почему лучше в ide? если можно на пальцах и примерах)
                    1. Николай Савин 10 января 2018, 09:55 # +5
                      Ну наверное потому что, IDE половину работы делает, к примеру проверяет на ошибки, подсказывает методы, умеет дебажить код на ошибки, позволяет работать с версиями и откатываться в случае чего
                      1. srs 10 января 2018, 10:56 # +3
                        Подписываюсь под каждым словом. Можно передвигаться по файлам, классам, даже xtype`ы активны, тыкнул и ты уже смотришь на тот или иной интересующий тебя элемент изнутри. Плюс как было сказано выше:
                        к примеру проверяет на ошибки, подсказывает методы, умеет дебажить код на ошибки
                        Так-же новичкам, он задает стандарт и позволяет минимизировать быдлокод. На самом деле плюсов достаточно, одно плохо, phpstorm достаточно прожорлив и слабые машинки типа моего, сильно лагают. Например в момент индексации файлов проекта, мой старичек вообще ничего больше не может делать, даже радио на фоне лагать начинает.
                        1. Владимир 10 января 2018, 11:29 # 0
                          слабые машинки
                          это ***? (винда/макос проц/память)
                          1. man 10 января 2018, 12:26 # 0
                            wi
                    2. g0dzilla 16 января 2018, 17:56 # 0
                      на гите можно глянуть? хотелось бы тоже разобраться
                      Вы должны авторизоваться, чтобы оставлять комментарии.