需要一个页面来显示在文件夹中发布的所有文章

Need a page that shows all articles that are published within a folder

在 sitecore 中,我有一个装满文章的文件夹。我每季度更新一次。然后我必须转到另一个页面并手动 link 所有这些文章。我想知道是否有办法在另一个页面上自动列出这些文章。例如,如果文件夹中有 10 篇文章,但只有 9 篇是可发布的,那么我的主登录页面将只显示已发布的 9 篇文章,而不会显示第 10 篇。说得通?当然我可以手动执行此操作,但必须有一种方法可以使其更加自动化。

不完全确定我是否理解正确。但是这里是。

var folder = Sitecore.Context.Database.GetItem("your-folder");
var children = folder.GetChildren();

虽然简化了,但从您的描述来看,确实没有更多内容。在普通网站上,您的上下文数据库将为 "web",并且只有 9 篇可发表的文章在那里。不管是什么 "unpublishable" 永远不会到达这里。

如果有更多的曲折,我认为你的问题需要更多信息。

好的,让我们更详细地了解它 - 马克回答的几个注释。在实际生产环境中,您可能至少有 2 台服务器 - 创作(内容主控或 CM)和内容交付(CD)。 Youк Sitecore 桌面仅在 CM 上 运行,并将项目发布到 CD 数据库。您将在 CM(至少进行页面预览)和 CD 上获得您的网站代码 运行 的副本,实际上您的网站所在的位置。

仅发布的项目进入 CD 数据库,因此具有上面的代码

var folder = Sitecore.Context.Database.GetItem("your-folder");
var children = folder.GetChildren();

运行 on CD 将遍历那里已发布的项目(10 个中的 9 个)。

CM 上的相同代码 运行(比方说在页面预览模式下)将向您显示所有项目(其中 10 个),除非您在工作流程中分配了这些项目并明确检查工作流程状态,同时仅迭代和处理处于特定状态(例如最终状态)的项目。该代码可能如下所示:

IWorkflow workflow = item.Database.WorkflowProvider.GetWorkflow(item);

if (workflow != null)
{
    WorkflowState state = workflow.GetStates().FirstOrDefault(state => state.DisplayName == workflowStateName);

    if (state != null)
    {
        // check the state according your requirements and append to collection
        var children = folder.GetChildren();
    }
}