Переопределить рендеринг зоны

Я пытаюсь переопределить рендеринг фактического шаблона зоны.

Он делает что-то вроде этого:

<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), но не повезло.


person Darthg8r    schedule 26.02.2013    source источник


Ответы (3)


Что вам нужно сделать, так это перечислить фигуры, которые он имеет под собой, и вызвать Display для каждой из них. Приведение к IEnumerable должно помочь.

person Bertrand Le Roy    schedule 26.02.2013

Этот шаблон учитывает свойства Attribute и Classes формы и задает поле Id в соответствии с соглашениями Orchard. Итак, для разработчика шаблон с таким кодом ведет себя вполне ожидаемо.

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

Если вы хотите переопределить, например, зону Content, создайте страницу с именем zone-content.cshtml в папке Views проекта вашей темы и скопируйте в нее приведенный выше код.

person Henk van Boeijen    schedule 22.01.2014
comment
Плюс один за объяснение того, как переопределить шаблон для конкретной зоны. - person Daniel Leiszen; 19.02.2015
comment
Нет необходимости вручную устанавливать Model.Id (и он выдает ошибку, если Model.Hint не установлен). Если вы просто удалите эту строку и замените раздел на div, вы получите точный тот же результат, что и для зоны по умолчанию. форма в Orchard.Core.Shapes.CoreShapes. - person Lawyerson; 11.04.2018

Вы можете сделать так, как предложил Бертран (что дает вам больше контроля над визуализацией каждого элемента в зоне), или сделать @DisplayChildren(Model).

person Piotr Szmyd    schedule 27.02.2013