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

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

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Новое системное событие OnBeforeRegScripts даёт возможность манипуляции со скриптами и стилями перед их включением на страницу.
Если точнее "
OnBeforeRegisterClientScripts".

При регистрации скриптов теперь не добавляется type=«text/javascript»
Наверно разговор про это. Но видимо это осталось только в планах.

И ещё отмечу это изменение. Несмотря на споры, его всё-таки приняли. Напомню, про что это. Т.е. создаёте CRC FenomResource, в котором меняете механизм парсинга — парсите только fenom (прям как у фреймворков). И никаких глюков и костылей.

А вообще не понятно, какой вектор развития MODX. Будут поддерживать 2 ветки — 2.х и 3.х? Или только 3.х? Тройка вроде ещё в альфа. Ладно, пошёл обновляться.
Самый простой вариант. Создаёте сниппет getContent и вставляете вместо [[+content]] —
[[!getContent? content=[[+content]]]]
Код сниппета:
return is_numeric($content) ? $modx->getObject('modResource', ['id' => (int) $content])->get('content') : $content;
Можно создать сниппет-модификатор.

П.С. С феномом было бы лучше.
А зачем
$cx->prepare()
Чтобы набить config контекста. И так для каждого запроса. Оптимизируется банальным джойном (желательно с кэшированием).

но я бы сделал так
'url' => $cx->getOption('site_url'),
Не обязательно, если не нужно дефолтное значение, config — публичное свойство.

Кроме того, не вижу необходимости дёргать чанк ради какого-нибудь <a ....>Контекст.

Судя по всему не настроены права load для анонимов.

Что происходит в последнем кейсе? Получается объект контекста текущего контекста!

Ну и вообще весь свитч выглядит как
else {} if () {}
Не удивлюсь, если ещё и сниппет кэшированный.
Я выложил проект как есть и не планирую его доработок. Любые предложения через PR.

В вашем случае могут помочь права доступа «console» (нужно создать самому). Или правка js файла — у компонента есть возможность подключать пользовательские css и js файлы.
1. Создаёте плагин с любым именем и следующим содержанием
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        /** @var Fenom $fenom */
        $fenom->addModifier('lcfirst', function ($input) {
           return mb_strtolower(mb_substr($input, 0, 1)) . mb_substr($input, 1);
        });

        break;
}
2. Отмечаете событие «pdoToolsOnFenomInit» на второй вкладке.
3. Сохраняете.
4. Пользуетесь.