如果查询没有结果,则隐藏投影小部件

时间:2013-06-11 08:43:37

标签: widget orchardcms projection

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

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

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

一种解决方案是在每次添加新广告系列时编辑窗口小部件图层。但我希望有一个比这更稳固的解决方案。

摘要:
我们想在查询返回空结果时隐藏整个投影小部件。

// Madelene

2 个答案:

答案 0 :(得分: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的文件并粘贴此内容即可。如果您想了解它是如何完成的,可以查看之前的内容。

答案 1 :(得分:0)

  1. 您可以覆盖Projection窗口小部件,然后可以在cshtml文件中编辑该窗口小部件的代码。这是迄今为止最简单的方法。
    1. 您可以创建一个自定义过滤器,检查依赖项,如果不满足该依赖项则不返回任何项目(这是一种更难的方法)