我正在为我的内容作者创建一个自定义编辑控件,以便在页面编辑器中使用。当然,这意味着我希望我的控件在用户单击“保存”按钮时将数据保存到项目中。
这是怎么做到的?我看了很多文档...感觉我错过了一些基本的东西。当然,我可以在这里添加自己的事件处理程序吗?
注意:我希望在页面编辑器中进行内联编辑。这似乎是Sitecore缺少的一个非常基本的功能。我当然也可以看到复选框条目也用于复选框字段(多么疯狂的想法?!?!)。唯一的内置编辑选项似乎是文本框或RichText编辑器。我错过了一些明显的东西吗?
答案 0 :(得分:2)
好的......在Sitecore支持的一些帮助之后,我终于得到了这个问题的答案。为了让页面编辑器获取字段的新值,需要调用Sitecore.WebEdit.setFieldValue()javascript函数。这将创建一个隐藏的输入字段,当单击“保存”或“保存/关闭”按钮时,PageEditor会读取该字段。
//RenderItem is the item in question, DropListField is the string name of
//the target Droplist field we want rendered
string itemID = RenderItem.ID.ToShortID().ToString();
string fieldID = RenderItem.Fields[DropListField].ID.ToShortID().ToString();
string language = RenderItem.Language.ToString();
string version = RenderItem.Version.ToString();
string revision = RenderItem[FieldIDs.Revision].Replace("-", string.Empty);
ddlList.Attributes.Add("onchange", string.Format("var ddl = getElementById('{5}');var itemURI = new Sitecore.ItemUri('{0}','{1}','{2}','{3}');Sitecore.WebEdit.setFieldValue(itemURI,'{4}',ddl.options[ddl.selectedIndex].value);",itemID,language,version,revision,fieldID,ddlList.ClientID));
所以,基本上我们只是为DropDownList添加一个客户端onchange处理程序,它调用此Sitecore js函数。注意:我认为这需要Sitecore 6.2 。
答案 1 :(得分:0)
当我需要构建自定义控件时,我在普通模式下使用它,然后在用户处于编辑模式时使用sc:Text(或其他)。这样我就可以毫不费力地获得Sitecore的所有优点。一种方法是使用Multiview,它看起来有点像:
<MultiView>
<View id=NormalView>
<MyAwesomeCustomControl />
</View>
<View id=EditView>
<sc:Text />
</View>
</MultiView>
然后在代码隐藏中确保为正确的模式选择正确的视图。
答案 2 :(得分:0)
您还可以使用字段编辑器弹出一个弹出窗口来编辑您需要的信息。 比如说你做:
<sc:EditFrame runat="server" Buttons="MyThing">
<!-- any html, or other controls -->
</sc:EditFrame>
因此,当某个处于PageEditor(编辑)模式的人悬停在你放在EditFrame中的html时,他们会得到一个弹出菜单。在此菜单中,您可以显示任意数量的命令,正常的命令将是一个“编辑”选项,然后弹出一个对话框,您可以在该对话框中编辑树中任何内容项目所需的任何字段。
如何配置可用选项?通过Buttons属性,它必须指向/ sitecore / content / Applications / WebEdit / Edit Frame Buttons下的核心数据库中的文件夹(参见默认的一个例子)。您也可以在那里设置要编辑的字段。在上面的代码段中,Sitecore希望找到一个名为MyThing的文件夹。
如何知道要编辑字段的项目?如果你没有指定任何东西,它将是Context.Item,如果你想要别的东西,使用editFrame控件的datasource属性并将其设置为例如一些ID。