Платформа развивается

Обновления платформы

Мы постоянно улучшаем платформу и решения: выходят новые возможности, интеграции и исправления.

Недавно обновлённые пакеты.
90
обновлений за последние 30 дней
397
обновлений в 2026 году
3976
релизов выпущено всего
96
пакетов обновляются и поддерживаются

Сентябрь 2026

Фоновые заданияv1.3.0

Временные исходники и промежуточные файлы заданий теперь имеют общий жизненный цикл. Обработчик получает путь через JobContext::getWorkspace()->path('offers.jsonl'), а очистку выполняет пакет.

  • Один каталог на запуск; продолжения и автоматические повторы используют прежние файлы.
  • Системная задача cms-job.cleanup-workspaces выполняется ежечасно и допускает ручной запуск. Успешные снимки хранятся 7 суток, остальные завершённые — 14 суток.
  • Активные, ожидающие, удержанные и неоднозначные папки сохраняются. Блокировки защищают от живого старого исполнителя даже после истечения аренды в БД.
  • Карантин на той же файловой системе и журнал позволяют продолжить удаление после сбоя. Есть dry-run и ручное удержание.
  • История сохраняется, пока нужны рабочие ресурсы. Старые проектные папки автоматически не удаляются.
  • Добавлено руководство WORKSPACES.md для разработчиков и эксплуатации.

Проверено: 58 изолированных сценариев рабочих папок, 40 проверок обслуживания и 8 проверок проектного адаптера импортов.

Миграций БД нет. Для системных расписаний нужен cms-agent 3.2.5+. При внедрении необходимо согласованно обновить пакет и обработчики, мягко перезапустить воркеры и применить cmsAgent/init. Поддерживается локальная файловая система с flock и атомарным rename. Старые каталоги требуют отдельной инвентаризации и очистки.

Фоновые заданияv1.2.0

1.2.0 — Автоматическая очистка истории и логов заданий

В общий конфиг добавлены две системные задачи в очереди maintenance: cms-job.cleanup удаляет просроченную завершённую историю ежедневно, cms-job.cleanup-logs удаляет просроченные приватные логи и CSV-отчёты ежечасно. Обе доступны для ручного запуска в разделе «Расписание».

Для регистрации после обновления выполните php yii cmsAgent/init. Нужны cms-agent >= 3.2.5, действующий вызов cmsAgent/execute и потребитель maintenance. Повторная регистрация не создаёт дубли, сохраняет даты выполнения и состояние отключённых администратором расписаний. После обновления мягко перезапустите постоянные воркеры. Миграций БД нет.

Очистки используют общую блокировку ресурса и отдельные ключи дедупликации на установку. Данные обрабатываются порциями до 500 объектов каждого вида с продолжением того же запуска, проверкой отмены и продлением аренды. Незавершённые задания защищены. Ручные CLI-команды сохранены; их старые расписания следует убрать после перехода, поскольку CLI не берёт блокировку native job.

Произвольные рабочие файлы, включая supplier-imports, и файлы CMS storage в область этих очисток не входят.

Проверки: 33 изолированные проверки на SQLite в памяти без сети, PHP lint, проверка diff. На aney.ru подтверждены системность и активность расписаний, успешные ручные и автоматические запуски обеих задач. Просроченных данных на пилоте не было: фактическое массовое удаление и продолжения проверены на изолированных данных. Полная матрица установки и транспорта в этом релизе повторно не запускалась.

Тема магазина Unifyv2.2.1.15

Страница 404 магазина теперь не тупик, а короткая навигация, которая возвращает посетителя в каталог.

  • Навигация на 404. Заголовок «Страница не найдена», короткое пояснение, кнопка «Перейти в каталог» и кнопки основных разделов каталога. Каталог определяется так же, как в меню, — главный раздел каталога магазина. Ниже ссылка на контакты и кликабельный телефон сайта.
  • Разделы без мусора. Разделы, которые ведут на произвольную ссылку (прайсы, внешние сайты), в навигацию не попадают. Если у сайта нет каталога, выводятся разделы первого уровня, как в верхнем меню.
  • SEO. Ответ остаётся с кодом 404, без редиректа на главную и без canonical; добавлен meta robots «noindex, follow».
  • Надёжность. Если навигацию построить не удалось, страница ошибки всё равно выводится. Остальные ошибки (403, 500 и др.) показываются прежним шаблоном cms.
Яндекс Картыv2.1.1.2

Отдельный ключ API Геокодера

Яндекс разделил продукты: ключ «JavaScript API» больше не включает геокодер, для него нужен отдельный ключ «API Геокодера». Из-за этого на новых ключах перестало работать определение координат по введённому адресу и адреса по точке на карте.

