使用玉兰花我创建了该区域并为页面定义了许多组件。
templateScript: /lukup-bkp/templates/pages/index.jsp
renderType: jsp
visible: true
title: Lukup trial Home
dialog: lukup-bkp:pages/home
areas:
area1:
renderType: jsp
availableComponents:
quotation:
id: lukup-bkp:components/home_com
在我的jsp页面中,我正在检索div元素中文本的值,如下所示。
<cms:area name="area1" />
如果我在一个区域中创建文本字段和blockquote:
areas:
area1:
renderType: jsp
availableComponents:
quotation:
id: lukup-bkp:components/home_com
blockquote:
id: lukup-bkp:components/block_com
在我的jsp中,我必须只检索blockquote。如果我检索像
<cms:area name="area1" >
文本值和blockquote值都指向同一个组件。
我希望文本的值在一个div中,而blockquote值在另一个div中。我怎么能访问它。
答案 0 :(得分:1)
Magnolia中区域定义的availableComponents
子节点确定可供作者/编辑者使用的组件,即可放置在该区域内的内容组件。
区域定义的type
属性确定编辑器可以在区域内放置多少个组件。 type
的允许值为:single
,list
和noComponent
。有关详细信息,请参阅Magnolia documentation of the area definition。
该类型确定如何呈现您所在区域的子内容。 single
假定只存在一个子节点,并使用其组件定义中的模板脚本对其进行渲染。 list
假定零个或多个子节点,并使用各自组件定义中的模板脚本呈现它们。 noComponent
不会渲染该区域的子组件。
有关区域默认脚本,请参阅Area definition - default area scripts。
因此area1
的类型非常重要。我假设list
。
如果您想确保区域内的每个组件都被<div>
包围,您可以编写这样的自定义区域脚本(它的Freemarker,您可能必须将其转换为JSP需要的话):
[#list components as component]
<div>
[@cms.component content=component /]
</div>
[/#list]
要仅渲染块引用,您也可以在区域脚本中进行检查:
[#list components as component]
[#if cmsfn.metaData(content, "mgnl:template") == 'lukup-bkp:components/block_com']
[#-- component has the blockquote template --]
<div>
[@cms.component content=component /]
</div>
[/#if]
[/#list]