【问题标题】:How do I hook the Save event in Sitecore Page Editor?如何在 Sitecore 页面编辑器中挂钩 Save 事件?
【发布时间】:2010-01-12 19:49:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: sitecore page-editor


    【解决方案1】:

    好的...在 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));
    

    所以,基本上我们只是为调用这个 Sitecore js 函数的 DropDownList 添加一个客户端 onchange 处理程序。注意:我认为这需要 Sitecore 6.2

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 不幸的是,这与我所需要的完全相反。我想在为我的项目编辑 Droplist 字段时显示 asp:DropDownList。这样用户就可以从下拉列表中选择一个新值,就像在内容编辑器中一样,而无需离开页面编辑器。
      【解决方案3】:

      您还可以使用字段编辑器弹出一个弹出窗口来编辑您需要的信息。 例如,假设您这样做:

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

      因此,当处于 PageEditor(编辑)模式的人将鼠标悬停在您放入 EditFrame 的 html 上时,他们将获得一个弹出菜单。在此菜单中,您可以显示任意数量的命令,通常是“编辑”选项,然后弹出一个对话框,您可以在树中的任何内容项中编辑您想要的任何字段。

      您如何配置可用选项?通过 Buttons 属性,它必须指向核心数据库中 /sitecore/content/Applications/WebEdit/Edit Frame Buttons 下的一个文件夹(以默认的为例)。您还可以在其中设置要编辑的字段。在上面的 sn-p 中,Sitecore 期望找到一个名为 MyThing 的文件夹。

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

      【讨论】:

      • 谢谢。这大概就是我最终会做的事情。我只是有点恼火,创建一个内联编辑选项是如此困难。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多