Что изменилось

  • В настройках компонента yandex карт появилось поле «Ключ API Геокодера» (geocoder_apikey).
  • Если ключ указан, геокодирование в виджетах идёт напрямую через HTTP Геокодер Яндекса, серверный createDecodeUrl() тоже использует этот ключ.
  • Если ключ не указан, всё работает как раньше, через ключ JavaScript API. Сайтам со старыми общими ключами ничего менять не нужно.
  • Если геокодер недоступен, пользователь видит понятное сообщение вместо молчаливой ошибки.

Как настроить: в кабинете разработчика Яндекса создайте ключ продукта «API Геокодера» и укажите его в «Настройки → Компоненты → Настройки yandex карты».

🤖 Generated with Claude Code

SkeekS CMSv6.4.9.31

При первом запросе превью контроллер повторно кодировал уже сохранённое изображение, что могло дополнительно снижать качество. Теперь браузеру передаются исходные байты созданного превью; первый ответ совпадает с последующей статической выдачей nginx.

Передача явного q, получение качества из настроек, формирование URL и существующий кеш не изменены.

Проверено на PHP 8.2 и Imagine 1.5.4 (GD): качество WebP 30/90, совпадение настройки 90 с явным q=90, побайтное совпадение ответа с файлом, выдача JPEG/PNG и синтаксис PHP. Исправление установлено на skeeks-market.ru; публичные запросы генерации и выдачи из кеша возвращают одинаковые байты.

Поиск по сайтуv3.0.1.11

Добавлен поиск по точному внутреннему ID товара в AJAX-подсказках и полной выдаче. Например, запрос 7045802 находит товар с кодом 7045802. Совпадение по ID выводится первым; поиск по названию и артикулу сохранён.

ID учитывается внутри ограничений текущего сайта, активности и типов контента. Поддерживаются однозначные ID, частичные совпадения по ID исключены.

Проверено: 31 проверка MySQL, PHP/JS-синтаксис и браузерная проверка товара 7045802 на panplitka.ru. Изменённые файлы выложены на panplitka.ru с резервной копией. Миграций БД нет.

Редактор кодаv1.0.6

Виджет CodeMirror теперь корректно выглядит в бэкенде SkeekS (админка, личные кабинеты) в светлой и тёмной теме.

  • Исправлено форматирование строк. Общий стиль бэкенда html[data-sx-theme] pre добавлял каждой строке редактора фон, рамку, скругление и отступы. Строки теперь изолированы от него более специфичным селектором, перенос строк сохранён.
  • Цвета из темы бэкенда. Рамка, фон, панель номеров строк, курсор, выделение и фокус берутся из переменных --sx-color-* и следуют переключателю светлой и тёмной темы.
  • Подсветка в тёмной теме. Для стандартной темы cm-s-default добавлена читаемая на тёмном фоне палитра. Явно заданные темы CodeMirror не затрагиваются.

Стили лежат в новом бандле CodemirrorBackendAsset (assets/sx-codemirror.css), виджет подключает его автоматически. Все правила действуют только внутри html[data-sx-theme], поэтому на страницах сайта вне бэкенда внешний вид не меняется.

Тема магазина Unifyv2.2.1.9

Доработки шаблона каталога catalogs/no-col.php.

  • Бренд и страна в строке фильтров. Добавлен шаблон filters/shop-data-filters-inline.php. На десктопе фильтры «Бренд» и «Страна» выводятся выпадающими кнопками с поиском и чекбоксами, как характеристики товара. Раньше они рисовались широкими полями и ломали вёрстку каталога.
  • Страница сохранённого фильтра по бренду или стране. Блок «Другие товары с опцией» теперь подбирает похожие фильтры по бренду и стране. Раньше для таких фильтров он выводил все сохранённые фильтры сайта.
  • Залипание фильтров при прокрутке. Вместо плагина hs-sticky-block используется CSS position: sticky. У блока белый фон и лёгкая тень, а отступ сверху следует за фактическим низом шапки, которая при прокрутке меняет высоту. Товары больше не просвечивают сквозь фильтры, и фильтры не уезжают под шапку.
Тема магазина Unifyv2.2.1.8

Исправлена ошибка «Attempt to read property "name" on null» в шаблоне каталога catalogs/no-col.php.

Сохранённые фильтры по бренду или стране не привязаны к характеристике (cms_content_property_id пустой), и страница раздела падала при выводе блока «Быстрый подбор товаров». Группировка фильтров теперь идёт через CmsSavedFilter::formatFilters(), как в шаблоне left-col.php: фильтры по брендам и странам выводятся отдельными группами «Бренд» и «Страна».

Фоновые заданияv1.1.0

1.1.0 — Диспетчер очередей сайта

