在sitecore中,我有一个文件夹。我每季度更新一次。然后我必须转到另一个页面并手动链接到所有这些文章。我想知道是否有办法在另一页上自动列出这些文章。例如,如果文件夹有10篇文章,但只有9篇可以发布,那么我的主要登录页面将只显示9篇已发表的文章,而不是第10篇。合理?当然我可以手动执行此操作,但必须有一种方法可以使其更加自动化。
答案 0 :(得分:1)
不完全确定我理解正确。但是这里有。
var folder = Sitecore.Context.Database.GetItem("your-folder");
var children = folder.GetChildren();
虽然简化了,但从你所描述的内容来看,其实并没有什么。在普通网站上,您的上下文数据库将是" web"只有9篇可发表的文章将在那里。无论是什么" unublishable"从来没有到过这里。
如果有更多的话题,我认为您的问题需要更多信息。
答案 1 :(得分:0)
好的,让我们在更详细的视图中详细介绍一下 - 马克答案的几个笔记。在实际生产环境中,您可能至少有2台服务器 - 创作(内容主或CM)和内容交付(CD)。 YouкSitecore桌面仅在CM上运行,并将项目发布到CD数据库。您将获得在CM上运行的网站代码的副本(至少用于页面预览)和CD上的实际上您的网站。
仅发布的项目来到CD数据库,因此具有上面的代码
var folder = Sitecore.Context.Database.GetItem("your-folder");
var children = folder.GetChildren();
在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();
}
}