我找到了解決這個問題的方法,其中您需要從ContentDatabase
(即主數據庫)讀取真實並且不希望項目發佈。例如,這可能是用戶生成的內容。在Active Commerce中,我們遇到了Wish List等內容,這些內容總是在預覽或非分階段環境中從主服務器讀取,並且可以在分階段環境中通過Web服務訪問。
通過設置Sitecore.Context.Site.DisableFiltering
到true
,unpublishable項的濾波將被禁用。我已經實現了一個簡單的IDisposable
,允許您使用可選條件臨時禁用篩選。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ActiveCommerce.SitecoreX
{
public class ItemFilteringDisabler : IDisposable
{
private readonly bool _disableCondition = true;
public ItemFilteringDisabler()
{
Sitecore.Context.Site.DisableFiltering = true;
}
public ItemFilteringDisabler(bool disableCondition)
{
_disableCondition = disableCondition;
if (_disableCondition)
{
Sitecore.Context.Site.DisableFiltering = true;
}
}
public void Dispose()
{
if (_disableCondition)
{
Sitecore.Context.Site.DisableFiltering = false;
}
}
}
}
使用例:
using (new ItemFilteringDisabler(!Sitecore.Context.PageMode.IsNormal))
{
Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}");
}
作品在我的機器上:)確實做到你做了什麼,並返回該項目... –
你在「現場」模式下運行? –
感謝您試用它們!不,我沒有使用Live模式。我們使用網絡數據庫查看公共網站上發佈的內容。但在一些特殊情況下,我們直接訪問master數據庫來獲取一些項目。 – ravinsp