Sitecore Publishable标志使无法从主数据库获取项()
我正在使用sitecore 6.6.0(版本120918)。从sitecore管理门户,我去关闭一个项目的可发布标志(见图) 在此之后,Sitecore Publishable标志使无法从主数据库获取项(),sitecore,Sitecore,我正在使用sitecore 6.6.0(版本120918)。从sitecore管理门户,我去关闭一个项目的可发布标志(见图) 在此之后,Sitecore.Data.Database.GetDatabase(“master”).GetItem(“{itemID}”)返回null 如果我再次打开Publishable标志,GetItem()返回正确的项目。这种行为的原因是什么可发布设置控制发布到Web数据库的能力。为什么它会影响对主数据库的GetItem()API调用?我现在发现原因是siteco
Sitecore.Data.Database.GetDatabase(“master”).GetItem(“{itemID}”)
返回null
如果我再次打开Publishable标志,
GetItem()
返回正确的项目。这种行为的原因是什么可发布设置控制发布到Web数据库的能力。为什么它会影响对主数据库的GetItem()
API调用?我现在发现原因是sitecore预览功能。在我之前使用GetItem()
进行的检查中,我碰巧在早期作为sitecore管理员使用了预览功能。之后,我的整个公共站点进入预览模式(有点烦人),因此该项目不再可访问(甚至通过主数据库API调用)
根据我的发现,以下是规则:
- 如果项目不可发布且网站处于预览模式,
返回nullSitecore.Data.Database.GetDatabase(“master”).GetItem(“{itemID}”)
- 无法预览不可发布的项目。Sitecore甚至似乎没有加载该项目的子布局
我将在另一个问题中提问,为什么预览功能会对不可发布的项目设置这样的限制。我找到了一种解决方法,用于您确实需要从
内容数据库(即主数据库)中读取而不希望发布项目的情况。例如,这可能是用户生成的内容。在Active Commerce中,我们遇到了诸如愿望列表之类的内容,这些内容总是在预览或非阶段性环境中从主目录中读取,并在阶段性环境中通过web服务访问
通过将Sitecore.Context.Site.DisableFiltering
设置为true
,将禁用对不可发布项目的筛选。我已经实现了一个简单的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}");
}
在我的机器上工作:)完全按照你所做的做了,它会返回物品…你是在“实时”模式下运行吗?谢谢大家尝试!不,我没有使用直播模式。我们使用web数据库查看公共网站上发布的内容。但在某些特殊情况下,我们直接访问主数据库以获取某些项目,这样它就可以显示适当的预览。在预览模式下,它仍在主数据库中工作,但它向用户显示了网站交付时的外观-预览-这就是为什么有一个日期控件,您可以设置将来可发布的内容,并更改预览日期,以确保它在正确的日期变为可见等。。。不考虑发布限制的预览不会有很大帮助:)谢谢Richard。这很有意义。不幸的是,这无助于我们的事业。:-)ItemFilteringDisabler解决了我的问题!