我有一个内容部分提供了一个开始时间戳和结束时间戳选项。这两个字段用于定义内容项目应该显示的时间段。如何跳过在Orchard CMS中显示内容项目?
我现在很难实现跳过方法,而内容项目在时间段不跨越当前时间时不应显示/跳过。
挖的源代码,并试图找到我的方法的切入点取得了以下内容处理器
public class SkipContentHandler : Orchard.ContentManagement.Handlers.ContentHandler
{
protected override void BuildDisplayShape(Orchard.ContentManagement.Handlers.BuildDisplayContext aContext)
{
if (...) // my condition to process only content shapes which need to be skipped
{
aContext.Shape = null; // return null shape to skip it
}
}
}
这工作,但也有一些副作用
- 我不得不改变
BuildDisplayContext
的源代码作为Shape
通常只读 - 如果列表形状包含带有我的内容部分的内容项时可能显示错误的寻呼机,因为
Count()
呼叫ContainerPartDriver.Display()
之前BuildDisplay()
- 调用是一个异常跳过结果的内容项的URL,因为
View(null)
是abigious
那么执行的,你会在这里是正确的做法或有任何模块存在这样的工作吗?我找不到一个。
您可能想考虑只是在时间跨度到期时注册'unpublish'事件 – devqon
@devqon是的,我也考虑过这个问题。但是这需要一些定期运行的后台任务,并且此任务需要查询所有内容项以搜索正确的内容以取消发布。另外,我不喜欢取消发布,因为它可能会混淆以前点击发布按钮的用户。我仍然希望有办法以某种方式安全地中止渲染形状...... – ViRuSTriNiTy
您可能会成功阻止渲染,但是如上所述,您仍然会遇到'Count'问题。因此,分页可能会失败,并可能更多 – devqon