2015-06-21 4 views
2

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

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

Пример пути предполагающая стропа содержания: 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(); 
    } 
} 

Редизайн работает нормально на моем localhost и dev-уровне. Но проблемы возникают при рендеринге страницы на странице поиска контента 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 для селекторов, и я мог бы также переключиться на параметры запроса ...

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

ответ

1

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

В people_list.html проверьте свойство и визуализируйте его в режиме каталога, если его установить, включив directory.html. В противном случае, включает в себя gallery.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

 Смежные вопросы

  • Нет связанных вопросов^_^