Главная использует один общий полный COUNT для двух блоков коллекций вместо трёх подсчётов. JOIN для подсчёта товаров больше не загружает неиспользуемые модели товаров. Сохранены обе сортировки, фильтры и пагинация. Проверены настоящий блок главной на SQLite, следующие страницы, пустой набор и PHP lint. Разметка коллекций на plitka-lab.ru не изменилась. Вместе с cms-shop 3.2.7.21 количество SQL главной уменьшилось с 93 до 84; карточка товара сохранила прежнее количество запросов. Разница времени единичных запросов не считается доказанным ускорением.
Платформа развивается
Обновления платформы
Мы постоянно улучшаем платформу и решения: выходят новые возможности, интеграции и исправления.
- 90
- обновлений за последние 30 дней
- 395
- обновлений в 2026 году
- 3974
- релиза выпущено всего
- 96
- пакетов обновляются и поддерживаются
Сентябрь 2026
Метод getShopContents теперь получает товарный контент один раз за вызов вместо двух. Сохранены пустой результат и актуальность следующих вызовов: общий кеш не добавлен. Проверены PHP lint и сценарии существующего, отсутствующего и изменившегося контента. На plitka-lab.ru количество запросов товарного контента на главной сократилось с шести до трёх.
Сокращены SQL-запросы при выводе коллекций: оба шаблона списков пакетно загружают изображения, стикеры, бренды и страны через ActiveDataProvider.
Сохранены фильтры, сортировка, пагинация, порядок изображений и пустые связи. Общий кеш между запросами не добавлялся.
Проверки: интеграционный тест настоящих шаблонов и Yii ListView на SQLite, PHP lint, сравнение разметки обоих блоков коллекций на plitka-lab.ru. На сопоставимых гостевых запросах главной количество SQL уменьшилось со 137 до 93; разметка коллекций совпала. Разница времени двух запросов не считается доказанным ускорением из-за нестабильного исходного замера.
Проектные переопределения шаблонов коллекций должны отдельно принять предзагрузку связей.
Убрана обязательная зависимость mrclay/minify, которая подключала неиспользуемый LESS-компилятор marcusschwarz/lesserphp, помеченный Composer как abandoned.
Только используемые четыре CSS-класса из mrclay/minify 3.0.14 перенесены в отдельную папку src/vendor/mrclay и собственное пространство имён. Алгоритмы сохранены; добавлены исходная BSD-3-Clause лицензия, сведения об авторстве, версии и контрольные суммы исходников.
Совместимость:
- Обработка CSS, основной HTML-форматтер и JavaScript сохраняют прежнее поведение.
- Необязательный MrclayHtmlCompressor требует явной установки mrclay/minify либо замены на TylerHtmlCompressor. При отсутствии зависимости возвращается понятная ошибка конфигурации.
- matthiasmullie/minify отмечен в документации как будущий отдельный этап и пока не подключён.
Проверки: PHP lint, Composer validate, 12 автономных CSS-сценариев, 144 побайтовых сравнения со старым кодом, включая реальные CSS главной и товара plitka-lab.ru. Проверены холодный и готовый кеш настоящего компонента с заблокированной загрузкой старой библиотеки, дополнительное сжатие в обоих режимах и совместимость необязательного HTML-адаптера. На боевом сайте главная, товар и их CSS возвращают HTTP 200. Визуальная проверка браузером не выполнена из-за ошибки запуска среды.
При обновлении сайтов нужно обновить пакет и зависимости через Composer. Простая загрузка файлов в vendor не изменяет composer.lock. Старые mrclay/minify и marcusschwarz/lesserphp удалятся только если больше не нужны другим зависимостям; после обновления проверить composer why и composer audit.
Оптимизирована загрузка данных карточек в каталоге и слайдерах, включая PJAX-догрузку на товарной странице.
- Добавлена предзагрузка изображений, базовых и остальных цен через связи Yii.
- Остатки, избранное и сравнение передаются карточкам пакетно через ProductCardData.
- Устранён отдельный запрос первого товара перед отображением слайдера.
- Сохранены фильтры, порядок, лимиты, пагинация и отдельное отображение карточек.
Для пакетной загрузки остатков и флагов требуется cms-shop 3.2.7.20 или новее. Со старым cms-shop тема продолжает работать через прежний путь выборок. Проектные переопределения шаблонов нужно адаптировать отдельно, если они заменяют изменённые общие списки.
Проверки: PHP 8.2, реальные Yii ListView и ActiveDataProvider на SQLite, передача viewParams, предзагрузка связей, вторая страница каталога, фильтры, пустые списки и совместимость со старым cms-shop. На работающем магазине проверены ответы страниц, состав карточек и отображаемые цены до и после изменения.
Добавлен ProductCardData для загрузки остатков, избранного и сравнения сразу для товаров текущего списка.
- Три пакетных запроса вместо отдельных запросов для каждой карточки.
- Сохранены ограничения по текущему пользователю и набору складов.
- Данные загружаются заново для каждого снимка списка; общий межзапросный кеш не используется.
- Расчёт цен, скидок и выбор торговых предложений не изменены.
Подключение в стандартных каталогах и слайдерах выполнено в theme-unify-shop 2.2.1.2. Для собственных шаблонов helper можно передать через viewParams Yii ListView.
Проверки: PHP 8.2 и изолированная SQLite с реальными связями Yii. Для 26 карточек результаты трёх пакетных запросов совпали с 78 индивидуальными выборками; проверены пользователи, гости, наборы складов, пустые и отрицательные остатки, пустые списки и актуальность после изменений.
Ускорено сжатие многострочных HTML-страниц без изменения результата форматирования.
- Устранено копирование всего оставшегося документа при обработке каждой строки: используется смещение чтения.
- Сохранены обработка pre/textarea, комментариев, дополнительные параметры сжатия и статистика.
- Настройки приложения менять не требуется; изменение действует при использовании TylerHtmlCompressor.
Проверки: PHP 8.2, 14 регрессионных проверок и 1600 побайтных сравнений с предыдущей реализацией. На тестовом документе из 20 000 строк время алгоритма снизилось с 619 до 16 мс; это микробенчмарк, а не коэффициент ускорения всего сайта. Также выполнена проверка на работающем магазине.
Исправлена генерация sitemap из фонового задания: если URL сайта не задан или не содержит домен, используется hostInfo консольного URL manager.
Проверены выбор основного и резервного домена, ошибка при отсутствии обоих адресов и изолированные тесты генерации sitemap. На Arena успешно опубликовано 8621 URL.
Исправлена синхронизация складских позиций GPD при перепривязке к другому товару на маркете: сохраняется ID позиции, освобождается старая привязка и пересчитываются цены обоих товаров. Перенос между сайтами запрещён.
Пересчёт складских цен выполняется порциями без общей длинной транзакции. Внутренние SQL-выборки ограничены текущей порцией, записи прогресса больше не блокируются до завершения всего каталога.
Проверено: 77 проверок пересчёта на отдельной MariaDB; сценарии перепривязки, повторного импорта и защиты другого сайта; исправление применено на Arena и k-mix.
Оставшиеся прямые задания магазина переведены на cms-job: обновление вложенных товаров выполняется порциями с прогрессом и отменой. Планировщик больше не ждёт окончания этой SQL-операции.
Пять заданий GPD зарегистрированы в cmsAgent.jobs. cmsAgent/init создаёт и поддерживает системные расписания с замочком. Миграция переводит существующие записи, сохраняя историю и включённость.
Уведомления о поступлении сохраняют прежнее отключённое поведение — рассылка не включается.
Проверено: 67 SQL/handler-проверок, миграция расписаний, 38 проверок перехода GPD и защита старых процессов. При обновлении нужен перезапуск воркера maintenance; живой старый процесс расписания следует завершить перед миграцией.
При создании веб-приложения из rbac/init используется настоящий frontend/web/index.php. Это исправляет определение веб-каталога и публикацию ресурсов при обновлении сайта через консоль. Явные настройки проекта сохраняются.
Проверен синтаксис PHP; исправление проверено при восстановлении обновления Modena. Новых миграций нет.
Воркеры автоматически проверяют просроченные задания при старте и между обработками, не чаще раза в минуту. Безопасные повторные попытки возвращаются в очередь; отменённые и исчерпавшие попытки задания завершаются и перестают блокировать расписание. Действующие аренды не затрагиваются.
Проверено: 78 изолированных проверок установки, регрессионный набор очередей и восстановления, синтаксис PHP.
После обновления пакета штатно перезапустите воркеры. Если все воркеры заняты или остановлены, для независимого восстановления можно оставить периодический cms-job/worker/reap. Новых миграций нет.
Загрузка расписаний теперь только создаёт и обновляет записи из конфигурации. Существующие расписания, которых нет в конфигурации, сохраняются, включая системные записи, созданные миграциями.
Убрано автоматическое удаление и упоминание удаления в сводке загрузки. Удаление выполняется отдельно явным действием администратора.
Проверено: 43 проверки на SQLite в памяти, включая повторную загрузку и сохранение отсутствующего в конфигурации расписания. Миграции пакета не требуются. Ранее удалённые расписания необходимо восстановить отдельно.
В списке поставщиков добавлен фильтр активности: «Все», «Да», «Нет». Неактивные поставщики корректно отбираются по значению 0.
Включены стандартные сохранённые представления списка с учётом прав доступа.
Миграции не требуются.
Исправлена остановка обновления сайта на миграции GPD из-за оставшегося после аварийного завершения флага is_running у старого агента.
Миграция проверяет процессы старого обмена и планировщика именно этого проекта через Linux /proc. Если процессов нет, зависший флаг снимается транзакционно вместе с отключением старых расписаний. При живом процессе или невозможности проверить его состояние переход остаётся заблокированным.
Перед консольным обновлением необходимо приостановить cron и прямые запуски выбранного проекта. Изоляция сайтов через панель хостинга сохраняется. Идентификатор миграции не меняется; уже применённая миграция повторно не запускается.
Проверено: 38 проверок миграции в отдельной MariaDB, 8 проверок процессов, синтаксис PHP. На vavilonmarket.ru завершены скрипты обновления, снято обслуживание и восстановлены ранее активные очереди; сайт отвечает HTTP 200.
В списке фоновых заданий теперь отображается понятное сообщение прогресса: сколько обработано, что выполняется или какой результат получен.
Если сообщение отсутствует, сохраняется прежний вывод этапа. Проценты и счётчики остаются на месте; текст безопасно экранируется.
Проверено: синтаксис PHP и 23 проверки отображения статусов.
Adds cms_task_action: accept, start/resume, pause, complete, approve, reopen and cancel. Actions use the authenticated employee and the same atomic task/time workflow as administration. The response includes safe task-interval fields and working-day state.
Compatibility change: cms_task_create and cms_task_update reject status, including nested attributes.status. Use cms_task_action instead. Requires skeeks/cms 6.4.9.27 or newer. Task actions retain cms.task.write; no new OAuth scope is required. API server version is 1.7.0.
Adds administrator-only cms_task_status_repair for unknown statuses with verified accepted/paused audit history and no open interval.
Validation: 160 local transactional checks covering workflow behavior and callable tool registration; PHP syntax checks passed. Test changes are rolled back.
Task buttons now share a transactional task lifecycle service with API consumers. Starting work opens employee/task time together; pausing or completing closes the task interval. Participant permissions, transition validation, row locking and repeated-action handling prevent inconsistent timers.
Unknown statuses are rejected by model validation. Legacy unknown-status hints no longer break task/company screens. Administrator recovery follows an exact audit chain without inventing work-time records.
Validation: PHP syntax checks and local transactional integration suite in cms-mcp, including rollback, permissions, repeat requests and recovery.
Migrated six scheduled operations to native jobs: cart cleanup, price-history cleanup, product types, store-derived prices, automatic prices and generated ratings. Services are shared with legacy CLI commands; schedule identities remain compatible and manual execution is supported. Added bounded SQL batches, table-prefix support, progress and cancellation, transactional store-price updates, and a shared catalog resource lock with distinct deduplication keys. Verified by 57 MariaDB checks and 96 scheduler compatibility checks.
Currency-rate updates now use a native maintenance job and a shared CurrencyRateUpdater service. Preserves existing rate conventions and legacy CLI access. Adds feed validation before writes, progress, cancellation and visible error propagation. Existing schedules and manual execution share an installation lock. Verified by 8 fixture-feed checks and scheduler compatibility tests.
