覆盖区域渲染

时间:2013-02-26 06:08:20

标签: orchardcms

我正在尝试覆盖实际区域模板的渲染。

它呈现如下:

<div class="zone zone-hero" shape-id="13">      

    <div class="inner" shape-id="14">
        content is stuffed in here
    </div>

</div>

我发现如果我将Zone.cshtml放入模板的根目录中,我可以覆盖它的渲染。我无法弄清楚的是如何让它呈现其小部件和内容(如果存在)。我尝试使用@Display(Model.Content),但没有运气。

3 个答案:

答案 0 :(得分:4)

此模板遵循形状的Attribute和Classes属性,并根据Orchard的约定设置Id字段。因此,对于开发人员来说,具有此代码的模板的行为与预期完全相同。

@{
    Model.Id = string.Concat("zone-", Model.Hint.ToLowerInvariant());
    var tag = Tag(Model, "section");
}
@tag.StartElement
@DisplayChildren(Model)
@tag.EndElement

如果要覆盖例如内容区域,请在主题项目的Views文件夹中创建名为zone-content.cshtml的页面,并将上面的代码复制到其中。

答案 1 :(得分:1)

你可以按照Bertrand的建议(这可以让你更好地控制渲染区域中的每个元素),或者@DisplayChildren(Model)

答案 2 :(得分:0)

您需要做的是枚举它自身下面的形状,并在每个形状上调用Display。转换为IEnumerable应该可以解决问题。