java - Sling 可以处理 "virtual resources"吗?

标签 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 对抗:)

最佳答案

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

您有两个选择: 1) 创建一个 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

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

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

关于java - Sling 可以处理 "virtual resources"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6652221/

相关文章:

grails - 是否可以将简单的grails应用程序转换为可以在Adobe CQ中运行的OSGi软件包?

java - 我可以使用注释将原始变量注入(inject)模拟类吗?

java - 如何加密mysql中的某些表

java - wsit 客户端 keystore 回调从未调用过

apache - 如何在 tomcat 上部署现有的 apache sling 存储库?

mysql - 从 MySQL 数据库迁移到 Jackrabbit 的过程

AEM 中的 OSGi 容器和应用程序服务器容器

java - MultiSet 类中添加/删除/等于/字符串方法的问题

java - maven-vault-plugin->configuration->embeddeds->embedded 中过滤器标签的含义?

testing - 使用带有真实 Jackrabbit 实现的 wcm.io AEM Mocks 从 JSON 导入内容