Редактируемый шаблон и адаптивная сетка, вложенные в выпуск parsys - PullRequest
0 голосов
/ 07 января 2019

Я думаю, что что-то не работает при использовании адаптивного компонента сетки (компонента макета) в редактируемом шаблоне. Кажется, все работает нормально, если вы используете только адаптивную сетку в корневом элементе, который также является адаптивной сеткой. Но если вы создадите редактируемый шаблон с обычным парсисом в качестве корня, все пойдет не так. Если вы откроете любую страницу на основе этого шаблона, вы увидите, что адаптивная сетка отображается в виде списка разрешенных компонентов, а не в зоне удаления.

Имеет смысл, чтобы адаптивный компонент сетки (/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?

...