Один ожидающий PHP-процесс обслуживает все каналы сайта и запускает дочерние процессы только для заданий. По умолчанию разрешено до 10 заданий суммарно и одно на канал; лимиты и исключения настраиваются в jobWorker.

Универсальная команда: php yii cms-job/worker/dispatch. Без --queues она читает все каналы из итоговой конфигурации. Новый канал подключается после мягкого перезапуска; конфиг не перечитывается на лету. Хостинг с соответствующей политикой обнаруживает изменение и организует перезапуск автоматически.

Прежние команды с --queue и режим Cron сохранены. Переход требует остановки старых воркеров с завершением текущих заданий. Резервирование остаётся нативным для yii2-queue; общий механизм дочерних процессов сохраняет TTR и обработку падений. Нужны pcntl, изоляция и DbQueue. Миграций нет.

В README добавлена инструкция по регистрации каналов, типов, обработчиков, публикации заданий и подключению новых каналов. JSON discovery сообщает возможность использования диспетчера и его настройки.

Проверено на PHP 8.2 / MariaDB в production-пилоте: 15 транспортных проверок на приватных каналах, 13 проверок DB-соединений, 14 проверок старого воркера/Cron, discovery и PHP-синтаксис. Проверены переходы в обе стороны через хостинг. В замере пилота PSS ожидающих процессов снизился примерно с 82 до 23 МиБ. Дополнительно на одноразовых БД прошли установка и регрессионный набор, обновление старой схемы (83 проверки), защита от конфликта таблиц (80) и установка с префиксом (78). Проверены восстановление после падения, мягкая остановка, отмена, fencing, повторы и мост с расписанием.

Фоновые заданияv1.0.9

1.0.9

Исправлено удержание подключений MySQL простаивающими воркерами. Раньше каждый канал постоянно занимал DB-сессию, а при изолированном выполнении задания дочерний процесс открывал дополнительное подключение.

Новый транспорт DbQueue закрывает соединение после пустого опроса и освобождает подключение родителя перед запуском дочернего процесса. При следующем запросе Yii открывает соединение заново. Транзакции, mutex резервирования и подтверждение доставки сохранены. Другие драйверы БД используют прежний жизненный цикл.

На пилотном сайте пять каналов сохранили работоспособность, а число подключений в простое снизилось с пяти до нуля в пяти последовательных замерах. Прошли 13 проверок на PHP 8.2 / MariaDB 10.5 и последующие штатные боевые задания. Полный релизный набор на одноразовой БД в этот раз не запускался.

Миграций нет. После обновления перезапустите постоянные воркеры, дождавшись завершения текущих заданий. Явное переопределение класса транспорта в проекте может сохранить старое поведение. Для нестандартных долгоживущих блокировок или состояния DB-сессии предусмотрен releaseIdleConnection=false. Требуются непостоянные PDO-подключения. Число PHP-процессов не уменьшается.

Поиск по сайтуv3.0.1.10

Ссылки разделов, подборок, брендов и коллекций на странице результатов поиска теперь открываются обычным переходом: добавлен data-pjax="0" в начальную выдачу и элементы, загруженные кнопкой «Показать ещё».

Дозагрузка остаётся асинхронной. Проверены начальные и добавленные ссылки, а также переход на страницу бренда на mkmplitka.com. Миграций БД нет.

Тема магазина Unifyv2.2.1.7

Полная страница поиска использует ту же логику, что и подсказки: исходное написание и транслитерация, разделы, подборки, бренды, коллекции и товары. Группы загружаются по 8, товары — порциями штатного каталога по кнопке «Показать ещё».

Сохранены стандартные товарные карточки, цены, корзина и избранное. Проверены соседние и последняя порции, отсутствие дублей, Enter, кнопка поиска и мобильная раскладка.

Для нового поиска нужен skeeks/cms-search 3.0.1.9; для подсказок в шапке — skeeks/cms-theme-unify-v2 2.2.2.3. Без нового cms-search сохранён прежний поисковый запрос. Миграций БД нет.

Тема Unifyv2.2.2.3

Подключены AJAX-подсказки поиска к штатным шапкам сайта; исправлено положение поля поиска на мобильных устройствах в header-v4. Старые версии cms-search поддерживаются через проверку наличия нового ассета.

Живой поиск доступен с skeeks/cms-search 3.0.1.9. Для полной выдачи с группами и дозагрузкой используйте skeeks/theme-unify-shop 2.2.1.7. Миграций БД нет.

Поиск по сайтуv3.0.1.9

Живой поиск по разделам, подборкам, брендам, коллекциям и товарам. Русские запросы дополняются латинскими вариантами без дублей: «атлас» находит Atlas, «естима» — Estima. Добавлены общий запрос полной выдачи и порционная загрузка групп.

