对一系列 parsys-CQ 施加组件限制
Impose component restriction to a series of parsys-CQ
我的页面页脚中有一系列 parsys。同时,我想通过etc/designs/projectname/content.xml对所有这些进行组件限制。事情是这样的:
JSP:
<c:forEach var="i" begin="0" end="${properties.numberOfFooterLinks-1}">
<div class="small-6 medium-4 large-2 columns">
<cq:include path="./footerPar${i}"
resourceType="foundation/components/parsys" />
</div>
</c:forEach>
XML:
<footer jcr:primaryType="nt:unstructured">
<footerPar0 jcr:primaryType="nt:unstructured"
sling:resourceType="foundation/components/parsys"
components="[group:footerComp]">
<section jcr:primaryType="nt:unstructured"/>
</footerPar0>
</footer>
这仅适用于 parsys footerPar0,但不适用于其余部分(footerPar1、footerPar2 等)。我坚持要实现这一目标。有没有一种方法可以在不重复 parsys 的名称直到循环计数结束的情况下实现它?谢谢
我也没有找到一种优雅的方法来做到这一点。一种解决方案是使用 JavaScript 侦听器动态删除允许的组件,然后添加回您想要允许的组件。
例如在 /apps/foundation/components/parsys
下覆盖 parsys 本身,添加一个 _cq_editConfig.xml
,例如:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
cq:actions="[_clear]"
jcr:primaryType="cq:EditConfig">
<cq:listeners
jcr:primaryType="cq:EditListenersConfig"
updatecomponentlist="function(cell, allowed, componentList){
var firstSearchPath = cell.searchPaths[0];
var isFooterParsys = firstSearchPath.indexOf('footer/footerPar') > -1;
if (isFooterParsys && allowed instanceof Array) {
while(allowed.length > 0) {
allowed.pop(); //Remove all currently allowed components from the parsys
}
allowed.push('project/components/content/your-component'); //add allowed components
}
};"/>
</jcr:root>
显然这是影响深远的,因为侦听器正在影响 parsys 的所有实例(尽管在函数中按名称定位您的 footerPar。)
如果您在这些字段中还没有实时内容,您可以创建自己的资源类型,使用 parsys 作为超类型,以获得更好的控制级别。
我的页面页脚中有一系列 parsys。同时,我想通过etc/designs/projectname/content.xml对所有这些进行组件限制。事情是这样的:
JSP:
<c:forEach var="i" begin="0" end="${properties.numberOfFooterLinks-1}">
<div class="small-6 medium-4 large-2 columns">
<cq:include path="./footerPar${i}"
resourceType="foundation/components/parsys" />
</div>
</c:forEach>
XML:
<footer jcr:primaryType="nt:unstructured">
<footerPar0 jcr:primaryType="nt:unstructured"
sling:resourceType="foundation/components/parsys"
components="[group:footerComp]">
<section jcr:primaryType="nt:unstructured"/>
</footerPar0>
</footer>
这仅适用于 parsys footerPar0,但不适用于其余部分(footerPar1、footerPar2 等)。我坚持要实现这一目标。有没有一种方法可以在不重复 parsys 的名称直到循环计数结束的情况下实现它?谢谢
我也没有找到一种优雅的方法来做到这一点。一种解决方案是使用 JavaScript 侦听器动态删除允许的组件,然后添加回您想要允许的组件。
例如在 /apps/foundation/components/parsys
下覆盖 parsys 本身,添加一个 _cq_editConfig.xml
,例如:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
cq:actions="[_clear]"
jcr:primaryType="cq:EditConfig">
<cq:listeners
jcr:primaryType="cq:EditListenersConfig"
updatecomponentlist="function(cell, allowed, componentList){
var firstSearchPath = cell.searchPaths[0];
var isFooterParsys = firstSearchPath.indexOf('footer/footerPar') > -1;
if (isFooterParsys && allowed instanceof Array) {
while(allowed.length > 0) {
allowed.pop(); //Remove all currently allowed components from the parsys
}
allowed.push('project/components/content/your-component'); //add allowed components
}
};"/>
</jcr:root>
显然这是影响深远的,因为侦听器正在影响 parsys 的所有实例(尽管在函数中按名称定位您的 footerPar。)
如果您在这些字段中还没有实时内容,您可以创建自己的资源类型,使用 parsys 作为超类型,以获得更好的控制级别。