2010-01-12 84 views
2

我正在爲頁面編輯器中的內容作者創建一個自定義編輯控件。當然這意味着當用戶點擊保存按鈕時,我想讓我的控件將數據保存到一個Item中。如何掛鉤Sitecore頁面編輯器中的保存事件?

這是如何完成的?我瀏覽了很多文檔,覺得我缺少一些基本的東西。當然,我可以在這裏添加我自己的事件處理程序?

注意:我希望這是在頁面編輯器中進行INLINE編輯。這似乎是Sitecore中缺少的一項非常基本的功能。我當然可以看到使用複選框條目也是一個複選框字段(多麼瘋狂的概念?!?!)。編輯的唯一內置選項似乎是一個文本框或一個RichText編輯器。我錯過了明顯的東西嗎?

回答

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)); 

所以,基本上我們只需添加一個客戶端平變化處理程序調用該Sitecore的js函數DropDownList的。注:我相信這需要Sitecore 6.2

0

當我需要構建自定義控件時,我在普通模式下使用它,然後在用戶處於編輯模式時使用sc:Text(或其他)。這樣我可以毫無麻煩地獲得所有Sitecore的優點。這樣做的一個方法是使用多視點,看起來有點像:

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

然後在後臺代碼確保你選擇正確的模式右視圖。

+0

不幸的是,這與我所需要的完全相反。我想在編輯項目的Droplist字段時顯示一個asp:DropDownList。這樣用戶就可以從下拉菜單中選擇一個新的值,就像在Content Editor中一樣,不用離開頁面編輯器。 – Bryan 2010-01-13 20:51:39

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。

+0

謝謝。這可能是我最終要做的。我只是有點煩惱,創建一個INLINE編輯選項是如此困難。 – Bryan 2010-01-16 00:16:58

相關問題