基于Kentico当前文档类别的CMSRepeater条件

本文关键字:CMSRepeater 条件 文档 Kentico 基于 | 更新日期: 2023-09-27 18:18:51

我在我的模板中有一个部分,它必须在侧边栏中显示即将发生的事件。

场景:

1。

2。事件将被分配到特定类别。

3。想要显示这些事件的文档也会分配特定的类别

现在CmsRepeater必须根据当前文档类别拉出事件。

我有一些替代方法来做到这一点,使用相关的文档功能…但是将单个Event传递给所有想要显示的页面是一项乏味的工作。

基于Kentico当前文档类别的CMSRepeater条件

如果我理解正确,您正试图显示与当前文档具有相同类别的文档。然后,您可以将宏与WHERE条件结合使用。

这个宏遍历当前文档的类别并创建一个字符串,该字符串可以用作where条件的一部分。

{% val = "("; foreach(category in CurrentDocument.Categories) { val += category.CategoryId + "," }; val = val.TrimEnd(",")+")"; return val; #%}

然后在中继器的where条件字段中输入这样的内容。

DocumentID IN (SELECT DocumentID FROM CMS_DocumentCategory WHERE CategoryID IN {% val = "("; foreach(category in CurrentDocument.Categories) { val += category.CategoryId + "," }; val = val.TrimEnd(",")+")"; return val; #%})

它可能还需要一些边缘情况的改进,但它应该代表基本的思想。

如果您想从重复器中排除当前文档,我将包含这样的内容:

DocumentID != {% CurrentDocument.ID #%}

所以,最后的查询看起来像这样:

DocumentID != {% CurrentDocument.ID #%} AND DocumentID IN (SELECT DocumentID FROM CMS_DocumentCategory WHERE CategoryID IN {% val = "("; foreach(category in CurrentDocument.Categories) { val += category.CategoryId + "," }; val = val.TrimEnd(",")+")"; return val; #%})