代码之家  ›  专栏  ›  技术社区  ›  Bryan

如何在SiteCore页面编辑器中挂钩保存事件?

  •  2
  • Bryan  · 技术社区  · 15 年前

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

    怎么做到的?我查阅了很多文档…感觉我错过了一些基本的东西。当然可以在这里添加我自己的事件处理程序吗?

    注意:我希望在页面编辑器中进行内联编辑。这似乎是SiteCore缺少的一个非常基本的功能。我当然可以看到在复选框字段中使用复选框条目(这是多么疯狂的想法?!?!)。编辑的唯一内置选项似乎是文本框或richtext编辑器。我是否遗漏了一些明显的东西?

    3 回复  |  直到 11 年前
        1
  •  2
  •   Bartłomiej Mucha    11 年前

    好啊。。。在SiteCore支持部门的帮助下,我终于找到了这个问题的答案。为了让页面编辑器获取字段的新值,需要调用sitecore.webedit.setFieldValue()javascript函数。这将创建一个隐藏的输入字段,然后在单击“保存”或“保存/关闭”按钮时,页面编辑器将读取该字段。

    //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处理程序,它调用这个SiteCoreJS函数。注: 我认为这需要Sitecore 6.2 .

        2
  •  0
  •   dc5    11 年前

    当我需要构建一个自定义控件时,我会在正常模式下使用它,然后在用户处于编辑模式时使用sc:text(或其他)。这样我就可以毫无麻烦地获得所有网站核心的好处。一种方法是使用多视图,它看起来有点像:

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

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

        3
  •  0
  •   Bartłomiej Mucha    11 年前

    您还可以使用字段编辑器弹出一个弹出窗口来编辑所需的信息。 比如说,你会:

    <sc:EditFrame runat="server" Buttons="MyThing">
    <!-- any html, or other controls -->
    </sc:EditFrame>
    

    因此,当处于页面编辑器(编辑)模式的人将鼠标悬停在您放入编辑框的HTML上时,他们将得到一个弹出菜单。在这个菜单中,您可以显示任意数量的命令,普通的命令是一个“编辑”选项,然后弹出一个对话框,您可以在其中编辑树中任何内容项中所需的任何字段。

    如何配置可用选项?通过buttons属性,它必须指向核心数据库中的/sitecore/content/applications/webedit/edit frame按钮下的文件夹(请参阅默认文件夹作为示例)。您还可以在其中设置要编辑的字段。在上面的代码片段中,SiteCore希望找到一个名为Mything的文件夹。

    它如何知道要从哪个项目编辑字段?如果不指定任何内容,它将是context.item,如果需要其他内容,请使用EditFrame控件的DataSource属性,并将其设置为例如某个ID。