2

我正在为 SDL Tridion 2011 SP1 中 Dreamweaver TBB 中的组件启用 SiteEdit 2009。

内容 XML:

<Content>
    <AAA>
        <BBB>
            <CCC>Title 1</CCC>
            <DDD>Name 1</DDD>
        </BBB>
        <BBB>
            <CCC>Title 2</CCC>
            <DDD>Name 2</DDD>
        </BBB>
    </AAA>

    <AAA>
        <BBB>
            <CCC>Title 1</CCC>
            <DDD>Name 1</DDD>
        </BBB>
        <BBB>
            <CCC>Title 2</CCC>
            <DDD>Name 2</DDD>
        </BBB>
    </AAA>

</Content>

字段说明如下:

  • AAA - 可重复的嵌入式架构
  • BBB - AAA 中的可重复嵌入模式

Dreamweaver TBB 是:

<!-- TemplateBeginRepeat name="AAA" -->

    <!-- TemplateBeginRepeat name="Field.BBB" -->
        <div>@@RenderComponentField(FieldPath+".CCC", 0)@@ </div>
        <div>@@RenderComponentField(FieldPath+".DDD", 0)@@ </div>
    <!-- TemplateEndRepeat -->

<!-- TemplateEndRepeat -->

我在组件模板中添加了这个 TBB 并预览了组件。它显示了没有错误的确切预览。

我的组件模板的高级源代码如下所示:

<TemplateInvocation>Dreamweaver TBB</TemplateInvocation>
<TemplateInvocation>Enable Inline Editing</TemplateInvocation>

当我将 SiteEdit 2009 的“启用内联编辑”添加到组件模板时,它显示此错误:

Debugging was started in process 'TcmTemplateDebugHost' with id 9244
Object reference not set to an instance of an object.
at Tridion.ContentManager.Templating.Templates.EnableInlineEditing.FindItemFieldXPath(String[] parts, Int32 currentIndex, ItemFields fields, Boolean& isMultiValue)
at Tridion.ContentManager.Templating.Templates.EnableInlineEditing.FindItemFieldXPath(String[] parts, Int32 currentIndex, ItemFields fields, Boolean& isMultiValue)
at Tridion.ContentManager.Templating.Templates.EnableInlineEditing.FindItemFieldXPath(String[] parts, Int32 currentIndex, ItemFields fields, Boolean& isMultiValue)
at Tridion.ContentManager.Templating.Templates.EnableInlineEditing.DetermineXPathForField(TcmUri componentUri, String fieldName, Boolean& isMultiValue)
at Tridion.ContentManager.Templating.Templates.EnableInlineEditing.ProcessComponentFieldTag(ITcdlTag tag)
at Tridion.ContentManager.Templating.TcdlParser.ProcessText(String text, TagHandler tagHandler, Boolean& wasModified)
at Tridion.ContentManager.Templating.TcdlParser.ProcessText(String text, TagHandler tagHandler)
at Tridion.ContentManager.Templating.TcdlParser.Process(Item item, TagHandler tagHandler)
at Tridion.ContentManager.Templating.Assembly.AssemblyMediator.Transform(Engine engine, Template template, Package package)
at Tridion.ContentManager.Templating.Assembly.CSharpSourceCodeMediator.RunTemplate(Engine engine, Package package, String templateUri, String className)
at Tridion.Templating.CSharpTemplate.CSharpSourceTemplate.Transform(Engine __engine, Package __package)
at Tridion.ContentManager.Templating.Assembly.CSharpSourceCodeMediator.Transform(Engine engine, Template template, Package package)
at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(Template template, Package package)
at Tridion.ContentManager.Templating.Engine.InvokeTemplate(Package package, TemplateInvocation templateInvocation, Template template)
at Tridion.ContentManager.Templating.Compound.CompoundTemplateMediator.Transform(Engine engine, Template templateToTransform, Package package)
at Tridion.ContentManager.Templating.Engine.ExecuteTemplate(Template template, Package package)
at Tridion.ContentManager.Templating.Engine.InvokeTemplate(Package package, TemplateInvocation templateInvocation, Template template)
at Tridion.ContentManager.Templating.Engine.TransformPackage(Template template, Package package)
at Tridion.ContentManager.Templating.Debugging.DebuggingEngine.Run()
at Tridion.ContentManager.Templating.Debugging.DebugSession.Run()       

任何人都可以分享他们对此的看法吗?

它是 SiteEdit 2009 的限制吗?

4

2 回答 2

2

看起来您已经阅读了此答案并尝试应用它:如何在 SDL Tridion 2011 SP1 中处理 Dreamweaver TBB 中的嵌套重复区域

在那种情况下,您是否也遵循了该答案中的调试提示?如果是这样,您看到的输出是什么?

许多人在编写这样的结构时遇到问题。我也不例外,我刚刚发现通过知道关键变量是:Field、FieldPath 和 TemplateRepeatIndex,我可以让大多数情况正常工作。如有疑问,只需将此片段嵌入到每个 TemplateBeginRepeat 内的 DWT 中。

(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)
于 2012-05-08T13:38:13.957 回答
1

我猜这些行有问题:

@@RenderComponentField(FieldPath+".CCC", 0)@@

我会尝试写出 FieldPath+".CCC" 连接,看看你实际上可以得到那个值。我的印象是,通过连接两个字符串是不可能获得字段值的,并且只能在@@string_field_name${templateRepeatIndex}@@(与重复索引连接的字段值)上实现,但我已经有一段时间没有尝试过了,所以真的看看你是否可以先得到输出的值

如果您仍然无法解决它,您是否可以提供实际的组件 XML 和实际的 DWT 代码?根据提供的示例代码提供解决方案并不容易。

谢谢

于 2012-05-08T15:02:05.933 回答