如何在Dreamweaver模板构建块中检查嵌入式架构中的字段是否为空

时间:2012-03-14 08:45:08

标签: tridion

我正在使用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

3 个答案:

答案 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出错:

&#13;
&#13;
<!-- TemplateBeginIf cond="EMBEDFIELD.internalLink || EMBEDFIELD.externalLink || EMBEDFIELD.label"-->
&#13;
&#13;
&#13;

以下不会出错:

&#13;
&#13;
<!-- TemplateBeginIf cond="EMBEDFIELD.internalLink || EMBEDFIELD.externalLink || EMBEDFIELD.label"<PUT_A_SPACE_HERE>-->
&#13;
&#13;
&#13;

可能是任何围绕RenderComponentField语句的TemplateBeginIf都会出错。 希望这有助于某人