【问题标题】:Sitecore: Get child items of parent item when the items are in publish restricted periodSitecore:当项目处于发布限制期间时获取父项目的子项目
【发布时间】:2014-01-28 19:00:23
【问题描述】:

我正在尝试获取某个项目的子项目。其中一些子项目应用了发布限制并且结束日期已过期。 我想收集所有子项目,无论它是否过期。 当我调试我的代码时,我只得到了那些有结束日期的项目。 我使用了以下代码

var childItems=item.GetChildren();

子项集合仅收集那些有结束日期的子项。

有什么方法可以收集所有的物品吗??

我在 sitecore 论坛上问过,他们要求从主数据库中获取子项目,但这种方法也不起作用。我也尝试过以下代码。

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Item parentNode= master.GetItem("ItemNAme");
var childItems=parentNode.GetChildren();

childitems 只收集那些结束日期未过期的子项目 请为此建议我一些解决方案

提前致谢

-Vaibhav

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    您所说的访问主数据库是正确的,因为主数据库包含所有内容的所有版本,而不仅仅是公开发布的内容。我会将您的代码包装在 SecurityDisabler() 中,以防它以某种方式干扰获取正确的项目。

    using(new SecurityDisabler()) {
        Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
        Item parentNode= master.GetItem("ItemNAme");
        var childItems=parentNode.GetChildren();
    }
    

    【讨论】:

    • 谢谢马克..!!!它正在工作。但我对此有一个疑问。我每次在我各自的页面加载事件中都调用这个方法。对安全目的不利吗?或者它会伤害什么?谢谢-Vaibhav
    • 在我观察到的更多事情上,我在处理这个问题时遇到了一些奇怪的事情。应用安全禁用程序后,它开始工作,当删除安全禁用程序时,它现在也可以工作了。 :D 不知道。实际上它有时会起作用,并且有时会停止工作(当我不使用安全禁用程序时)。再次感谢您的帮助标记
    • 它不会损害任何东西,它只是绕过该代码块中的所有安全设置。将其视为以超级用户身份执行该代码块。只要确保你真的想做那个代码所做的事情......去找主人并得到那些物品。公众可以看到还是在管理部分背后? (反问)。
    【解决方案2】:

    您发现此问题的原因与安全性无关。

    当 IsPreview 为 true(基于 cookie)并且允许对站点配置进行过滤时,您将不会获得具有发布限制的项目。此功能来自 PageEditor Preview 的实现,您需要在其中浏览主数据库,就像不可见的已发布项目一样。

    Sitecore Publishable flag makes it impossible to GetItem() from Master database上查看答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2021-01-23
      • 2019-12-22
      相关资源
      最近更新 更多