我在SDL Tridion 2011 SP1中为Dreamweaver TBB中的Component启用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>
字段的描述是:
Dreamweaver TBB是:
<!-- TemplateBeginRepeat name="AAA" -->
<!-- TemplateBeginRepeat name="Field.BBB" -->
<div>@@RenderComponentField(FieldPath+".CCC", 0)@@ </div>
<div>@@RenderComponentField(FieldPath+".DDD", 0)@@ </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
我在组件模板中添加了此TBB并预览了Component。它显示了没有错误的确切预览。
我的组件模板的高级源代码如下:
<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的限制吗?
答案 0 :(得分:2)
看起来您已经阅读了这个答案并尝试应用它:How to handle nested repeating regions in Dreamweaver TBBs in SDL Tridion 2011 SP1
在这种情况下,您是否也按照该答案中的调试提示进行操作?如果是这样,你看到的输出是什么?
许多人在编写像这样的结构时遇到了问题。我也不例外,我刚刚发现我可以通过知道关键变量是:Field,FieldPath和TemplateRepeatIndex来使大多数情况起作用。如有疑问,只需将此片段嵌入到每个TemplateBeginRepeat内的DWT中。
(FieldPath=@@FieldPath@@, TemplateRepeatIndex=@@TemplateRepeatIndex@@)
答案 1 :(得分:1)
我猜这些行有问题:
@@ RenderComponentField(FieldPath +“。CCC”,0)@@
我会尝试编写FieldPath +“。CCC”连接,看看你实际上可以获得该值。我的印象是,通过连接两个字符串来获得字段值是不可能的,并且它只能在@@string_field_name${templateRepeatIndex}@@
(与重复索引连接的字段值)上获得,但它是一个虽然我已经尝试了,所以真的看看你是否可以先得到输出值
如果仍然无法解决问题,您是否可以提供实际的组件XML和实际的DWT代码?根据提供的示例代码提供解决方案并不容易。
由于