25 октября 2025, 11:46 Привет. Будет ли поддержка modx3?Так MS3 целиком предназначен для MODX3. Я не занимаюсь развитием платформы для MODX2. Продукты будут в отдельной таблице?Тут ничего не изменилось. Поля товара как хранились в ms2_products так и хранятся. Миграции phinx — а xpdo объекты будут работатьА как ты их между собой связал? Это же разные сущности. Если вопрос о том, как новые поля попадут в xpdo модель — то там наш старый привычный еще из ms2 способ, который на лету обновляет $meta['map'] Цепочка загрузки: 1. OnMODXInit → $ms3->loadMap() 2. MiniShop3::loadMap() → $this->extraFields->loadMap() 3. ExtraFields::loadMap() → загружает ms3_extra_fields (active=1) 4. ExtraFields::getFieldInfo() → формирует метаданные 5. ExtraFields::addFieldToMap() → МОДИФИЦИРУЕТ $modx->map[$class] ← ВОТ ГДЕ МАГИЯ! 6. xPDO видит новые поля как нативныеЕсли придираться, то:Тут я бы разделил ответ 1. Репозиторий — это паттерн. Нет четких правил по его использованию или обязательств его использовать. Так что каждый волен делать так, как видит. Вот Laravel до пятой версии вообще всю логику внутри моделей тягал и ничего. 2. На практике, насколько я видел как пишут другие, сервис и репозиторий по сути своей одно и тоже. Их задача разгрузить контроллер, вынести логику в отдельный контейнер. Я вижу так. Контроллер принимает запрос от API и отдает ответ. На этом все. Его зона ответственности Request-Магия-Response. Репозиторий и\или Service — логика. Здесь идет разбор запроса, обращения к DB, построение ответа. Задача сервиса — подготовить ответ согласно запроса. Model — исключительно работа с базой. Ее задача сходит в базу и выполнить поставленную задачу. Новости и события / MiniShop3 - новости 36 0
22 октября 2025, 20:32 Убери код под кат Уроки / Экспорт заказов из MiniShop2 в таблицу Excel формат CSV. 1 0
19 октября 2025, 17:25 Нужно вызывать вот такой класс MODX\Revolution\Processors\Security\LoginПример вызова $response = $this->modx->runProcessor(\MODX\Revolution\Processors\Security\Login::class, $this->scriptProperties); Вопросы / MODx 3.х проблема с авторизацией через процессор "/Security/Login" 2 +1
18 октября 2025, 10:57 Нет ощущения. что дело не в неработающих примерах, как вы это подаете? Для начала прекращайте смешивать синтаксис — у вас проблемы из-за этого, в том числе. Напишите все нормально либо в fenom, либо в MODX синтаксисе. Это разные технологии, они по разному устроены и работают. Вопросы / alt у картинок без "" msgallery - minishop2 22 0
13 октября 2025, 13:32 Продолжаю эксперименты с AI контентом. Для сравнения подключил DeepSeek к нашем дайджесту. Как по мне, получилось намного лучше, сравнение с Yandex GPT наглядное. @Aleksandr Huz на этот раз тебя не забыли. DeepSeek конечно отсыпал знатно и всему сообществу, и мне за минишоп и отдельным товарищам Новости и события / Дайджест форума за сентябрь 2025 глазами DeepSeek 2 +6
18 сентября 2025, 20:29 нам бы интернет-магазин для MODX3 какой нибудь. Да поиск с фильтрами к нему. Вопросы / Разработка нового дополнения 9 +1
18 сентября 2025, 11:07 Ну логично. Скрипт делает выборку по таблице modResource, и там такого поля нет. Оно лежит в другой таблице msProductOption. Попробуй писать msProductOption.flat_area вместо простого flat_area Вопросы / Сортировка msfilter2 по msOption 1 0
12 сентября 2025, 18:55 Твой код верный. Должен работать. Я бы его немного вот так переделал, чтобы фильтровать GET и проверить существование заголовка HTTP_ACCEPT_LANGUAGE <?php /* Запускаем плагин только на фронтенде и с включенными sef-url */ if ($modx->context->key == 'mgr' || !$modx->getOption('friendly_urls') || $modx->event->name != 'OnHandleRequest') { return; } HTTP_ACCEPT_LANGUAGE есть в 95% случаев, но обычно не гарантия что он обязательно будет /* Разрешенные контексты */ $allowedContexts = ['en' => 'en', 'ru' => 'web']; /* Проверяем GET-параметр cultureKey */ $cultureKey = filter_input(INPUT_GET, 'cultureKey', FILTER_SANITIZE_STRING); if (!empty($cultureKey)) { $targetContext = isset($allowedContexts[$cultureKey]) ? $allowedContexts[$cultureKey] : 'web'; $modx->switchContext($targetContext); } else { /* Если cultureKey не указан, проверяем язык браузера */ $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? ''; if (!empty($acceptLanguage)) { $browserLang = strtolower(substr($acceptLanguage, 0, 2)); if ($browserLang === 'en') { $modx->switchContext('en'); } } /* В остальных случаях оставляем текущий контекст */ } Вопросы / Автоматическое переключение контекстов Babel по языку браузера 1 0
28 августа 2025, 21:31 Вот тут собрана вся информация modx.pro/about Новости и события / Доработки сайта сообщества modx.pro 11 0
22 августа 2025, 15:45 Алексей скромничает, он за эту неделю довольно много работы выполнил, закрыв большинство известных нам багов. Мы с @Иван Бочкарев от лица сообщества выплатили Алексею скромные 10 000 рублей вознаграждения из фонда, накопленного за счет ваших пожертвований друзья! Новости и события / Доработки сайта сообщества modx.pro 11 +7
06 августа 2025, 09:17 То, что ты нашел в принципе актуально. Так и делают. Попробуй вот такой конфиг server { listen 80; server_name example.com www.example.com; root /home/sites/example.com; index index.php; client_max_body_size 30M; # Новый блок для статических файлов с кешированием location ~* \.(jpg|jpeg|gif|png|svg|ico|pdf|mp4|webm|ogg|mp3|wav|ttf|otf|woff|woff2|eot)$ { # Срок действия кеша в браузере (аналог Expires в Apache) expires 1M; # access plus 1 month # Заголовок для указания, что кеш публичный (аналог Header append Cache-Control "public") add_header Cache-Control "public"; } # Отдельный блок для CSS, JS (у них у вас срок больше) location ~* \.(css|js)$ { expires 2M; # access plus 2 months add_header Cache-Control "public"; } location / { root /home/sites/example.com; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_ignore_client_abort on; fastcgi_param SERVER_NAME $http_host; } # Правило для запрета доступа к файлам Apache location ~ /\.ht { deny all; } } Вопросы / Как реализовать кэширование браузера в Nginx? 2 +1 2
18 июля 2025, 17:26 Ну наверное внутри не было компонентов с использованием автозагрузки, это вполне возможно. Тогда PHP внутри пофиг откуда загружать код. Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 +1
17 июля 2025, 22:21 Вынос каталога core за пределы публичной части в MODX3 запрещен, из за особенностей работы Composer Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 +1
17 июля 2025, 22:20 Так миниатюры создает не компонент, а подключенная библиотека Glide 3.0.1 — Она либо поддерживает работу с PDF, либо нет (я не смотрел) Соответственно автор может только своевременно обновлять либу, и никак не в силах предсказывать ее дальнейшее развитие Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 0
14 июля 2025, 17:32 К утру ждем компонент для двоечки Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 +2
13 июля 2025, 11:46 Иван, а чего не пользуешься докой сообщества? Принципиально у себя размещаешь? Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 0
13 июля 2025, 11:45 Может и для двоечки устроим праздник? Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 0
13 июля 2025, 11:44 Основана на лучшей из существующих PHP библиотек (насколько я знаю) Intervention Image — за это прям мое почтение. Почти наверняка будут вопросы — а почему бы не использовать уже встроенную в MODX либу phpthumb, зачем на ровном месте тащить что-то другое. Таков современный мир — микросервисы решают. Новые дополнения и их версии / Thumb3x: Современная обработка изображений для MODX 3 48 0
30 июня 2025, 19:19 Ну держать весь код проекта (за исключением gitignore) в гите как будто промышленный стандарт. Я давно не видел не одного серьезного проекта, который бы работал как-то по другому. Новые дополнения и их версии / IskFileGuardian — ваш персональный страж для файлов MODX. 4 0
28 июня 2025, 11:21 Искренне не понимаю, что мешает сделать тоже самое через git status, и если будет получен непустой ответ — отправить письмо админу с содержанием ответа. Новые дополнения и их версии / IskFileGuardian — ваш персональный страж для файлов MODX. 4 0
[videoGallery] Видео галерея YouTube, Vimeo Невозможно установить пакет с подписью: videogallery-1.4.0-beta Ошибка установки Error в /core/packages/videogallery-1.4.0-beta/modCategory/7fc931a7772edc9752c16e9c41eb5e52.reso...
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Привет, добавил пользователя в группу mxBoard(4), создал токен. Добавляю все в postman пишет: rest: { «success»: false, «message»: «Недействительный токен.», «data...
Релиз miniShop2 ver. 4.4.1 & 4.4.2 Подскажите пожалуйста, может я что-то не знаю или упустил. Но есть ли решение по глюку с radio? Указываешь свое radio c одинаковым name и в результате при переключении получаешь вс...
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Расскажите пожалуйста как вы настраиваете сайт на MODX 3 чтобы был dev, prod, stage. Можете описать workflow? Допустим у меня 80% — это магазины, там клиенты, продажи, все онлай...
MaxNotify Обновление компонента 1.3.0-pl (22.07.2026) — добавлено автоматическое получение полей через msOrder->toArray(); — массивы и объекты безопасно пропускаются; — стандартные...
MyFavorites MyFavorites — 3.0.0-beta Первая версия для MODX Revolution 3.x — компонент полностью переписан с нуля (PHP >= 8.4, namespaced-ядро MODX 3, PSR-4, сервис-ориентированная архит...
Так MS3 целиком предназначен для MODX3. Я не занимаюсь развитием платформы для MODX2.
Тут ничего не изменилось. Поля товара как хранились в ms2_products так и хранятся.
А как ты их между собой связал? Это же разные сущности.
Если вопрос о том, как новые поля попадут в xpdo модель — то там наш старый привычный еще из ms2 способ, который на лету обновляет $meta['map']
Цепочка загрузки:
- 1. OnMODXInit → $ms3->loadMap()
- 2. MiniShop3::loadMap() → $this->extraFields->loadMap()
- 3. ExtraFields::loadMap() → загружает ms3_extra_fields (active=1)
- 4. ExtraFields::getFieldInfo() → формирует метаданные
- 5. ExtraFields::addFieldToMap() → МОДИФИЦИРУЕТ $modx->map[$class] ← ВОТ ГДЕ МАГИЯ!
- 6. xPDO видит новые поля как нативные
Тут я бы разделил ответ1. Репозиторий — это паттерн. Нет четких правил по его использованию или обязательств его использовать. Так что каждый волен делать так, как видит. Вот Laravel до пятой версии вообще всю логику внутри моделей тягал и ничего.
2. На практике, насколько я видел как пишут другие, сервис и репозиторий по сути своей одно и тоже. Их задача разгрузить контроллер, вынести логику в отдельный контейнер.
Я вижу так.
Контроллер принимает запрос от API и отдает ответ. На этом все. Его зона ответственности Request-Магия-Response.
Репозиторий и\или Service — логика. Здесь идет разбор запроса, обращения к DB, построение ответа. Задача сервиса — подготовить ответ согласно запроса.
Model — исключительно работа с базой. Ее задача сходит в базу и выполнить поставленную задачу.
Пример вызова
Для начала прекращайте смешивать синтаксис — у вас проблемы из-за этого, в том числе. Напишите все нормально либо в fenom, либо в MODX синтаксисе. Это разные технологии, они по разному устроены и работают.
@Aleksandr Huz на этот раз тебя не забыли.
DeepSeek конечно отсыпал знатно и всему сообществу, и мне за минишоп и отдельным товарищам
Попробуй писать msProductOption.flat_area вместо простого flat_area
Попробуй вот такой конфиг
Тогда PHP внутри пофиг откуда загружать код.
Соответственно автор может только своевременно обновлять либу, и никак не в силах предсказывать ее дальнейшее развитие