Можно ли переключиться на сценарий Sling Selector на основе свойства страницы

В компоненте AEM Sightly, который имеет два режима; галерея и каталог. Представление каталога реализовано с помощью селектора (/apps/mi-proj/people_list/directory.html).

По умолчанию компонент отображается в режиме галереи (с использованием people_list/people_list.html). Пользователи хотели бы иметь возможность выбирать, какое представление будет отображаться по умолчанию. В любом случае пользователи могут переключаться между представлениями.

Примеры путей, предполагающие содержание sling:resourceType = people_list:

/content/mi-proj/people.html (people_list.html)
/content/mi-proj/people.gallery.html (people_list.html)
/content/mi-proj/people.directory.html (directory.html)

У пользователей есть флажок в диалоговом окне компонента, чтобы выбрать каталог по умолчанию. Оба представления используют один и тот же класс Java WCMUse, который вызывает this.getResponse().sendRedirect(redirectPath), если установлено свойство каталога по умолчанию.

private void forwardToDirectory(String selector){
    String redirectPath;
    redirectPath = String.format("%s.%s.html", this.getCurrentPage().getPath(), selector);          
    try {
        this.getResponse().sendRedirect(redirectPath);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Перенаправление работает нормально на моем локальном хосте и уровне разработки. Но проблемы возникают при рендеринге страницы на странице поиска контента AEM (cf#), /cf#/content/mi-proj/people.html.

Он помещает страницу в большой iframe. По какой-то причине схема iframe (http) не соответствует запросу (https) для перенаправления, поэтому браузеры выдают исключение (я пытался заставить его использовать https, но он все еще не говорит, что схема https не соответствует схема iframe, данные)... кажется, мне нужно обойти это и покончить с перенаправлением...

В любом случае мне не нравилось навязывать перенаправление 302, и я бы предпочел сделать что-то, чтобы обработать его на бэкэнде... Вот процесс, который я хочу написать...

if directoryDefault == true || selector == 'directory'
    use directory.html
else 
    people_list.html

Моя единственная идея заключается в рефакторинге/переименовании скриптов (называя их gllry.html и drcty.html). Проверьте селектор из people_list.html, а затем с помощью данных включите соответствующий скрипт. Но это не использует разрешение sling для селекторов, и я мог бы также переключиться на параметры запроса...

Итак, мой вопрос: есть ли способ заставить компонент использовать сценарий селектора, даже если в запросе нет селектора?


person Cris Rockwell    schedule 21.06.2015    source источник


Ответы (1)


Я думаю, что ваша идея находится на правильном пути, исходя из моего предположения, что «пользователи» (из «Пользователи хотели бы иметь возможность выбирать, какое представление отображается по умолчанию») относятся к авторам, а не к конечным пользователям сайта.

В people_list.html проверьте свойство и визуализируйте в режиме каталога, если он установлен путем включения directory.html. В противном случае включите галерею.html:

<div data-sly-test.directoryDefault="${properties.directoryDefault == true}" data-sly-unwrap>
    <div data-sly-include="directory.html" data-sly-unwrap />
</div>
<div data-sly-test="${!directoryDefault}" data-sly-unwrap>
    <div data-sly-include="gallery.html" data-sly-unwrap />
</div>

Вы по-прежнему можете получить доступ к любому представлению с помощью селекторов, независимо от значения свойства:

/content/mi-proj/people.html (gallery.html or directory.html)
/content/mi-proj/people.gallery.html (gallery.html)
/content/mi-proj/people.directory.html (directory.html)

Чтобы узнать больше о том, когда использовать параметры запроса вместо селекторов, ознакомьтесь с этим сообщением: http://www.citytechinc.com/us/en/blog/2013/08/apache-sling-selectors-request-parameters.html

person Bruce Lefebvre    schedule 22.06.2015