Sana gerçektenContentDatabase
(yani ana veritabanından) okuma gerekiyor ve ürün yayınlamak istemiyoruz durumlar için bu bir yol buldum. Bu, örneğin kullanıcı tarafından oluşturulmuş içerik olabilir. Aktif Ticaret'te, önizleme veya aşamasız ortamlarda her zaman ana öğeden okunan ve aşamalı ortamlarda web hizmeti aracılığıyla erişilen Dilek Listeleri gibi içeriğe gireriz.
Sitecore.Context.Site.DisableFiltering
ayarını true
olarak ayarlayarak, kaldırılamaz öğelerin filtrelenmesi devre dışı bırakılacaktır. İsteğe bağlı bir koşul ile filtrelemeyi geçici olarak devre dışı bırakmanıza olanak tanıyan basit bir IDisposable
uyguladık.
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;
}
}
}
}
Örnek kullanım:
using (new ItemFilteringDisabler(!Sitecore.Context.PageMode.IsNormal))
{
Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}");
}
İşleri benim makinede :) üzerinde ... –
"Canlı" modunda çalıştırıyor musunuz tam olarak ne yaptığını ve onu öğesi döndürür mü? –
Bunu denediğiniz için teşekkürler çocuklar! Hayır, Live modunu kullanmıyorum. Yayınlanan içeriği herkese açık sitede görüntülemek için web veritabanını kullanıyoruz. Ancak bazı özel senaryolarda bazı öğeleri almak için ana veritabanına doğrudan erişiyoruz. – ravinsp