Sitecore - 如果占位符为空,则隐藏渲染

时间:2014-06-23 09:03:13

标签: sitecore sitecore7 sitecore-mvc

我有一个相当简单的Sitecore MVC渲染,其中包含一个标题字段和一个占位符:

<section>
    <div class="container">
        <h2 class="m-header"><span>@Html.Sitecore().Field("PromoItemsHeader")</span></h2>

        <div class="l-section grid">
            @Html.Sitecore().Placeholder("PromoItems")
        </div>
    </div>
</section>

如果占位符包含项目,我希望此呈现仅在页面编辑模式 之外显示。这似乎应该很简单,但我找不到明显/干净的方法。

2 个答案:

答案 0 :(得分:8)

试试这个:

Sitecore.Context.Page.Renderings
    .Count(r => r.Placeholder.IndexOf("PromoItems", StringComparison.OrdinalIgnoreCase) > -1)

如果您只想使用数据源进行渲染,可以添加:

Sitecore.Context.Page.Renderings
    .Where(r => r.Placeholder.IndexOf("PromoItems", StringComparison.OrdinalIgnoreCase) > -1)
    .Count(r => !string.IsNullOrWhiteSpace(r.Settings.DataSource))

我现在只需在视图模型中添加一个新属性,如果占位符包含任何渲染,则返回该属性。

答案 1 :(得分:2)

Sitecore.Context.Page.Renderings是我在以前的Sitecore 7.x webforms项目中使用的,但它似乎在Sitecore 8.x MVC + Glass版本中对我无效 - 渲染我的布局视图中的集合总是空的。不确定这是不是8件事,玻璃事件还是&#34;我以某种方式搞砸了我的项目&#34;的事情。

工作是什么:

var pageContext = Sitecore.Mvc.Presentation.PageContext.Current;
var pageDefinition = pageContext.PageDefinition;
bool showSidebar = pageDefinition.Renderings.Any(x => x.Placeholder == "left");