2011-07-11 2 views
0

Справочная информация: мне было поручено внедрить файлы Sitemap для поисковых систем для веб-сайта, работающего на Sling. На сайте есть несколько сайтов, ориентированных на конкретную страну, и для каждой конкретной страны сайты могут иметь несколько локализаций - например, http://ca.example.com/fr будет французско-локализованной версией канадского сайта и будет отображаться в/content/ca/​​fr. Я не могу изменить эту структуру контента, и, к сожалению, узлы страны и локализации имеют одинаковые sling:resourceType. Кроме того, административные типы хотят иметь sitemap.xml для каждой пары страны/локализации, а не по одному для каждого сайта страны.Может ли Sling обрабатывать «виртуальные ресурсы»?

Создание файлов Sitemap - это легкая задача, для моей проблемы нужен узел «sitemap» для каждой пары страны/локализации - из-за того, что добавлены узлы стран и локализаций (и они имеют один и тот же тип ресурса) t в настоящее время думаю о хорошем автоматическом способе добавления узла sitemap.

Было бы хорошо, если бы я мог каким-то образом определить «виртуальный ресурс», который сопоставляет запросы для /{country}/{localization}/sitemap.xml к скрипту обработки; Я просматривал и столкнулся с ResourceProvider и OptingServlet, но они, похоже, довольно сосредоточены на абсолютных путях - или добавление селекторов к существующему ресурсу, что для меня не похоже.

Любые идеи, если есть более или менее чистый способ справиться с этим? Добавление новых стран/локализаций происходит не каждый день, но добавление узла «sitemap» вручную по-прежнему не является оптимальным решением.

Я рассматриваю вопрос о том, может быть, лучше иметь запущенную службу, которая обновляет sitemaps X раз в день и генерирует узлы sitemap.xml в качестве простых файловых ресурсов в JCR вместо того, чтобы включать в себя преобразователь Sling ... но прежде, чем идти по этому пути, я хотел бы некоторые отзывы :)

EDIT:

Оказывается, требования изменились, и теперь они хотят Sitemaps быть настраиваемыми в локализацию - делает мою работу легче, и Мне не придется работать против Sling :)

ответ

3

Sling - это основанная на ресурсах инфраструктура, поэтому вам нужно у вас есть ресурс (узел) в JCR, на который нацелены ваши запросы.

У вас есть два варианта: 1) Создайте шаблон Sitemap, который включает в себя логику для отображения Sitemap, или на вашем компоненте Sitemap. Логику Sitemap можно извлечь в класс или службу по своему усмотрению. Карта сайта для каждого сайта будет жить в: - /content/us/en/sitemap.xml - /content/ca/fr/sitemap.xml

2) Создание единого ресурса карты сайта (узла), что вам с использованием 2 селекторов; коды страны и языка - этот метод позволяет кэшировать, однако вы можете столкнуться с проблемами очистки кеша как своего единственного ресурса.

  • /content/sitemap.us.en.xml
  • /content/sitemap.ca.fr.xml

Вы можете посмотреть по адресу: Pathinfo для извлечения информации Sling Selector для определения того, какие Карта сайта для рендеринга.

http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/commons/PathInfo.html

Если я делал это, я бы потребовать ручное добавление сайта для каждого сайта, и сохранить ресурс в/содержании //

Вы можете даже смотреть на создание сайта с помощью Blueprint MSM (если вы используете платформу, я думаю, что вы есть) и развертывайте новые сайты, используя то, что позволяет вам создать шаблон сайта.

+0

Лучше работать * с * в рамках, чем * против * это. Мы действительно на CQ, спасибо за намек на проект - не уверен, что он будет работать с нашей конкретной настройкой, но слишком поздно менять общий макет :) – snemarch

2

Если вы хотите, чтобы GET /{country}/{localization}/sitemap.xml обрабатывался специальным кодом, просто создайте узел в этом месте и установите его sling: resourceType, если необходимо, для вызова настраиваемого сервлета или скрипт.

Чтобы создать эти узлы sitemap.xml автоматически, вы можете использовать наблюдателя JCR для уведомления о появлении новых деревьев/{country}/{localization} и затем создать узел sitemap.xml.

Для конфигурируемых sitemaps вы можете добавлять свойства к узлу sitemap.xml и использовать свой собственный сервлет или скрипт для определения своего значения.

Вы можете сделать это, не имея узла sitemap.xml в репозитории, используя фильтр сервлета или пользовательский ResourceProvider, но наличие этих узлов значительно упрощает реализацию и понимание.

+0

Мы закончили выбор узла на {country}/{localizaton}, так как авторы сайта решили, что они хотят настроить настройки отдельно. Чтение на сервлетах и ​​ResourceProviders, у меня не сложилось впечатление, что они могут (легко?) Обрабатывать пути, которые «настолько динамичны, как это». Наблюдатели JCR кажутся потенциально интересными. Спасибо большое :) – snemarch

1

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

Например, если ваши пути поиска являются /приложения /ЛИЭС

ударяя/виртуальный/мой/ресурс/есть/здесь будет проверять /Apps/мой/ресурс/есть/здесь /ЛИЭС/мой/ресурс/есть/здесь

есть несколько вариантов, как:

  • оных/переопределения свойств
  • удалить свойство ресурса в/LIBS
  • Упорядочивание узлы, если таковой имеется

я намерен представить этот патч как можно скорее.

Код в настоящее время находится на https://github.com/gknob/sling-resourcemerger и отслеживаются https://issues.apache.org/jira/browse/SLING-2986

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