0

我们正在使用 Orchard CMS 构建一个网站,其中添加了广告系列。这些添加通过标签(不是果园标签部分)链接到页面。

然后我们构建了一个自定义过滤器,在获取广告系列添加并在小部件中显示它们时考虑这些标签。

在某些页面上有标签,但没有与这些标签匹配的广告系列。此时我们想隐藏小部件。

一种解决方案是在每次添加新活动时编辑小部件层。但我想要一个比这更可靠的解决方案。

摘要:
当查询返回空结果时,我们希望隐藏整个投影小部件。

//玛德琳

4

2 回答 2

1

小部件中的大部分标记由Widget.Wrapper.cshtml模板呈现。您可以做的是根据小部件本身的内容过滤此包装器将呈现的内容。这样,如果小部件不呈现任何内容,您可以决定隐藏标题和其他区域。这是执行此操作的代码:

@using Orchard.ContentManagement;
@using Orchard.Widgets.Models;
@{
    var widgetPart = ((IContent)Model.ContentItem).As<WidgetPart>();
    var tag = Tag(Model, "article");
    var childContent = Display(Model.Child);
}

@if (!String.IsNullOrEmpty(Convert.ToString(childContent))) {
    @tag.StartElement
    if ((widgetPart.RenderTitle && HasText(widgetPart.Title)) || Model.Header != null) {
    <header>
        @if ((widgetPart.RenderTitle && HasText(widgetPart.Title))) {
        <h1>@widgetPart.Title</h1>
    }
        @Display(Model.Header)
    </header>
    }
    @childContent
    if (Model.Footer != null) {
    <footer>
        @Display(Model.Footer)
    </footer>
    }
@tag.EndElement
}

只需在您的主题中创建一个名为 Widget.Wrapper.cshtml 的文件并粘贴此内容。如果您想了解它是如何完成的,您可以查看之前的内容。

于 2013-06-11T11:52:40.677 回答
0
  1. 您可以覆盖 Projection 小部件,然后可以在 cshtml 文件中编辑该小部件的代码。这是迄今为止最简单的方法。

或者

  1. 您可以创建一个自定义过滤器来检查依赖关系,如果不满足该依赖关系,则不返回任何项目(这是一种更难的方法)
于 2013-06-11T09:32:59.047 回答