Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15

gtsNotify - система уведомлений и RealMessenger - обмен сообщениями

До недавнего времени, в MODX не было системы обмена личными сообщениями, хотя иногда она очень требуется. 2 года назад, на одном сайте, была сделана система на основе TicketsComment, но работала она отстойно. Полгода назад я плюнул на все и начал творить свою систему. К сожалению, подходящего сервиса push-уведомлений я тогда не нашел и пришлось сервис самому на основе websocket. И вот позавчера было все готово. Я приступил к публикации, зашел зачем-то на modx.pro и круто обломался :-). День назад был опубликован компонент аналог reMessages. @Илья Уткин программист лучше меня и нашел подходящий сервис comet. reMessages, по ряду параметров, получился лучше, хотя и некорых фишек что есть в RealMessenger у него нет и наоборот в RealMessenger нет некоторых возможностей reMessages. И, к тому же, Modstore не пропустило мой компонент так как он аналог уже опубликованного. Мне потраченного времени жалко, поэтому публикую компоненты в открытом доступе бесплатно. Хотя доступ к сервису уведомлений оставляю платным. За VDS надо платить. Под катом описание компонентов.
Александр Туниеков
30 января 2021, 20:44
modx.pro
977
+8

Проблема с IF в SELECT при xpdo запросе.Через pdoTools

На некотрых запросах использую конструкцию вида:
'select'=>[
                        'MaterialDet'=>'IF(SUM(MaterialDet.status_id)/COUNT(MaterialDet.status_id)<2,1,2) as material_status1',
                    ],
MODX делает экранирование 1:
SELECT IF(SUM(MaterialDet.status_id)/ COUNT(MaterialDet.status_id)<2, `1`, 2) AS material_status1
Чудом нашел код в котором это безобразие происходит :-). В файле /core/xpdo/om/mysql/xpdoquery.class.php в строке 57 проверка на экранирование:
$escape = !preg_match('/\bAS\b/i', $column) && !preg_match('/\./', $column) && !preg_match('/\(/', $column);
Я нашел выход и добавил проверку на цифры и строку:
$escape = !preg_match('/\bAS\b/i', $column) && !preg_match('/\./', $column) && !preg_match('/\(/', $column) && !preg_match('/^\d+[\.,]?\d*$/', trim($column)) && !preg_match('/^\'[^ \']*\'$/', trim($column));
Может кто-нибудь знает лучшее решение? https://github.com/modxcms/revolution/issues/15347

UPD 12.12.2020
Выяснилось, что эта ошибка возникает от pdoTools.
Александр Туниеков
10 декабря 2020, 22:14
modx.pro
446
0

excelConvertRule - Конвертация полей базы для импорта-экспорта с Excel

По работе приходиться с Excel подключаться к сайту на MODX и выгружать с него или загружать в него данные. Постепенно наработался лучший путь. В excelConvertRule редактируются правила конвертации колонки excel в колонку базы MODX. В модуле vba modx_main подготовлены функции LoadToBase для загрузки с excel в MODX и LoadToExcel обратно. В файле core/components/excelconvertrule/users_editor.xlsm, для примера, сделан редактор пользователей MODX. Используя этот пакет можно быстро сформировать нужную выгрузку(загрузку) из любых таблиц MODX.
Александр Туниеков
16 октября 2020, 00:37
modx.pro
4
1 436
+5

[getTables] Компонент редактируемых таблиц на основе bootstrap и pdoTools

При написании компонентов для MODX много времени уходит на программирование редактируемых таблиц через extJs. У меня на это уходит каждый раз до 4 часов. Причем на совершенно однотипные таблицы. В конце концов мне это надоело и я решился написать свой компонент редактируемых таблиц на основе bootstrap и pdoTools— getTables! Сложность задачи я сильно недооценил и компонент сейчас выглядит и исполнен ужастно, но время на программирование таблиц с ним сократилось до 5 минут на простую и до часа на более сложную. Это сильно помогает и getTables я постоянно использую и потихоньку допиливаю. Сейчас на его основе сделано несколько компонентов, которые я хочу выложить в общий доступ. Ну и приходиться выкладывать и getTables, несмотря на не самую лучшую его реализацию.

