Я думаю, что что-то не работает при использовании адаптивного компонента сетки (компонента макета) в редактируемом шаблоне. Кажется, все работает нормально, если вы используете только адаптивную сетку в корневом элементе, который также является адаптивной сеткой. Но если вы создадите редактируемый шаблон с обычным парсисом в качестве корня, все пойдет не так. Если вы откроете любую страницу на основе этого шаблона, вы увидите, что адаптивная сетка отображается в виде списка разрешенных компонентов, а не в зоне удаления.
Имеет смысл, чтобы адаптивный компонент сетки (/libs/wcm/foundation/components/responsivegrid/responsivegrid.html) отображал список разрешенных компонентов, когда метод isApplicable из com.day.cq.wcm.foundation.AllowedComponentList
возвращает значение true, что позволяет ему будет отображаться как список разрешенных компонентов при создании редактируемого шаблона.
Я немного покопался и нашел источник этого компонента в сети.
public boolean isApplicable () {
Page page = this.getCurrentPage();
// Is this resource parent an authored template structure resource
// And is it set as editable
if (page != null) {
Template template = page.getTemplate();
if (template != null && template.hasStructureSupport()) {
ValueMap valueMap = getResource().getValueMap();
if (valueMap != null &&valueMap.containsKey(TemplatedResource.PN_EDITABLE)) {
return valueMap.get(TemplatedResource.PN_EDITABLE, Boolean.class);
}
}
}
return false;
}
Таким образом, он проверяет, является ли это страница, основанная на редактируемом шаблоне, что кажется логичным. Я предполагаю, что следующий фрагмент кода проверяет, имеет ли ресурс в редактируемом шаблоне конфигурацию editable={Boolean}true
, что имеет смысл, поскольку это означает, что компонент может редактироваться автором.
Таким образом, мы всегда будем отображать адаптивную сетку как разрешенный компонент списка на странице, когда она разблокирована (= редактируемая) в шаблоне, на котором основана страница? Это бессмысленно, верно?
Что еще более странно, я думаю, что когда у вас есть адаптивная сетка внутри адаптивной сетки, кажется, что getResource().getValueMap()
попадает в верхнюю адаптивную сетку вместо той, которая редактируется, в результате чего эта проверка возвращает false, поэтому мы действительно может использовать адаптивную сетку. Это работает случайно или я ошибаюсь?
Кстати, мы находимся на AEM 6.3.2.2. Кто-нибудь еще сталкивался с этой проблемой?
Это проблема с функцией getResource()
? Нужно ли приводить ресурс к TemplatedResource, как в com.day.cq.wcm.foundation.ResponsiveGrid
?