Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 309 комментариев

Александр Туниеков
Александр Туниеков
Prime Vue datatable тупит на 200+ строк и в виртуальном скролинге высота полей фиксирована. Вот нам в итоге и не подошло. Директор сказал расчет должен сразу показываться без пагинации. Только скрол. А это может быть 1000 строк.
Артур Шевченко
Артур Шевченко
• зафиксировать публичный контракт EndpointInterface / метаданных по semver, чтобы наш провайдер не ломался на обновлениях;
Фактически это уже так, beta стоит просто на всякий случай. Что до semver, то в силу того, что веток две пока ломающих изменений нет первая цифра версии меняться не будет, как только потребуется что-то сломать и выпустить мажорное обновление версия для двойки его не получит и ей поддержка прекратиться.

• паритет ядра между mxapi2 и mxapi3 (чтобы один провайдер работал в обеих)?;
фактически это уже так.

• документация по написанию провайдеров (сейчас только строчка в README + лексиконе);
Вот

• регистрация middleware пакетом (сейчас только через конфиг сайта);

• ETag / If-None-Match и курсорная пагинация — для больших инкрементальных выгрузок.
Это добавлю в ближайшем обновлении.

А про остальное я не понял. Ты предлагаешь мне написать для тебя провайдер? Я не провтив, если по деньгам договоримся.
Артур Шевченко
Артур Шевченко
зачем здесь MODX
Да собственно ни зачем. Просто Modx рабоатет на любом шаред-хостинге и для меня это самый знакомый стэк. Я рассматривал вариант взять что-то готовое, но счёл развёртывание слишком сложным. Поэтому написал свой канбан как пакет для Modx. Доска в данном случае это общий оркестратор проект над которым работает агент может быть любым.

В телеграмме у меня одна группа с топиками. Топик = проект, если надо выполнять несколько задач по одному проекту одновременно создаю временный топик. Для codex и claude есть два режима работы. Первый неоптимальный: бот после каждого сообщения поднимает новый процесс агента и пересылает ему всю историю сообщений, это работает, но сжирает токены быстро. Второй режим: бот поднимает один процесс агента на топик и держит его в этом случае сообщения отправляются почти как через терминал, т.е. могут доставляться агенту прямо в процессе рассуждения. Так токены расходуются оптимальнее. Через API я не работаю, боюсь что слишком дорого выйдет, обхожусь двумя подписками по $100
Олег Захаров
Олег Захаров
Запрос:
• зафиксировать публичный контракт EndpointInterface / метаданных по semver, чтобы наш провайдер не ломался на обновлениях;

• паритет ядра между mxapi2 и mxapi3 (чтобы один провайдер работал в обеих)?;

• документация по написанию провайдеров (сейчас только строчка в README + лексиконе);

• регистрация middleware пакетом (сейчас только через конфиг сайта);

• ETag / If-None-Match и курсорная пагинация — для больших инкрементальных выгрузок.

Нам нужно строить machine-readable схему сайта (дерево разделов → блоки → элементы) с включёнными TV-значениями, менеджером и шаблонами — для последующей синхронизации в entity-registry.
Нужны кастомные процессоры (или расширение существующих):
1. resource/getTree — дерево с TV-значениями
GET /api/resource/getTree?root=0&depth=5&include_tvs=1&tv_names=manager,phone,email,section_type
Возвращает: {id, pagetitle, alias, parent, template, published, tvs: {manager: "...", phone: "..."}, children: [...]}
Ключевое отличие от resource/getList: TV-значения (а не определения) на каждом узле, в одном запросе.

2. resource/getTVValues — TV-значения для ресурса

GET /api/resource/getTVValues?id=42&tvs=manager,phone,email
Или пакетно: ?ids=42,55,78&tvs=…
Нужно потому что resource/get стандартный не включает TV-значения в ответ.

3. element/chunk/getContent — полный контент чанка

GET /api/element/chunk/get?id=123
С полем content (сейчас mxApi возвращает мету, но не тело чанка по умолчанию).

4. Фильтры в resource/getList

• ?template=5 — только ресурсы с шаблоном 5

• ?tv_filter=manager:notempty — только где TV manager заполнен

• ?published=1&deleted=0 — базовый фильтр (уже должен быть, но уточнить)

— Что ещё должен отдавать (помимо нынешнего)

Сущность | Сейчас | Нужно
Ресурс | id, pagetitle, alias, parent | + TV-значения inline, + template_name
Дерево | нет | getTree с глубиной и TV
TV | определения (name, type, default) |+ значение для конкретного ресурса
Чанк | мета | + content (тело)
Шаблон | мета | + список TV, привязанных к шаблону
Менеджер страницы | нет (живёт в TV) | через TV-зна
Илья Уткин
Илья Уткин
Немного непонятно, зачем здесь MODX. Агенты работают именно над этим сайтом или это какой-то общий оркестратор, и на доске могут быть карточки по разным сайтам?

А ещё расскажи, пожалуйста, как устроена работа с агентами? После того как ты в телеграме ответил, сообщение прилетает в ту же сессию Claude Code или скрипт отдельно хранит всю историю сообщений и отправляет запросы через API?
Денис Валентинович
Денис Валентинович
Ошибка возникает из-за того, что начиная с PHP 8 слово match стало зарезервированным ключевым словом (выражение match – аналог switch). Из-за этого PHP спотыкается об него на этапе лексического анализа, воспринимая его как конструкцию языка, а не как модификатор Fenom.

Попробуйте использовать оператор in:
{var $show_on_page = $_modx->resource.show_on_page}
{if 'image_in_header' in $show_on_page}
    ...
{/if}
Наумов Алексей
Наумов Алексей
Вообще не понял о чем речь)
В системной настройке service_js сейчас указана ссылка
smartcaptcha.cloud.yandex.ru/captcha.js

Я предложил очистить эту настройку, тогда компонент не будет автоматически регистрировать на странице скрипт. И можно добавить этот скрипт в html шаблон сайта самостоятельно. Не нужно делать копию файла на свой сайт, пусть грузится с яндекс.
Scorp Satex
Scorp Satex
не получится.

— скрипт вычисляет свой базовый адрес из собственного src:

window.smartCaptcha._origin = i.slice(0, i.lastIndexOf("/"))   // строка 7275
и потом дозагружает с него iframe-страницы:
iframeUrl: window.smartCaptcha._origin + "/checkbox.{language}.4fdec4f0c66230612adf.html"  // 6751
iframeUrl: window.smartCaptcha._origin + "/backend.636bb879d1085041bc19.html"              // 6733
С нашего домена он запросит site.ru/assets/template/js/checkbox.ru.4fdec4f0c66230612adf.html → 404, капча не отрисуется.

Скачать эти HTML тоже не выход: у вашей копии хеш 4fdec4f0c66230612adf, а Яндекс сейчас отдаёт 2e94c0142a465b4a — файл уже устарел, и хеши меняются при каждом их релизе.

Плюс запасной поиск скрипта (строка 122) распознаёт только официальные домены Яндекса.

— Надо именно как-то продумать это в плагине.