03 сентября 2026, 00:18 Давно пора! Такой классный движок застопорился в развитии из-за непонятно чего. Я много лет занимаюсь разработкой сайтов, делал сайты на joomla, wordpress, Yii, 1С-Битрикс, MODX, Laravel+Vue. Но последние лет 10 когда надо сделать какой-нибудь сложный сайт я всегда выбираю MODX. На нем просто и быстро развернуть прототип, сделать рабочую модель в разы проще. Я уже несколько проектов на ИИ-сделал на MODX. Хотя и выбираю для некоторых проектов Laravel+Vue, мне очень нравится MODX и хочется чтобы он развивался. В свое время кстати нашумели MODX Evolution на базе Laravel — что-то про них не слышно в последнее время. Где-то читал что якобы их Laravel или кто-то там поглотил (не знаю правда или нет? Подскажите). Пробовал на нем делать проекты, как-то не зашло. MODX REVO как-то привычнее стал что-ли — в нем все понятно и просто (ну как бы новичкам не просто все сразу, но потом к нему так привыкаешь). И суть в том что MODX Revo столько лет существует, но от этого не становится неактуальным. И даже сегодня в век ИИ он довольно интересен и перспективен — ИИ прекрасно знают как работает MODX Revo, причем как версии 2, так и 3. Сейчас сделать компонент для MODX легче легкого — ИИ сам упакует как надо все (не тратишь время на отладки и поиски где поставил не так запятую), остается фокус внимания на бизнес-логике компонента. Не надо тратить время на создание механики сайта (учетки, авторизации, магазин, мультиязычность/ мультидоменность, легко встраивать любые скрипты, шаблоны, фреймворки). И я себе даже сделал сервис сайт-завод который делает сайты именно на MODX Revo. Использование чанков оказалось очень удобно для работы с ИИ — даешь ему ссылку на чанк — он правит только его, не ломая и не переписывая весь сайт. Только надо научить правильно программировать и создавать структуру сайта. В век развития ИИ надо делать сайт максимально адаптированным для применения для ИИ. Сделать универсальные API. Удобные интеграции. И многое другое. Нужна база знаний по MODX в формате Obsidian.md — общедоступная. Для разработчиков / Открытое письмо руководству MODX и команде MODX Revolution (Русская версия) 15 +4
12 августа 2026, 19:50 Запрос: • зафиксировать публичный контракт 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-зна Новые дополнения и их версии / mxApi — быстрый внешний API для MODX Revolution 4 0 1
25 июня 2026, 01:24 Класс! Часто непонятно как искать причины поломок или откуда берутся сообщения. Это прям мучение. Посмотрим как работает новый компонент. Делаю у себя ИИ для корпоративного применения. И тут почерпнул для себя как надо реализовать логирование для ИИ-решений. Вообще бы уже надо заранее думать о том как тот или иной компонент будет работать с ИИ-решениями Для разработчиков / Хватит логгировать как в каменном веке 🪵 5 0
25 июня 2026, 01:17 Кстати вопрос возник. Раздражало что для базовой локализации надо было делать версию ru — т.е. создавать дублирование информации из полей и доп.полей. Это приводило к путанице. Могли записать в Content или доп. поля базовые, а на сайте информация не обновлялась. И приходилось делать проверки и условия Fenom чтобы для ru версии брать содержимое из основных полей, а не из локализации ru — а ее нельзя было не создавать. Как в новой версии будет? Тоже дублировать в ru локализацию? Можно ли сделать режим выбора использовать ru локализацию (или ту которая по умолчанию в localizator3_default_language) или брать для базовой локализации информацию из базовых полей и доп.полей/опций? Вижу что есть getLocalizedField который «если перевода нет, вернёт default или значение из modResource.» Вот это прям огонь. И еще вижу из описания что есть переводы полей, TV-полей (MIGX тоже может переводить?) и опций товаров — вот это прям огонь огонь! Новые дополнения и их версии / Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeVue 6 0 1
25 июня 2026, 01:09 Огонь! Я ставил Localizator на несколько своих сайтов. Были сложности и приходилось как-то обходить. Но сам компонент вполне был рабочий. Потестим. Новые дополнения и их версии / Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeVue 6 0 1
19 мая 2026, 04:04 Сделал новую версию с табами и возможностью запуска сразу для всех вариантов. Сначала содержимое для технического ресурса откуда будет запускаться выполнение сниппета. [[!versionCleanXTabs? &maxVersions=`2` &types=`chunk,resource,template,snippet,plugin,templatevar` &dryRun=`0` &optimize=`1`]]Далее содержимое versionCleanXTabs: — в описании Tabbed wrapper for versionCleanX cleanup results. — в код: <?php /** * versionCleanXTabs * * Runs versionCleanX for several VersionX entity tables and shows results in tabs. * * PROPERTIES: * &types - comma-separated list: chunk,resource,template,snippet,plugin,templatevar * &maxVersions - integer max versions to keep per element * &dryRun - 1 to show what would be deleted without deleting rows * &optimize - 1 to run OPTIMIZE TABLE in versionCleanX */ $escape = function ($value) { return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8'); }; $toBool = function ($value) { return filter_var($value, FILTER_VALIDATE_BOOLEAN); }; $typesRaw = (string)$modx->getOption('types', $scriptProperties, 'chunk,resource,template,snippet,plugin,templatevar'); $maxVersions = (int)$modx->getOption('maxVersions', $scriptProperties, 2); $dryRun = $toBool($modx->getOption('dryRun', $scriptProperties, false)); $optimize = $toBool($modx->getOption('optimize', $scriptProperties, true)); $labels = [ 'chunk' => ['Чанки', 'versionx_chunk'], 'resource' => ['Ресурсы', 'versionx_resource'], 'template' => ['Шаблоны', 'versionx_template'], 'snippet' => ['Сниппеты', 'versionx_snippet'], 'plugin' => ['Плагины', 'versionx_plugin'], 'templatevar' => ['TV-поля', 'versionx_templatevar'], ]; $types = []; foreach (preg_split('/\s*,\s*/', $typesRaw, -1, PREG_SPLIT_NO_EMPTY) as $type) { $type = strtolower(trim($type)); if (isset($labels[$type]) && !in_array($type, $types, true)) { $types[] = $type; } } if ($maxVersions < 1) { $maxVersions = 2; } if (empty($types)) { return '<p>versionCleanXTabs: не передан ни один поддерживаемый тип VersionX.</p>'; } $uid = 'vcx-tabs-' . substr(md5(uniqid('', true)), 0, 10); $css = <<<'VCX_STYLE' <style> .vcx-tool { max-width: 1180px; margin: 32px auto; padding: 0 18px 40px; color: #172033; font-family: Arial, sans-serif; } .vcx-tool h1 { margin: 0 0 12px; font-size: 34px; line-height: 1.15; font-weight: 600; } .vcx-tool__lead { max-width: 860px; margin: 0 0 22px; color: #536071; font-size: 16px; line-height: 1.55; } .vcx-tabs__nav { display: flex; flex-wrap: wrap; gap: 8px; margin: 24px 0 0; border-bottom: 1px solid #d8dee8; } .vcx-tabs__button { appearance: none; border: 1px solid #d8dee8; border-bottom: 0; border-radius: 8px 8px 0 0; background: #f4f7fb; color: #1b2a41; padding: 11px 15px 10px; min-width: 132px; text-align: left; cursor: pointer; } .vcx-tabs__button small { display: block; margin-top: 2px; color: #6b7585; font-size: 11px; } .vcx-tabs__button.is-active { background: #fff; color: #00458f; border-color: #c5d1df; } .vcx-tabs__panel { display: none; padding: 24px 0 0; } .vcx-tabs__panel.is-active { display: block; } .vcx-result { overflow-x: auto; } .vcx-result h3 { margin-top: 0; } .vcx-result table { width: 100%; border-collapse: collapse; margin-top: 14px; } .vcx-result th, .vcx-result td { padding: 9px 10px; border-bottom: 1px solid #e5e9f0; text-align: left; vertical-align: top; } .vcx-result th { background: #f5f7fa; font-weight: 600; } .vcx-tool__note { margin-top: 18px; padding: 12px 14px; border-left: 4px solid #00458f; background: #f3f7fc; color: #3d4a5c; } @media (max-width: 680px) { .vcx-tool h1 { font-size: 27px; } .vcx-tabs__button { flex: 1 1 100%; } } </style> VCX_STYLE; $out = $css; $out .= '<section class="vcx-tool" id="' . $escape($uid) . '">'; $out .= '<h1>VersionX cleanup</h1>'; $out .= '<p class="vcx-tool__lead">Служебная страница очистки промежуточных версий VersionX. При открытии страницы запускается очистка всех вкладок: остаются только ' . (int)$maxVersions . ' последние версии для выбранных сущностей.</p>'; if ($dryRun) { $out .= '<p class="vcx-tool__note"><strong>Dry run:</strong> записи не удаляются, показан только расчет.</p>'; } $out .= '<div class="vcx-tabs">'; $out .= '<div class="vcx-tabs__nav" role="tablist" aria-label="VersionX cleanup tabs">'; foreach ($types as $index => $type) { $panelId = $uid . '-' . $type; $active = $index === 0 ? ' is-active' : ''; $out .= '<button class="vcx-tabs__button' . $active . '" type="button" role="tab" aria-selected="' . ($index === 0 ? 'true' : 'false') . '" data-vcx-tab="' . $escape($panelId) . '">'; $out .= '<span>' . $escape($labels[$type][0]) . '</span><small>_' . $escape($labels[$type][1]) . '</small>'; $out .= '</button>'; } $out .= '</div>'; foreach ($types as $index => $type) { $panelId = $uid . '-' . $type; $active = $index === 0 ? ' is-active' : ''; $result = (string)$modx->runSnippet('versionCleanX', [ 'contentType' => $type, 'maxVersions' => $maxVersions, 'dryRun' => $dryRun ? 1 : 0, 'optimize' => $optimize ? 1 : 0, ]); if ($result === '') { $result = '<p>Сниппет versionCleanX не вернул результат для типа ' . $escape($type) . '.</p>'; } $out .= '<div class="vcx-tabs__panel' . $active . '" id="' . $escape($panelId) . '" role="tabpanel">'; $out .= '<div class="vcx-result">' . $result . '</div>'; $out .= '</div>'; } $out .= '</div>'; $out .= <<<'VCX_SCRIPT' <script> (function () { var root = document.currentScript ? document.currentScript.closest('.vcx-tool') : null; if (!root) { return; } var buttons = root.querySelectorAll('[data-vcx-tab]'); var panels = root.querySelectorAll('.vcx-tabs__panel'); buttons.forEach(function (button) { button.addEventListener('click', function () { var targetId = button.getAttribute('data-vcx-tab'); buttons.forEach(function (item) { var active = item === button; item.classList.toggle('is-active', active); item.setAttribute('aria-selected', active ? 'true' : 'false'); }); panels.forEach(function (panel) { panel.classList.toggle('is-active', panel.id === targetId); }); }); }); })(); </script> VCX_SCRIPT; $out .= '</section>'; return $out;Далее содержимое сниппета versionCleanX (отличается от варианта выше): <?php ini_set('memory_limit', '256M'); /** * versionCleanX * * Cleans old VersionX rows while keeping the newest N versions per element. * * PROPERTIES: * &contentType - resource, chunk, plugin, snippet, template, or templatevar * &maxVersions - integer max versions to keep per element * &dryRun - 1 to show what would be deleted without deleting rows * &optimize - 1 to run OPTIMIZE TABLE after cleanup * * USAGE: * [[!versionCleanX? &contentType=`resource` &maxVersions=`10`]] */ $type = strtolower(trim((string)$modx->getOption('contentType', $scriptProperties, 'resource'))); $maxVersions = (int)$modx->getOption('maxVersions', $scriptProperties, 5); $dryRun = (bool)$modx->getOption('dryRun', $scriptProperties, false); $optimize = (bool)$modx->getOption('optimize', $scriptProperties, true); $titleColumns = [ 'chunk' => 'name', 'plugin' => 'name', 'snippet' => 'name', 'template' => 'templatename', 'templatevar' => 'name', 'resource' => 'title', ]; if (!array_key_exists($type, $titleColumns)) { $type = 'resource'; } if ($maxVersions < 1) { return 'VersionX cleanup error: maxVersions must be greater than 0.'; } $table = $modx->getOption('table_prefix') . 'versionx_' . $type; $titleColumn = $titleColumns[$type]; $query = "SELECT version_id, content_id, {$titleColumn} AS page_title FROM `{$table}` ORDER BY content_id ASC, version_id DESC"; $stmt = $modx->query($query); if (!is_object($stmt)) { return 'VersionX cleanup query error: ' . print_r($modx->errorInfo(), true); } $rowsHtml = ''; $total = 0; $deleted = 0; $currentContentId = null; $currentTitle = ''; $currentTotal = 0; $currentDeleted = 0; $keptForCurrent = 0; $flushRow = function () use (&$rowsHtml, &$currentContentId, &$currentTitle, &$currentTotal, &$currentDeleted) { if ($currentContentId === null) { return; } $rowsHtml .= '<tr><td>' . htmlspecialchars((string)$currentTitle, ENT_QUOTES, 'UTF-8') . '</td><td>' . (int)$currentTotal . '</td><td>' . (int)$currentDeleted . "</td></tr>\n"; }; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $contentId = (int)$row['content_id']; if ($currentContentId !== $contentId) { $flushRow(); $currentContentId = $contentId; $currentTitle = (string)$row['page_title']; $currentTotal = 0; $currentDeleted = 0; $keptForCurrent = 0; } $total++; $currentTotal++; if ($keptForCurrent < $maxVersions) { $keptForCurrent++; continue; } $versionId = (int)$row['version_id']; if (!$dryRun) { $delete = $modx->query("DELETE FROM `{$table}` WHERE version_id = {$versionId}"); if (!is_object($delete)) { return 'VersionX cleanup delete error for ' . htmlspecialchars($currentTitle, ENT_QUOTES, 'UTF-8') . ': ' . print_r($modx->errorInfo(), true); } } $deleted++; $currentDeleted++; } $flushRow(); $optimizeMessage = ''; if (!$dryRun && $optimize) { $optimized = $modx->query("OPTIMIZE TABLE `{$table}`"); if (!is_object($optimized)) { $optimizeMessage = '<p>Optimize error: ' . htmlspecialchars(print_r($modx->errorInfo(), true), ENT_QUOTES, 'UTF-8') . '</p>'; } } return '<h3>VersionX Cleanup for ' . htmlspecialchars($table, ENT_QUOTES, 'UTF-8') . '</h3>' . ($dryRun ? '<p><strong>Dry run:</strong> rows were not deleted.</p>' : '') . '<p>Total records: <strong>' . (int)$total . '</strong> Total deleted: <strong>' . (int)$deleted . '</strong></p>' . $optimizeMessage . '<table class="table table-striped"><thead><tr><th>Page name</th><th>Total found</th><th>Deleted</th></tr></thead><tbody>' . $rowsHtml . '</tbody></table>';Итого имеем удобный вывод с вкладками. <cut/> Из статьи на моем сайте gowindo.ru/articles/modx/versioncleanxtabs-chistka-ot-ustarevshix-versij Вопросы / VersionX переполнил базу данных 8 0 1
13 мая 2026, 23:33 Сейчас в таких вопросах проще и быстрее спросить у ChatGPT. А лучше подключить себе Codex и работать с сайтом напрямую… Вопросы / Не открываются категории miniShop 2 в админке [РЕШЕНО] 3 0
12 мая 2026, 21:07 Тоже в последнее время очень плотно работаю с различными проектами ИИ. Делал корпоративный ИИ на локальном сервере и VPS. VPS для VPN и чтобы Claude Code CLI ходил только через него (все-таки стремно потерять Claude Code MAXx20). ChatGPT Codex очень нравится — если его обучить, он все четко делает. А и еще Kimi K2.6 очень прикольно умеет осаждать другие ИИ и давать бизнесово оценку — мне из 10-ти пунктов от ChatGPT Codex в плане создания продукта Kimi оставил 3, остальные обоснованно по пальцам объяснил что не нужны на первом этапе — так и оказалось. Ставил Sing-box и самописный kill-switcher — типа рубильник на интернет если VPN отвалится. Когда делал VPN заодно и как-то быстро и просто сделал прокси-сервер для Telegram — настолько ИИ уже научены делать его быстро — буквально наверное 2-3 минуты. Просто он сам предложил типа «А хочешь прокси-сервер для Telegram по протоколу Mtproto сделаю?». Можно сделать разные VPN и прокси-сервера для своих сотрудников с возможностью отключения если уволились. Сейчас тоже решил запилить себе ИИ-агента для создания сайтов на MODX Revo и других движках, самое сложное скиллы реализовать нужные. Kimi у меня на тесте хуже справился по сравнению с ChatGPT. Удивился что кто-то уже реализовал ИИ на MODX (а впрочем чему удивляться — ИИ сейчас приведут к ускорению разработки сайтов в 10-20-100 раз.) MODX Revo тут хорош тем что по нему для ИИ все понятно и просто. Но самое правильное — чтобы ИИ создавал скрипты на повторяющиеся операции, которые на ИИ делать накладно из-за расходов лимитов/токенов. Или делать структуру из нескольких ИИ. Но это если вы делаете сайты на потоке. Новые дополнения и их версии / [aiAssist] Я же просто попросил его создать магазин, а он СДЕЛАЛ ЭТО! 19 0
26 апреля 2026, 15:27 Я потому и задал вопрос о том как реализовано в Minishop3? Новые дополнения и их версии / Новости MiniShop3, mSearch, mFilter 27 0
26 апреля 2026, 13:53 ms2_product_options как хранит опции товаров? У меня на сайте рабочем на MODX REVO 2.8.8 + Minishop 3.0.7 заметил вот что — для многих товаров требуется указание от 10 до 30 опций — по факту заполняют не все. Причем тут пришлось делать конфигуратор, а для него еще создать штук 20 опций. А по факту у меня часто не все опции заполняются. И получается многие записи хранятся пустые. Т.е. на каждый товар создается запись вида product_id — key опции с пустым value. А можно же не хранить пустые опции? Не знаю почему и как, но вызывает сомнение что так надо было делать. Всего на рабочем проекте будет более 100 000 товаров (будет больше). В итоге в таблице ms2_product_options на текущий момент уже вбито 35 000 строк, а когда зальем все товары со всеми опциями, то там будет просто жесть как много строк с пустыми значениями. Новые дополнения и их версии / Новости MiniShop3, mSearch, mFilter 27 0
18 апреля 2026, 01:10 У вас репозиторий закрылся? Новые дополнения и их версии / msProductKits - удобное управление товарами-комплектами (наборами товаров) 31 0
11 апреля 2026, 17:19 Демо-сайт не работает. Последнее сообщение аж от 2019 года! Можно ли из старого заказа сделать повторную покупку — то есть добавить в корзину список товаров из заказа или отдельные его товары? Понимаю что можно — просто не совсем понимаю реализовано ли уже или мне придется допиливать под себя? Готовые решения / Женим mFilter2 и msListOrders 8 0
11 апреля 2026, 17:15 Добра всем! По ходу компонент заброшен? Последнее сообщение аж от 2019 года? всего 26 загрузок. Вопрос текущий: Можно ли на этом компоненте сделать некие различные типы корзин типа список покупок, список желаний, спецификации (сметы) с указанием проекта. Можно ли реализовать возможность доступа к корзинам других пользователей в рамках управления пользователями в одной организации на базе Organizations? Делаю конфигуратор сложных составных товаров. Надо сохранять расчеты (сметы) с возможностью передачи в закупку. Новые дополнения и их версии / msBaskets 5 0
11 апреля 2026, 17:11 Добра всем! По ходу компонент заброшен? Удивился сам что я когда-то его тестил и писал по нему вопросы, уже не помню даже когда и где. Вопрос текущий: Можно ли на этом компоненте сделать некие различные типы корзин типа список покупок, список желаний, спецификации (сметы) с указанием проекта. Можно ли реализовать возможность доступа к корзинам других пользователей в рамках управления пользователями в одной организации на базе Organizations? Делаю конфигуратор сложных составных товаров. Надо сохранять расчеты (сметы) с возможностью передачи в закупку. Готовые решения / [shareCart] - поделись корзиной 28 0
11 апреля 2026, 17:08 Добра всем! Не понял как создать несколько корзин? И чтобы у каждого был свой шаблон. Можно ли так сделать некие различные типы корзин типа список покупок, список желаний, спецификации (сметы) с указанием проекта. Можно ли реализовать возможность доступа к корзинам других пользователей в рамках управления пользователями в одной организации на базе Organizations? Делаю конфигуратор сложных составных товаров. Надо сохранять расчеты (сметы) с возможностью передачи в закупку. Новые дополнения и их версии / [MsAltCart 1.0.7] Теперь с документацией. 3 0
01 апреля 2026, 18:15 У меня на регистрации словил ошибку. При это пользователь явно создался, т.к. повторно создать пользователя на ту же самую почту не дает. При повторно попытке восстановить доступ так же ошибка выходит и кидает на страницу отладочную rumaxbot.ru/email/verification-notification. На почту письмо о подтверждении не пришло. Для разработчиков / [MAX bot] отправляем сообщение в бот MAX на изи 9 0
21 февраля 2026, 01:17 По этому вопросу тоже думаю — создал вопрос тут Вопросы / Вопрос по будущему MODX и стратегии развития. 4 0
20 февраля 2026, 16:01 Компонент очень нужный и мне кажется будет востребован. У меня тут задача стоит сделать что-то подобное на сайте на движке на MODX 2.8 — там есть старые другие решения. Но задумываюсь о глобальном переносе на 3-ю версию. Новые дополнения и их версии / ms3Variants - Реализация вариантов одного товара в MiniShop3 7 0
20 февраля 2026, 16:00 ну я подумал что возможно ты сам лично уже где-то у себя на заказе рабочем внедрил и есть рабочий сайт Новые дополнения и их версии / ms3Variants - Реализация вариантов одного товара в MiniShop3 7 0
20 февраля 2026, 15:58 А какой компонент для личного кабинета и авторизации используется? Вопросы / Дополнительное поле профиля залогиненного админа 3 0
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Вложенный migx тоже переведет??
PageBuilder — визуальный конструктор страниц для MODX 3 Класс! Пара моментов смутила: 1. Почему бы чанки сразу не вынести в файлы? 2. На фронте грузится свой CSS для стандартных блоков<link rel="stylesheet" href="/a...
mxDadata — интеграция DaData (Suggest, Clean, Party) с MODX 3 и MiniShop3 Вышла новая версия: [1.0.2-pl] — 2026-10-06 Fixed #9 Права mxdadata_edit, mxdadata_logs, mxdadata_cache_clear теперь проверяются в connector.php и в Processors\Mgr\Pr...
msp3PaymentSkeleton — шаблон для создания платёжных дополнений MiniShop3 вот круто. я как то писал платежное дополнение и парился как что. а теперь надеюсь все проше будет :-)
MiniShop3 1.2.0 - 1.3.0 Самое интересное Пообщались с клиентом он сказал что тыкал в позицию т.к. она не добавлялась (видимо лагал инет) и вот она размножилась таким образом.
Modx Revo 2.8.8 + Minishop 2 (4.4.2) + Babel 3.5.2 - превью товаров в админке у дополнител... Сначала сравните ответ connector для исходного товара и его перевода во вкладке Network. Если у перевода поле миниатюры пустое, смена чанка или рендерера сама картинку не добавит: ...
Сайт тормозит сервер, грузит процессор на 100% полезно посмотреть, какие URL запрашивают эти боты и сколько времени занимает их обработка. Частые обращения к поиску и фильтрам могут нагружать PHP сильнее, чем обычные страницы. ...
Подскажите насколько это рабочее решение Спасибо за ответ. У меня время создания заказа равно времени оплаты. Заказ оплачивается сразу через iframe на сайте. При нажатии на кнопку «оформить заказ» всплывает окошко робокас...
Не всегда срабатывает JS-событие Здесь лучше разделить «заказ создан» и «заказ оплачен». Первое событие фиксируется при успешном создании заказа, второе — после проверенного уведомления платёжной системы на сервер...
В век развития ИИ надо делать сайт максимально адаптированным для применения для ИИ. Сделать универсальные API. Удобные интеграции. И многое другое. Нужна база знаний по MODX в формате Obsidian.md — общедоступная.
• зафиксировать публичный контракт EndpointInterface / метаданных по semver, чтобы наш провайдер не ломался на обновлениях;
• паритет ядра между mxapi2 и mxapi3 (чтобы один провайдер работал в обеих)?;
• документация по написанию провайдеров (сейчас только строчка в README + лексиконе);
• регистрация middleware пакетом (сейчас только через конфиг сайта);
• ETag / If-None-Match и курсорная пагинация — для больших инкрементальных выгрузок.
Нам нужно строить machine-readable схему сайта (дерево разделов → блоки → элементы) с включёнными TV-значениями, менеджером и шаблонами — для последующей синхронизации в entity-registry.
Нужны кастомные процессоры (или расширение существующих):
1. resource/getTree — дерево с TV-значениями
Возвращает: {id, pagetitle, alias, parent, template, published, tvs: {manager: "...", phone: "..."}, children: [...]}
Ключевое отличие от resource/getList: TV-значения (а не определения) на каждом узле, в одном запросе.
2. resource/getTVValues — TV-значения для ресурса
Или пакетно: ?ids=42,55,78&tvs=…
Нужно потому что resource/get стандартный не включает TV-значения в ответ.
3. element/chunk/getContent — полный контент чанка
С полем 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-зна
Вообще бы уже надо заранее думать о том как тот или иной компонент будет работать с ИИ-решениями
И еще вижу из описания что есть переводы полей, TV-полей (MIGX тоже может переводить?) и опций товаров — вот это прям огонь огонь!
Потестим.
Сначала содержимое для технического ресурса откуда будет запускаться выполнение сниппета.
Далее содержимое versionCleanXTabs:
— в описании Tabbed wrapper for versionCleanX cleanup results.
— в код:
Далее содержимое сниппета versionCleanX (отличается от варианта выше):
Итого имеем удобный вывод с вкладками.
Из статьи на моем сайте gowindo.ru/articles/modx/versioncleanxtabs-chistka-ot-ustarevshix-versij
Ставил Sing-box и самописный kill-switcher — типа рубильник на интернет если VPN отвалится. Когда делал VPN заодно и как-то быстро и просто сделал прокси-сервер для Telegram — настолько ИИ уже научены делать его быстро — буквально наверное 2-3 минуты. Просто он сам предложил типа «А хочешь прокси-сервер для Telegram по протоколу Mtproto сделаю?».
Можно сделать разные VPN и прокси-сервера для своих сотрудников с возможностью отключения если уволились.
Сейчас тоже решил запилить себе ИИ-агента для создания сайтов на MODX Revo и других движках, самое сложное скиллы реализовать нужные. Kimi у меня на тесте хуже справился по сравнению с ChatGPT.
Удивился что кто-то уже реализовал ИИ на MODX (а впрочем чему удивляться — ИИ сейчас приведут к ускорению разработки сайтов в 10-20-100 раз.) MODX Revo тут хорош тем что по нему для ИИ все понятно и просто.
Но самое правильное — чтобы ИИ создавал скрипты на повторяющиеся операции, которые на ИИ делать накладно из-за расходов лимитов/токенов. Или делать структуру из нескольких ИИ. Но это если вы делаете сайты на потоке.
У меня на сайте рабочем на MODX REVO 2.8.8 + Minishop 3.0.7 заметил вот что —
для многих товаров требуется указание от 10 до 30 опций — по факту заполняют не все. Причем тут пришлось делать конфигуратор, а для него еще создать штук 20 опций.
А по факту у меня часто не все опции заполняются. И получается многие записи хранятся пустые. Т.е. на каждый товар создается запись вида product_id — key опции с пустым value. А можно же не хранить пустые опции? Не знаю почему и как, но вызывает сомнение что так надо было делать.
Всего на рабочем проекте будет более 100 000 товаров (будет больше).
В итоге в таблице ms2_product_options на текущий момент уже вбито 35 000 строк, а когда зальем все товары со всеми опциями, то там будет просто жесть как много строк с пустыми значениями.
Последнее сообщение аж от 2019 года!
Можно ли из старого заказа сделать повторную покупку — то есть добавить в корзину список товаров из заказа или отдельные его товары? Понимаю что можно — просто не совсем понимаю реализовано ли уже или мне придется допиливать под себя?
По ходу компонент заброшен? Последнее сообщение аж от 2019 года? всего 26 загрузок.
Вопрос текущий:
Можно ли на этом компоненте сделать некие различные типы корзин типа список покупок, список желаний, спецификации (сметы) с указанием проекта. Можно ли реализовать возможность доступа к корзинам других пользователей в рамках управления пользователями в одной организации на базе Organizations?
Делаю конфигуратор сложных составных товаров. Надо сохранять расчеты (сметы) с возможностью передачи в закупку.
По ходу компонент заброшен?
Удивился сам что я когда-то его тестил и писал по нему вопросы, уже не помню даже когда и где.
Вопрос текущий:
Можно ли на этом компоненте сделать некие различные типы корзин типа список покупок, список желаний, спецификации (сметы) с указанием проекта. Можно ли реализовать возможность доступа к корзинам других пользователей в рамках управления пользователями в одной организации на базе Organizations?
Делаю конфигуратор сложных составных товаров. Надо сохранять расчеты (сметы) с возможностью передачи в закупку.
Не понял как создать несколько корзин?
И чтобы у каждого был свой шаблон.
Можно ли так сделать некие различные типы корзин типа список покупок, список желаний, спецификации (сметы) с указанием проекта. Можно ли реализовать возможность доступа к корзинам других пользователей в рамках управления пользователями в одной организации на базе Organizations?
Делаю конфигуратор сложных составных товаров. Надо сохранять расчеты (сметы) с возможностью передачи в закупку.
При это пользователь явно создался, т.к. повторно создать пользователя на ту же самую почту не дает.
При повторно попытке восстановить доступ так же ошибка выходит и кидает на страницу отладочную rumaxbot.ru/email/verification-notification.
На почту письмо о подтверждении не пришло.
У меня тут задача стоит сделать что-то подобное на сайте на движке на MODX 2.8 — там есть старые другие решения.
Но задумываюсь о глобальном переносе на 3-ю версию.