2

我正在为我的内容作者创建一个自定义编辑控件,以便在页面编辑器中使用。当然,这意味着我希望我的控件在用户单击“保存”按钮时将数据保存到项目中。

这是怎么做到的?我浏览了许多文档...感觉好像我缺少一些基本的东西。当然我可以在这里添加我自己的事件处理程序?

注意:我希望这是页面编辑器中的内联编辑。这似乎是 Sitecore 缺少的一个非常基本的功能。我当然可以看到对复选框字段也使用复选框条目(多么疯狂的概念?!?!)。唯一的内置编辑选项似乎是文本框或 RichText 编辑器。我错过了一些明显的东西吗?

4

3 回答 3

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

于 2010-01-20T00:47:29.650 回答
0

当我需要构建自定义控件时,我会在普通模式下使用它,然后在用户处于编辑模式时只使用 sc:Text(或其他)。这样我就可以毫不费力地获得 Sitecore 的所有优点。一种方法是使用看起来有点像的 Multiview:

<MultiView>
  <View id=NormalView>
    <MyAwesomeCustomControl />
  </View>
  <View id=EditView>
    <sc:Text />
  </View>
</MultiView>

然后在代码隐藏中确保为正确的模式选择正确的视图。

于 2010-01-13T05:31:55.637 回答
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。

于 2010-01-15T12:46:41.547 回答