Sling可以处理“虚拟资源”吗?

时间:2011-07-11 15:04:38

标签: java jcr sling

背景:我的任务是为在Sling上运行的网站实施搜索引擎站点地图。该网站有多个特定国家/地区的网站,每个特定国家/地区的网站都可以有多个本地化 - 例如,http://ca.example.com/fr将是加拿大网站的法语本地化版本,并将映射到/ content / ca /​​ fr 。我无法更改此内容结构,不幸的是,国家/地区和本地化节点都具有相同的sling:resourceType。此外,管理类型需要每个国家/地区对的sitemap.xml,而不是每个国家/地区的一个站点。

生成站点地图是一项简单的任务,我的问题是每个国家/地区对都需要一个“站点地图”节点 - 由于国家和本地化节点添加的方式(以及它们具有相同的资源类型),我不能目前想到一种添加站点地图节点的良好自动化方式。

如果我能够以某种方式定义将/{country}/{localization}/sitemap.xml的请求映射到处理脚本的“虚拟资源”,那将是很好的。我一直在浏览并遇到ResourceProviderOptingServlet,但他们似乎非常关注绝对路径 - 或者将选择器添加到现有资源,这似乎不是一个选项我

任何想法,如果有一些或多或少的干净方式来处理这个?添加新的国家/地区化并不是每天都会发生,但必须手动添加“站点地图”节点仍然不是最佳解决方案。

我一直在考虑让每天更新站点地图X次的运行服务是否更好,并在JCR中生成sitemap.xml节点作为简单文件资源,而不是涉及Sling解析器。 ..但在走这条路之前,我想要一些反馈:)

编辑:

变更了需求,他们现在希望每个本地化都可以配置站点地图 - 让我的工作变得更轻松,而且我不必违反Sling:)

3 个答案:

答案 0 :(得分:3)

Sling是一个基于资源的框架,因此您必须在JCR中拥有一个您的请求所针对的资源(节点)。

您有两种选择: 1)创建一个站点地图模板,其中包含显示站点地图的逻辑,或者包含站点地图组件。 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信息,以确定要呈现的Sitemap。

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

如果我这样做,我需要手动将Sitemap添加到每个网站,并将资源保留在/ content //

您甚至可以考虑使用MSM创建Blueprint网站(如果您使用的是我认为您的平台),并使用可以创建网站模板的网站推出新网站。

答案 1 :(得分:2)

如果您希望自定义代码处理GET到/{country}/{localization}/sitemap.xml,只需在该位置创建一个节点并根据需要设置其吊索:resourceType以调用自定义servlet或脚本

要自动创建这些sitemap.xml节点,您可以使用JCR观察者在创建新的/ {country} / {localization}树时收到通知,然后创建sitemap.xml节点。

对于可配置的站点地图,您可以向sitemap.xml节点添加属性,并让您的自定义servlet或脚本使用其值来调整其输出。

您可以使用servlet过滤器或自定义ResourceProvider在存储库中没有sitemap.xml节点的情况下执行此操作,但是使用这些节点可以使实现和理解更加容易。

答案 2 :(得分:1)

注意我正在开发一个sling资源合并,它是一个自定义资源提供程序,能够根据您的搜索路径合并多个资源。

例如,如果您的搜索路径是 /应用 /库

点击/ virtual / my / resource / is / here将会检查 /应用/我/资源/是/在这里 /库/我/资源/是/这里

有一些选项,如:

  • 添加/覆盖属性
  • 删除/ libs
  • 下的资源属性
  • 重新排序节点(如果可用)

我打算尽快提交这个补丁。

代码目前位于https://github.com/gknob/sling-resourcemerger,并由https://issues.apache.org/jira/browse/SLING-2986

跟踪