我们在SDL Tridion 2009 SP1中有SiteEdit 2009 SP2,它适用于正常发布的页面。如果我们在页面中有单个动态组件演示(DCP),它也可以正常工作。但是当我们在页面上有多个DCP时,它只占用第一个DCP并忽略所有其他DCP。
这是我的代码
<xsl:variable name="SE_CP_MarkUP">
<![CDATA[ <!-- Start SiteEdit Component Presentation: {"ID" : "cp_%ID%", "ComponentID" : "%ID%", "ComponentTemplateID" : "tcm:XX-XXXXX-32", "Version" : 0, "IsQueryBased" : true } -->]]>
我在循环中使用此变量
<xsl:value-of select="XXXX:RegexStringReplace($SE_CP_MarkUP,'%ID%',@ID)" disable-output-escaping="yes"/>
请建议可能出现的问题?
更多细节:
生成的HTML
<div>
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_tcm:13-287142", "ComponentID" : "tcm:13-287142", "ComponentTemplateID" : "tcm:13-286965-32", "Version" : 3, "IsQueryBased" : true } -->
HTMLConent
</div>
<div>
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_tcm:13-287162", "ComponentID" : "tcm:13-287162", "ComponentTemplateID" : "tcm:13-286965-32", "Version" : 2, "IsQueryBased" : true } -->
HTMLConent
</div>
<div>
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_tcm:13-287204", "ComponentID" : "tcm:13-287204", "ComponentTemplateID" : "tcm:13-286965-32", "Version" : 1, "IsQueryBased" : true } -->
HTMLConent
</div>
<div>
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_tcm:13-287234", "ComponentID" : "tcm:13-287234", "ComponentTemplateID" : "tcm:13-286965-32", "Version" : 4, "IsQueryBased" : true } -->
HTMLConent
</div>
<div>
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_tcm:13-287251", "ComponentID" : "tcm:13-287251", "ComponentTemplateID" : "tcm:13-286965-32", "Version" : 3, "IsQueryBased" : true } -->
HTMLConent
</div>
SiteEdit设置
<!-- SiteEdit Settings: { "PageID" : "tcm:13-287332-64", "PageVersion" : 2, "TargetTypeID" : "", "ComponentPresentationLocation" : 1, "BluePrinting" : { "PageContext" : "tcm:0-8-1", "ComponentContext" : "tcm:0-13-1", "PublishContext" : "tcm:0-13-1"}} -->
我在运行时获得了高于html的值。我只能在第一个CP上悬停时使用siteedit打开第一个组件,如果我将鼠标悬停在任何其他CP上,则不会发生任何事情。
页面上也没有JS错误。
谢谢, Vikas Kumar
答案 0 :(得分:7)
感谢您看到这一点,我刚刚意识到SiteEdit正在发挥作用。所有SiteEdit标记div都具有相同的绝对位置,这样无论我在哪里悬停,div都显示在顶部。
我正在与设计团队合作对其进行排序。
谢谢, Vikas Kumar
答案 1 :(得分:5)
SiteEdit组件表示标记应始终包含在像DIV这样的HTML元素中,这样SiteEdit就可以区分组件表示的开头和结尾。
所以在你的循环中你应该输出如下内容:
<div>
<xsl:value-of select="XXXX:RegexStringReplace($SE_CP_MarkUP,'%ID%',@ID)" disable-output-escaping="yes"/>
<!-- output the content here -->
</div>
答案 2 :(得分:2)
通常我会说这是因为没有给每个组件演示文稿一个唯一的ID。 但看起来你已经覆盖了它。
我假设你出于对简洁的关注而省略了你的问题中的设置评论,对吗?
您是否有机会向我们提供整个HTML?当然,删除所有敏感内容,但请在完成后确认您仍然遇到问题。
答案 3 :(得分:1)
您确定用户拥有所有组件的权利吗?它们都存在吗
检查浏览器的开发人员工具可能最简单。找到GetComponentAndSchemas
的请求。
在该请求的主体中(因此发送到服务器的部分),您将找到SiteEdit要求的所有组件。因此,如果这不包括所有的组件,则它在某种程度上无法在HTML中找到它们。
然后在该请求的响应中,您应该找到所请求的组件以及它们所基于的模式。如果某些组件不存在,它们会以某种方式在服务器上过滤掉。很可能是因为用户没有权利,但也可能是他们在出版物13中不存在。
答案 4 :(得分:1)
我遇到了同样的问题,特别是如果你在siteedit span / div标签周围有任何html5标签。你查过这篇文章(来自Bart),它可能有所帮助。它对我有帮助。
http://www.sdltridionworld.com/articles/sdltridion2011/siteedit_zindex.aspx