Запросы подсказок отменяются при новом вводе; соблюдаются видимость каталога и правила цен. Проверено на mkmplitka.com: 18 проверок MySQL, Enter, мобильный вид, дозагрузка и отсутствие дублей.

Для полного интерфейса обновите также skeeks/cms-theme-unify-v2 до 2.2.2.3 и skeeks/theme-unify-shop до 2.2.1.7. Миграций БД нет.

SkeekS Магазинv3.2.7.24

Фильтр наличия товаров получает только ID складов поставщиков через getSupplierStoreIds(), без создания полных моделей ShopStore.

Сохранены типы идентификаторов, заданные через setter наборы, уже загруженные модели и проектные переопределения getter. Снимок ID хранится в объекте компонента, заменяется при смене сайта и сбрасывается setter. Статический и межзапросный кеш не добавлены.

Проверки на SQLite: отсутствие гидратации, повторные и пустые чтения, смена сайта, setters, переопределения и результаты фильтра для собственных/поставщицких складов и товарных предложений. Синтаксис PHP проверен.

На главной plitka-lab.ru пик памяти снизился с 26,614 до 26,062 МиБ — примерно на 0,55 МиБ, одинаково в трёх замерах. Число SQL осталось 44. Диагностический запуск подтвердил отсутствие создания 25 моделей складов. На товарной странице заметного выигрыша нет: там полные модели загружаются другим путём. Обе страницы возвращают HTTP 200; заголовки и canonical-ссылки сохранены.

SkeekS Магазинv3.2.7.23

Связь CmsSite::getShopSite кеширует настройки магазина на 8 часов. Зависимости: тег таблицы ShopSite для автоматического сброса при сохранении/удалении и тег сайта для кнопки очистки кеша.

Контракт ActiveQuery сохранён, доступен noCache(). При пакетной загрузке без конкретного ID и при отдельном хранилище queryCache оптимизация не включается. Прямые SQL-изменения требуют явной инвалидации, поскольку обходят события моделей.

SQLite-проверки покрывают попадания в кеш, ручной и автоматический сброс, создание после пустого результата, удаление, разные сайты и eager loading. Проверено на plitka-lab.ru: при прогретом кеше запросы shop_site исчезли на главной и товарной странице.

SkeekS CMSv6.4.9.30

Чтение сайта через CmsSite::getById и основного адреса через cmsSiteAddress кешируется на 8 часов. Кеш зависит от тега соответствующей таблицы и тега сайта: сбрасывается событиями модели и кнопкой очистки кеша сайта. Сохранены приоритет адресов, пустые результаты и совместимость с отдельным queryCache.

Генератор URL только в веб-приложении переиспользует уже загруженный cms.currentTree при совпадении ID. При разборе URL модели не добавляются в статический массив; консольный путь сохранён.

Проверки: SQLite-сценарии сохранения, удаления, переноса адресов, смены приоритетов, ручной инвалидации и изоляции сайтов; генерация URL в web и console; 1000 смен currentTree без роста статического массива. Синтаксис PHP проверен.

Вместе с cms-shop 3.2.7.23 в свежей паре замеров на plitka-lab.ru: главная 49 → 44 SQL, товарная 117 → 113 SQL. На прогретом кеше нет запросов основного адреса и shop_site. HTTP 200 и canonical-ссылки сохранены. Эти показатели описывают число SQL, а не процент ускорения страницы.

Существующие уже загруженные AR-связи и статический CmsSite::$sites сохраняют прежний срок жизни; инвалидация SQL-кеша не обновляет такие объекты автоматически.

Тема магазина Unifyv2.2.1.6

Главная получает shopContents один раз и использует результат для проверки наличия товаров и настройки обоих товарных блоков. Глобальный getter не мемоизируется.

На plitka-lab.ru число запросов товарного контента на главной снизилось с трёх до одного. Проверен синтаксис PHP и ответ HTTP 200. Вместе с кешем домена из cms 6.4.9.29 число SQL главной снизилось с 65 до 61 на прогретом кеше.

SkeekS CMSv6.4.9.29

Основной домен сайта кешируется на 8 часов. Зависимости: тег таблицы доменов для автоматической инвалидации и тег сайта для кнопки очистки кеша.

Сохранён контракт ActiveQuery. Кеш включается для конкретного сайта, когда queryCache использует то же хранилище, что HasTableCache. Пакетная предзагрузка разных сайтов остаётся без этого кеша; доступен явный noCache().

SQLite-тест проверяет повторные обращения, разные сайты, ручной сброс, пустой результат, создание, изменение, смену основного домена, удаление и перенос. На plitka-lab.ru два запроса домена исчезли при прогретом кеше; canonical-ссылки сохранены, страницы возвращают HTTP 200.