Мы добавили возможность сохранения настроек блоков в темах, собранных не по сетке в базе данных.
Так сложилось, что большинство наших клиентов пользуются шаблонами, собранными по сетке, сохранение настроек в БД для них уже существовало давно.
Шаблоны, собранные без использования нашего конструктора, до недавнего времени считались не обновляемыми. То есть при попытке их обновить, сбрасывались бы параметры блоков, если пользователь уже успел их поменять при настройке темы оформления в режиме отладки. Все дело было в том, что мы хранили настройки блоков прямо в шаблоне.
При любом изменении, система находила шаблон, в котором была указанная выше конструкция и изменяла в ней параметры.
Теперь все иначе. Параметры, которые есть в шаблоне считаются параметрами по-умолчанию и более никогда изменяться не будут. А если пользователь в режиме отладки поменяет какие-либо параметры, то изменения будут сохранены в базе данных. Тем самым сохранится возможность обновления шаблонов простым копированием.
Параметры будут сохраняться в базе данных в рамках "контекста". Напомню, контекст появляется в ReadyScript, если вы создаете партнерские сайты и выбираете туже тему оформления, которая используется, например, на основном сайте. Благодаря контексту, настроить блоки в Конструкторе сайта можно как для основного, так и для любого партнерского сайта, нужно лишь переключить текущий контекст.
Таким образом, теперь не нужно клонировать тему оформления, собранную не по сетке, чтобы на нескольких партнерских сайтах ее по разному настроить.
Проблема идентификации блока
Ввиду того, что конструкция {moduleinsert} может не иметь (и не имеет в большинстве случаев) строго заданного ID, приходится идентифицировать ее по составному ключу:
Текущий контекст + Путь к шаблону (в котором используется moduleinsert) + Имя блочного контроллера (указываемый в параметре name) + NUM (порядковый номер {moduleinsert} с таким name в шаблоне)
В случае, если в шаблоне будет использоваться сложная логика отображения блоков с разными параметрами в зависимости от значений каких-либо переменных, необходимо явно задавать ID конструкции {moduleinsert}, через параметр _block_id, например:
Изменения в блочных контроллерах
Ввиду того, что в конструкцию {moduleinsert} могут передаваться и динамические параметры, например:
Необходимо описывать в блочном контроллере, какие параметры не следует сохранять в базе, с помощью объявления статического метода getSelfNotReplaceableParams, который должен возвращать массив с ключами параметров.
Изменения в окне настроек параметров
В окне настроек параметров будет отображена фраза «Параметры блока загружены из базы данных», в случае если настройки были загружены из базы.
Для сброса настроек достаточно нажать внизу кнопку "Сбросить параметры".
Важность последних изменений
Темы оформления, собранные не по сетке теперь могут обновляться простым копированием с заменой всех файлов. Таким образом, мы в ближайшее время включим отдачу обновлений по темам, собранным не по сетке в нашем центре обновлений.
В маркетплейс теперь можно выгрузить тему оформления, собранную не по сетке и не беспокоиться о том, как доставлять клиентам обновления.
Просьба учитывать при при обновлении
В случае, если у вас уже имеются индивидуальные настройки блоков в теме оформления, собранной не по сетке, при первом обновлении, необходимо будет еще раз перенастроить блоки, чтобы новые настройки сохранились уже в базе данных. При последующих обновления они уже слетать не будут.
Рекомендуем переустановить параметры блоков после установки сегодняшнего обновления. Для этого нужно просто перевести сайт в режим редактирования, открыть настройки каждого блока на основных страницах и сохранить их.