我正在使用SDL Tridion 2011 SP1。我正在为组件创建Dreamweaver TBB。在我的组件中,一些字段是空的。但是在我的组件TBB中,我想检查字段是否为空,我不应该渲染它。如果字段不为空,那么我应该渲染并显示该值。我在检查嵌入字段中子字段的内容时遇到问题。
在我的组件上有一个名为" EMBFIELD"的多值嵌入式架构字段。 EMBFIELD模式有一个文本字段,其名称为" text"。我想检查文本字段是否为空。如果它不为空,我必须遍历该字段以呈现值。
我必须通过" RenderComponentField"来渲染该字段。只要。当我尝试渲染它时会显示一些该字段不存在的错误。
我认为这可以使用If block来完成。
<!-- TemplateBeginIf cond="Component.Fields.EMBFIELD" -->
<!-- TemplateBeginRepeat name="Component.Fields.EMBFIELD" -->
<!-- TemplateBeginIf cond="Component.Fields.EMBFIELD.text" -->
<div>@@RenderComponentField("Component.Fields.EMBFIELD.text",TemplateRepeatIndex)@@</div>
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
<!-- TemplateEndIf -->
但它给出了错误,如
内部错误:上下文组件组件没有字段Component.Fields.conditionalText.text
答案 0 :(得分:6)
在尝试呈现值之前,您应该能够使用Dreamweaver条件区域来检查值。
例如:
<!-- TemplateBeginIf cond="Component.Fields.Field" -->
@@Component.Fields.Field@@
<!-- TemplateEndIf -->
答案 1 :(得分:2)
您可以使用StringLength(object parameter)
函数,如果该字段为空或者无法确定参数的字符串长度,它将返回0。总而言之,它应该是这样的:
<!-- TemplateBeginIf cond="StringLength(Component.Fields.Field) > 0" -->
<b>Value is not empty<b>
<p>@@Component.Fields.Field@@</p>
<!-- TemplateEndIf -->
这可能是您更新的问题的答案:
<!-- TemplateBeginIf cond="Component.Fields.EMBFIELD.text" -->
<!-- TemplateBeginRepeat name="Component.Fields.EMBFIELD" -->
@@RenderComponentField("EMBFIELD[${TemplateRepeatIndex}].text", 0)@@
<!-- TemplateEndRepeat -->
<!-- TemplateEndIf -->
答案 2 :(得分:0)
我们在访问嵌入式架构字段时遇到了同样的错误,并且在使用构建器和调试dwt进行了大量的来回之后,理解错误是关于不在最后一个双qoute和 - 之间放置空格&GT;在TemplateBeginIf语句中。 : DWT Mediator出错:
<!-- TemplateBeginIf cond="EMBEDFIELD.internalLink || EMBEDFIELD.externalLink || EMBEDFIELD.label"-->
&#13;
以下不会出错:
<!-- TemplateBeginIf cond="EMBEDFIELD.internalLink || EMBEDFIELD.externalLink || EMBEDFIELD.label"<PUT_A_SPACE_HERE>-->
&#13;
可能是任何围绕RenderComponentField语句的TemplateBeginIf都会出错。 希望这有助于某人