Есть, конечно, замечательный компонент MIGX, но чтобы его использовать на фронте нужно вытаскивать на фронт extJs ради пары табличек. А bootstrap у меня везде используется.

Для примера вот реализация админки компонента вопросов-ответов gtsReview на getTables.

Александр Туниеков
19 сентября 2020, 06:10
modx.pro
2
4 071
+14

Ограничиваем доступ в pdoMenu и Tickets через группы ресурсов

Через группы ресурсов MODX у меня сделано ограничение к разделам сайта. Но так как pdoMenu, по умолчанию, не смотрит в эти группы, то на сайте в меню были видны все разделы. Только в них зайти нельзя было. Наконец-то добрался это поправить. pdoMenu поддерживает добавление своих параметров запросов в SQL. После нескольких попыток, получилось убрать лишнее добавив в вызов pdoMenu:
Upd 21.03.2020 как оказалось в pdoMenu команда &checkPermissions=`list` выполняет нужные функции:
{'!pdoMenu' | snippet : [
    'checkPermissions'='list',
]}
Так же она работает для getTickets. Из нужного такой команды нет только для TicketLatest.
Под катом ограничение для TicketLatest и небольшой пример добавления редактирования групп ресурсов тикета в TicketForm.
Александр Туниеков
21 марта 2020, 04:40
modx.pro
1 029
0

tEvent. Компонент регистрации на мероприятия. С редактором полей.

Добрый день, всем!
На каждый сайт, где мне приходилось ставить этот компонент, нужны были свои поля формы регистрации. Приходилось каждый раз править компонент по 2-3 часа. Это меня достало :-) и в новой версии я решил добавить редактор полей базы (таблицы и формы).
Код компонента далеко не оптимален и гуру просьба сильно не ругать :-).
Для желающих могу могу подготовить описание как и что сделано.
Описание компонента под катом.
Александр Туниеков
08 марта 2020, 20:34
modx.pro
1
750
+14

Подзапросы для pdoTools

Добрый день всем! Мне понадобилось сделать сложные запросы в mysql и, так как уже привык к pdoTools, решил доработать его, чтоб с ним делать подзапросы. Извиняюсь, загружен работой и не хватило времени оттестировать все и расписать.
Вкратце под катом.
Александр Туниеков
03 марта 2020, 20:02
modx.pro
2
1 733
-1

Использование Gitify для синхронизации тестового и рабочего сайта на Windows и с Openserver

У меня такая задача. На модкс частично перенесена система управления производством (Первоначально сделанная на Excel директором. Но excel тупит на больших объемах данных и синхронизация разных книг еще тот геморой). Регулярно на сайте что-то меняется. Сейчас, чтобы не мешать рабочему процессу фирмы, сделали тестовую копию сайта. Теперь желательно сделать так чтобы ее можно было быстро синхронизировать с рабочим сайтом.
Нужно чтоб с тестового сайта переносились изменения всех ресурсов, копировались все измененные файлы компонентов и переносилась структура таблиц компонентов без изменения данных. Еще таблицы с настройками желательно настроить чтоб копировались, но это можно и ручками.
Решил использовать Gitify. И заодно написать пример его использования. Начинаю установку прямо сейчас.
Александр Туниеков
26 февраля 2020, 13:33
modx.pro
2
1 335
+3

getCacheSensitive обработчик кеша на основе getCache от Jason Coward

На сайте, который мне нужно оптимизировать, используется tagManager 2. Генерация страницы бренда на нем занимает от 3 до 6 секунд. Самый тяжелый элемент это фильтр товаров tmFilters от tagManager. Выполняется 4.5387252 секунды.
Напрашивается его закешировать. Для этого взял сниппет getCache от Jason Coward и его доработал, чтоб он перехватывал и кешировал js, стили, $_GET, $_POST от tmFilters.
Получился сниппет getCacheSensitive
Александр Туниеков
08 декабря 2019, 19:38
modx.pro
894
+5

MODX 2.7.1-pl не открывает xml файлы компонентов.

Часто при разработке нужно по быстрому взглянуть какие названия у объектов компонентов. В MODX версии 2.7.1-pl файлы типа teaching.mysql.schema.xml перестали открываться в админке. Как поправить?
Александр Туниеков
24 сентября 2019, 12:21
modx.pro
686
0