Sitecore页面编辑器与移动和添加组件有关的问题

Sitecore页面编辑器与移动和添加组件有关的问题,sitecore,page-editor,sitecore7.1,Sitecore,Page Editor,Sitecore7.1,我有一个页面,在一个占位符中包含多个组件,不同的组件类型,以及相同类型的多个组件。页面上有3个按特定顺序排列的组件。人们认为更改订单是可取的。选择该组件可以移动该组件,并且该组件似乎可以正常工作,直到单击“保存”,然后该组件消失。这与前一段时间的帖子非常相似。我没有发现任何迹象表明此错误已被修复。作为参考,我使用Sitecore 7.1(版本140324) 在此之后,尝试将相同类型的组件添加到页面中也不起作用。通过演示文稿详细信息将页面重置为初始状态后,很明显向占位符添加组件一开始就有问题。现在

我有一个页面,在一个占位符中包含多个组件,不同的组件类型,以及相同类型的多个组件。页面上有3个按特定顺序排列的组件。人们认为更改订单是可取的。选择该组件可以移动该组件,并且该组件似乎可以正常工作,直到单击“保存”,然后该组件消失。这与前一段时间的帖子非常相似。我没有发现任何迹象表明此错误已被修复。作为参考,我使用Sitecore 7.1(版本140324)

在此之后,尝试将相同类型的组件添加到页面中也不起作用。通过演示文稿详细信息将页面重置为初始状态后,很明显向占位符添加组件一开始就有问题。现在的解决方法是通过演示细节来操作页面,这对内容编辑器没有多大帮助。解决方法需要在字段中显式输入占位符,并在适用的情况下嵌套页面上的所有组件

Sitecore日志没有显示任何内容。移动组件后,浏览器控制台显示“无法分析命令参数”两次。关联的javascript:

this.parseCommandClick=函数(commandClick){
var msg=commandClick;
var commandParams=null;
var idx1=commandClick.indexOf(“”);
var idx2=commandClick.indexOf(“)”;
如果(idx1>=0&&idx2>idx1){
msg=commandClick.substring(0,idx1);
试一试{
commandParams=$sc.evalJSON(commandClick.substring(idx1+1,idx2));
}
捕获(e){
log(“无法解析命令参数”);
}
}
返回{message:msg,params:commandParams};
如果在页面的标准值中设置了演示文稿详细信息,则不会为某些组件指定占位符,也不会为其他组件嵌套占位符。通过删除添加的组件的特定占位符,然后移动它们并保存,可以将此问题复制到其他位置。这会导致该组件被删除。我不确定console日志与此直接相关

我正在试图弄清楚为什么会发生这种情况。

阅读一篇博客文章,你可能会遇到同样的问题。简言之,问题(被报告为bug)是:

页面编辑器检查插入控件的模板是否正确 /sitecore/templates/System/Layout/Renderings/Sublayout模板。 如果控件不基于该模板,则无法创建该控件 确定为次级布局


在我的例子中,这个问题出现在Sitecore 6.5中,并被认为在6.6 SP2中得到了修复,因此它肯定也会在7.1中得到修复。

看来Sitecore在默认情况下是如何工作的(从7.1开始),而不是修改和配置的问题。创建新实例后,我可以通过标准值中的演示文稿详细信息向页面添加组件来重新创建问题。问题是由于将占位符字段保留为空。如果是这种情况,则向页面添加组件会显示以下消息:“发生错误”,移动组件通常会导致删除。因此,解决此问题的方法是更改所有受影响项的标准值。当Sitecore处理空字段时,似乎会发生有趣的事情。这是我用来解决此问题的方法

Sitecore支持提供了一个额外的解决方案,以避免数据丢失:

将附着的布局定义文件放入 \Website\sitecore\shell\Applications\Page Modes文件夹并清除 浏览器缓存(替换js文件)。此脚本阻止组件 卸下并显示以下消息:“部件在视觉上 已移动,但如果将零部件移入,可能会丢失一些信息 请保存更改(如果禁用保存,请重新加载),以便 查看实际演示文稿并通过演示文稿移动组件 详细信息(功能区上的“高级”选项卡)。“请注意 解决方案未经过深入测试,建议您备份 解决方案,然后再应用任何更改

LayoutDefinition.js

Sitecore.LayoutDefinition=新函数(){
};
Sitecore.LayoutDefinition.insert=函数(占位符键,id){
var layoutDefinition=this.getLayoutDefinition();
var device=this.getDevice(layoutDefinition);
var r=新对象();
r[“@id”]=id;
r[“@ph”]=占位符键;
装置r.拼接(0,0,r);
此.setLayoutDefinition(layoutDefinition);
};
Sitecore.LayoutDefinition.getRendering=函数(uid){
var layoutDefinition=this.getLayoutDefinition();
var device=this.getDevice(layoutDefinition);
如果(!设备){
返回null;
}
对于(var n=0;n