Принудительное задание шаблона документу при создании
В очередной раз замучившись объяснять на одном из проектов, что в момент создания документа необходимо проверять назначаемый шаблон вновь создаваемому документу, решил написать костыль. Сначала коснемся сути проблемы, а потом разберем получившееся дополнение.
Итак, суть проблемы в том, что при создании документа в каком-то родителе ему присваивается шаблон соседних документов родительского документа. Но, как говорится, это не точно! Например, если создавать новый документ через Быстрое создание, то назначится шаблон по умолчанию. На проектах, где несколько менеджеров, проблемы возникают регулярно, когда документу назначается неправильный шаблон, что приводит к неправильному отображению.
Решить данную проблему призван компонент ForceTemplate, который состоит из плагина, позволяющего установить фиксированный шаблон при создании документов внутри определенного родителя. Делается это следующим образом. После установки компонента необходимо заполнить опцию rules (Правила), находящуюся в неймспейсе компонента. Формат данной опции это последовательность правил "parent_id:template:level" разделенные символом пайп (|) или двойным пайп (||). Возьмем пример: 3:1|4:my template:5, в данном случае всем вновь создаваемым документам в родителе с идентификатором 3 будет назначен шаблон с айди 1. Всем вновь создаваемым документам в родителе с идентификатором 4 на уровень вложенности 5 будет назначен шаблон с именем "my template".
Несколько особенностей работы данного компонента. Плагин использует системное событие "OnDocFormRender" и срабатывает только для вновь создаваемых документов. При этом заданный шаблон устанавливается сразу в поле Template редактируемой страницы, то есть его можно при желании поменять перед сохранением. Данное событие позволяет работать с документом в момент создания в административной части сайта любым возможным способом. На самом деле нет, в момент быстрого создания документа никаких событий не вызывается, поэтому обработать таким образом данные в форме Быстрого добавления не получится. Как подсказали знающие люди, лучше вообще запретить быстрое добавление в политиках доступа, чтобы такой возможности не было.
Если в правилах родительский айди дублируется, то будет применено последнее правило в цепочке. При этом есть опция parents_check, которая позволяет логировать такие дублирования. Если указан несуществующий шаблон, то документу будет назначен шаблон родителя и будет залогировано сообщение о несуществующем шаблоне.
Исходя из смысле дополненного, получается, что компонент относительно бесполезный :) Однако реализация в нем вложенности, лично для меня, была интересной задачей.
Если будут предложения или пожелания по работе компонента, предлагайте :)
P.S. На данный момент работает только на один уровень вложенности. Если к компоненту будет проявлен интерес, расширю его функциональность до множества уровней вложенности.
Комментарии (4)