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

ric*_*eym 3 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>
Run Code Online (Sandbox Code Playgroud)

我希望此渲染在占位符包含项目时显示在页面编辑模式之外.这似乎应该很简单,但我找不到一个明显/干净的方法.

Kev*_*ühl 8

试试这个:

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

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

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

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


Geo*_*rge 5

Sitecore.Context.Page.Renderings是我在之前的 Sitecore 7.x Webforms 项目中使用的,但它在 Sitecore 8.x MVC + Glass land 中似乎对我不起作用 - 渲染集合在我的布局视图中始终为空。不确定这是 8.x 的事情、Glass 的事情还是“我不知何故搞砸了我的项目”的事情。

起作用的是:

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