Артем
С нами с 15 октября 2017; Место в рейтинге пользователей: #167Как написать модуль оплаты для Minishop2
Привет всем :). Я не с первого раза разобрался как написать модуль оплаты для Minishop2. Поэтому решил сделать небольшую инструкцию. Не во всем правда разобрался, но надеюсь в комментариях подскажут.
Работа с MODX из IDE без админки
Привет друзья!
Прямо сейчас проходит MODXpo 2017 и я хочу поделиться с вами своим, только что показанным, докладом.
Идея в том, чтобы разрабатывать сайты без логина в админку, прямо из PhpStorm.
Я предлагаю делать это через свой пакет, который установит нужные ресурсы, настройки, шаблоны и вообще что угодно. Это не для разработки дополнений, это для разработки сайтов.
Прямо сейчас проходит MODXpo 2017 и я хочу поделиться с вами своим, только что показанным, докладом.
Идея в том, чтобы разрабатывать сайты без логина в админку, прямо из PhpStorm.
Я предлагаю делать это через свой пакет, который установит нужные ресурсы, настройки, шаблоны и вообще что угодно. Это не для разработки дополнений, это для разработки сайтов.
[msFavorites] - только для авторизованных юзеров
Иногда необходимо ограничить функционал избранного и разрешить его только для авторизованных пользователей. Под катом плагин для решения этого вопроса.
mFilter2 и оптимизация скорости на 7k товарах
Всем, кто хоть раз пытался завести mFilter2 на большом кол-ве товаров и хотя-бы 10 опциях в фильтре, известно, что тормозов не избежать. Вот и мне попался на днях сайт, в котором, казалось бы, всего-то 7000 товаров и 10 опций на странице каталога. Однако сниппет фильтра отрабатывал за 3-4 секунды. Переписал на Fenom — стал отрабатывать за 2-3 секунды.
Не годится! Тем более, что у заказчика было требование: «Чтобы сайтом было комфортно пользоваться». Что-ж, взял задачу — надо решать!
Дебаг показал, что проблема в методе mse2FiltersHandler::getMsOptionValues, а именно в запросе (7k товаров!), который выглядит как-то так:
SELECT `product_id`, `key`, `value` FROM `modx_ms2_product_options` AS `msProductOption`
WHERE (`msProductOption`.`product_id` IN (3394,3408,еще 7 тысяч ID)
AND `msProductOption`.`key` IN ('atr_n1','atr_n6','atr_n5','atr_n12','atr_n43','atr_n46','atr_n29','atr_n11','atr_n44','atr_n2'))
Исходники webstartpage.ru
Привет, друзья.
Я подумал и решил, что выложить всем на обозрение исходники моего последнего проекта может быть весьма полезно. Так что вот они, держите.
Сайт отличается использованием файловых элементов и сборкой скриптов\стилей через Gulp. Если вы давно хотели узнать, как разрабатывают сайты MODX из PhpStorm — вот ваш шанс!
Для начала нужно установить pdoTools и HybridAuth. Затем нужно выгрузить исходники Startpage.
Внимание, работать только на чистом сайте! На рабочих проектах эксперементировать не нужно.
Я подумал и решил, что выложить всем на обозрение исходники моего последнего проекта может быть весьма полезно. Так что вот они, держите.
Сайт отличается использованием файловых элементов и сборкой скриптов\стилей через Gulp. Если вы давно хотели узнать, как разрабатывают сайты MODX из PhpStorm — вот ваш шанс!
Для начала нужно установить pdoTools и HybridAuth. Затем нужно выгрузить исходники Startpage.
Внимание, работать только на чистом сайте! На рабочих проектах эксперементировать не нужно.
modNodejs - Интеграция Nodejs в MODx
Всем доброе утро. Сегодня представляю на всеобщее обозрение компонент над которым я потел последние несколько дней.
Заголовок говорит сам за себя, это интеграция Nodejs в MODx.
Так зачем он нужен? Для realtime! Как сказал Николай: «технологии диктуют».
Простейший пример: в minishop2 поступил заказ, а менеджер гуляет по админке\сайту, вот что он увидит:
Без перезагрузки страницы и тд, можно выполнить любой js по наступлению эвента.
Заголовок говорит сам за себя, это интеграция Nodejs в MODx.
Так зачем он нужен? Для realtime! Как сказал Николай: «технологии диктуют».
Простейший пример: в minishop2 поступил заказ, а менеджер гуляет по админке\сайту, вот что он увидит:
Без перезагрузки страницы и тд, можно выполнить любой js по наступлению эвента.
Загрузка заказов ms2, Tikets на стартовой странице
При сравнении «специализированных» cms для интернет магазинов и minishop заметил общую тенденцию у первых выводить при входе в админку список заказов. После недолгой переписки с замечательным исполнителем Павлом Гвоздем возникло такое замечательное и гениальное по простоте решение:
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
Добавление своих полей в форму заказа [обновлено]
При разработке нескольких проектов, возникала необходимость в получении дополнительных данных от покупателей, а полей в miniShop2 ограниченное количество. Поиск готового решения результата не дал, поэтому предлагаю свой вариант.
Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей
Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.
Более подробно далее
Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей
Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.
Более подробно далее
MIGX getImageList и Fenom
Есть такой вызов
По поводу @CODE и fenom, — работает феном в чанке относительно самого ресурса. То есть, когда я делаю так
Когда я пишу
Когда я пишу
То работает, получаю содержимое переменной. Весь массив значений.
Вопрос, как использовать феном, чтобы не писать свой парсер переменной и не использовать классический вызов через квадратные скобки, а воспользоваться {$image}?
{$_modx->runSnippet('!getImageList', [
'tvname' => 'tv_product_main_gallery',
'tpl' => '@CODE: <some_chunk>'
])}
По поводу @CODE и fenom, — работает феном в чанке относительно самого ресурса. То есть, когда я делаю так
'tpl' => '@CODE: [[+image]]'
Работает.Когда я пишу
'tpl' => '@CODE: {$image}'
То не работает.Когда я пишу
'tpl' => '@CODE: {$_modx->resource.myMIGXtv}'
То работает, получаю содержимое переменной. Весь массив значений.
Вопрос, как использовать феном, чтобы не писать свой парсер переменной и не использовать классический вызов через квадратные скобки, а воспользоваться {$image}?
CRON. Забивается журнал ошибок и "слетает" сайт.
Приветствую.
Раз в минуту CRON долбит сниппет, который ищет в пользовательской таблице запись со значением status = 0. Такая запись появляется примерно 10/15 раз в день.
Всё работает, как надо. Задача выполняется, однако стал замечать много ошибок связанных с кэшом в журнале, например:
Раз в минуту CRON долбит сниппет, который ищет в пользовательской таблице запись со значением status = 0. Такая запись появляется примерно 10/15 раз в день.
Всё работает, как надо. Задача выполняется, однако стал замечать много ошибок связанных с кэшом в журнале, например:
[2016-05-31 11:03:59] (ERROR @ /index.php) Error caching script elements/modsnippet/69
[2016-05-31 11:04:02] (ERROR @ /index.php) Error caching script elements/modsnippet/173
[2016-05-31 11:04:02] (ERROR @ /index.php) Error caching script elements/modsnippet/72
[2016-05-31 11:04:02] (ERROR @ /index.php) Error caching script elements/modsnippet/69