2014-04-07 59 views
2

我有一個用戶需要從項目的下拉列表中選擇字段值的用例。這樣做的問題是需要在每個項目(全部使用相同模板)上動態構建droplist,以便僅顯示文件夾中字段值等於當前項目ID的項目。如果你已經輸了,這裏的結構的一個例子:將Sitecore模板字段源值設置爲動態Sitecore查詢

- sitecore 
    - content 
    - Home 
     - ContentItem1 (with droplist) 
    - Site Data 
     - SelectableItem1(ContentItem1 selected in 'itemid' field) 
     - SelectableItem2(ContentItem1 selected in 'itemid' field) 
     - SelectableItem3(ContentItem1 not selected in 'itemid' field) 
     - SelectableItem4(ContentItem1 not selected in 'itemid' field) 
    - templates 
    - ContentItem1Template 
     - Droplist field (source set to below query) 

我希望我的查詢,通過獲取具有ContentItem1的ID作爲「爲itemid」字段的項目清單動態分配ContentItem1的droplist場源值,但通過將字段值與ContentItem1標識的值進行比較。我試圖通過該字段的值進行比較ID令牌這樣做,就像這樣:不管我什麼價值的ID(「的$ id」,$ ID

query:/sitecore/content/Site Data/*[@#itemid#=$id] 

,@id,「@id」, @@ id,'@@ id'等),它不想在項目級別上解析。有沒有辦法做到這一點,以便我可以重用這個ContentItem1Template所有我需要相同功能的項目?

回答

2

如果您使用的是Sitecore 7,那麼您可以使用編碼的字段數據源。這將允許您使用任何自定義邏輯來指定應該出現在列表中的項目。

創建一個類,該類實現IDataSourceListQuery()方法,該方法返回項目列表作爲字段的源。然後使用前綴code:將您的字段的來源設置爲您的方法,例如, code:MyProject.Custom.FieldDataSource,MyProject.Custom

這些文章可以幫助你

+0

這真是棒極了!謝謝您的幫助! – ddore95

0

您可能需要包裹ID在單引號,像這樣:

query:/sitecore/content/#Site Data#/*[@itemid='$id'] 

也就是說,這似乎是一個不錯的選擇使用Sitecore的鏈接數據庫。無論何時將SelectableItem關聯到ContentItem,Sitecore都會將該關係存儲在Link數據庫中(只要您使用支持該關係的字段(如DropLink,DropTree,GeneralLink等)引用該關係即可)。

從那裏,你可以使用Globals.LinkDatabase.GetReferrers(contentItem)contentItem.Links.GetValidLinks()讓所有涉及項目內容項目的列表。這是您可以通過模板ID過濾列表的位置,以確保您只返回SelectableItems。