Получить URL-адрес текущей страницы в Adobe CQ5 для Canonical Link

Есть ли в Adobe CQ5 стандартный способ получить текущий URL-адрес страницы для создания автоматических канонических ссылок в заголовке JSP?

По сути, у нас есть диалоговое окно конфигурации, в котором вы можете переопределить каноническую ссылку, но по умолчанию, если она пуста, я хочу создать ссылку на основе необработанного пути URL для текущего запроса.

JSP для заголовка является общим для всех запросов.

Большое спасибо


person Darius    schedule 24.10.2013    source источник


Ответы (1)


Переменная ${currentPage.path} даст вам путь от родительской страницы к текущему ресурсу, но вы должны использовать Externalizer, чтобы сделать его удобным для пользователя URL-адресом (т. е. применить любые правила сопоставления, которые у вас есть, и использовать правильный домен имя, а не имя сервера, например, prod-server-123)

i.e.

ResourceResolver resourceResolver = request.getResourceResolver();
Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);
String canonicalUrl = externalizer.publishLink(resourceResolver, "http", currentPage.getPath());

Вы можете настроить то, что экстернализатор считает базовым URL-адресом, через Felix или через узел osgi:Config в вашем репозитории. и узнайте больше в официальной документации на сайте Adobe.

(Обратите внимание, что экстернализатор CQ5.5+)

person anotherdave    schedule 24.10.2013
comment
Итак, простите мою нубность с CQ, но переменные currentPage и/или запроса передаются куда? Как мне получить запрос в моей модели? Он не вводится в конструктор. И в head.jsp у меня есть объект страницы, но у него нет свойства пути? - person Darius; 25.10.2013
comment
Если вы работаете с JSP, вы используете тег cq:defineObjects, который должен сделать currentPage доступным в запросе. Если вы работаете с сервлетом Java, вы можете расширить SlingAllMethodsServlet, чтобы получить доступ к SlingRequest, из которого вы можете получить текущий ресурс. Я не уверен, что вы имеете в виду, говоря, что он не внедряется в конструктор — у вас есть пример кода, который вы могли бы показать? Если вы расширите свой вопрос, я могу расширить свой ответ :) В противном случае это может быть сложно сделать через комментарии! - person anotherdave; 25.10.2013
comment
Вы очень помогли решить эту проблему! Переменная currentPage действительно существовала, и мне просто нужно было указать пространство имен для Externalizer, чтобы заставить его работать правильно. Теперь все хорошо! Еще раз большое спасибо - person Darius; 25.10.2013
comment
Круто, нет проблем — рад, что вы разобрались :) - person anotherdave; 25.10.2013