Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Спасибо за добрые слова! Но ради справедливости хочу сказать, что в нашем RU-сообществе контрибьютеров MODX есть люди, вклад которых не меньше (а то и больше) значителен. Ведь важно не только писать код. Важно всё. И умение организовать и мотивировать других. И поправить лексиконы или CSS класс. И даже просто подсказать правильный инструмент для работы.

Немного пафосно прозвучало, да? %)
Была такая мысль в RU чате контрибьютеров MODX. Только обсуждалось более простое решение — отдельный пакет админки. Т.е. никаких форков и отдельных систем. В качестве аналогии могу привести своё решение ZoomX. В анонсах MODX3 озвучивали, что ядро планируется перевести на SlimFramework. За 8 лет осилили только PSR-4 (автозагрузка классов через Composer). Про Slim уже и не вспоминают. А сейчас фреймворки стали очень популярны и являются де-факто стандартами разработки. И для тех, кто хочет использовать данные подходы и стандарты в MODX, есть решение — компонент ZoomX — ставишь и работаешь как в фреймворке. И никакие форки MODX не нужны. Конечно, полноценное фреймворковское ядро было бы лучше. Но боюсь мы его не дождёмся. А с ZoomX есть возможность работать по современному.
Тоже и с админкой. Отдельный пакет сделать вполне по силам. Даже пусть для начала и с ограниченными возможностями.
Андрей, а у тебя реально работают приоритеты? Просто я смотрю на код и вижу, что ты создаёшь один виртуальный плагин с id=1000. И не понимаю, как заставить один и тот же плагин сработать в разных приоритетах?
'eventMap' => 
  array (
    'OnHandleRequest' => 
      array(
         1000 => '1000',
         3 => '3',
         1000 => '1000',
         7 => '7',
      ) ,
  );
В индексированном массиве нельзя указывать один и тот же индекс для разных записей.

П.С. Сознаюсь, что я не тестировал твой компонент, просто код смотрел. Поэтому и спрашиваю. :)
Игорь, а Вы читали пост? Он же ведь не очень большой. И там по этому поводу всё написано — в следующей версии нельзя будет указывать путь для файловых элементов в параметрах сниппета. Он указывается в системной настройке администратором (!) и не должен переопределяться простым контент-менеджером.
Кстати, если для основной части запросов ресурсы не нужны, то автозагрузку ресурсов можно отключить в соответствующей системной настройке. А для тех роутов, где ресурс нужен, подгружать его самостоятельно
$modx->resource = zoomx()->getResource($alias_or_id);
Теперь ответ легко находится. Класс не найден. Почему? Потому что в третьем параметре метода getService, в котором должен быть указан путь к классу (для классов MODX указывается пустое значение), указан массив заголовков, который должен быть указан в четвёртом параметре.
использовании toSeparatePlaceholders вываливаются ошибки
Это не ошибки, а ворнинги. Они не ломают код.

пробовал этот вариант
Очень стрёмный вариант. Без фенома можно и такой костыль пилить. Но с феномом всё проще. Нужно сохранить данные в переменную, потом по ней прогнать цикл, в котором проверять условие и формировать колонки.