是否有简单的方法将页面模板应用于多个Apache Sling脚本?
我正在寻找类似于JSP 2.0 Tag选项的东西。但是,我使用的是HTL,它不支持此类标签。
我当然可以使用HTL包含项,例如data-sly-include="${'header.html'}
,但是必须在我随后创建的每个页面中手动包含这些内容。
理想情况下,我希望能够拥有一个包含布局的母版页,然后该母版页将自动应用于指定资源类型的所有页面,并为每个资源的特定内容保留一个可自定义区域。然后,我可以将add.html
,edit.html
,html.html
(等)文件限制为仅包含页面内容部分的代码块,从而避免不必要的布局重复跨多个文件的代码。
我认为我可以通过创建一个母版页资源(例如“页面”),然后在各个资源上设置sling:resourceSuperType
来实现此目的,但是由于这是一个后备功能,因此只能使用如果sling:resourceType
没有匹配的脚本-将会有这样的脚本。
答案 0 :(得分:0)
您可以使用Sling Decorator来包装您的资源,以使它们始终在其他所有内容之前由通用脚本处理。这样,您可以强加模板并包括实际资源以填写实际值/块/自定义脚本。
另一种选择是强加一个(嵌套的)内容树,该树的根指向模板脚本(例如,使用JCR类型),而子级/内容指向自定义脚本(使用资源类型)。这几乎是AEM对cq:Page
及其jcr:content
所做的事情。
答案 1 :(得分:0)
我最终使用以下方法:
page
page
资源类型(/apps/page/html.html
)创建一个Sightly / HTL模板文件;这是“主”页面模板view
选择器来调用“子”模板:<div data-sly-resource="${request.pathInfo @ selectors='view', addSelectors=request.requestPathInfo.selectors, requestAttributes=request.requestParameterMap}">
sling:resourceType
,添加一个view
子文件夹(/apps/example_type/view
)并将其HTL模板放置在该文件夹中(例如add.html
,{ {1}})html.html
设置为sling:resourceSuperType
例如,向page
发送请求时,Sling解析将尝试在/content/example_type_instance.add.html
中查找脚本;没有,因此它会退回到/apps/example_type/add.html
中的resourceSuperType
脚本,而该脚本将依次使用apps/page/html.html
中的脚本。
这似乎暂时有效。 @Vlad使用Sling /apps/example_type/view/add.html
的方法可能更优雅。