Можно ли в OctoberCMS вкладывать шаблоны?

Я начал смотреть на октябрь, и пока я могу создать макет по умолчанию и условно включить частичные части, где это необходимо. Я бы предпочел вложенные макеты.

т.е. Макет root не зависит ни от какого другого макета, но макет nav ссылается на макет root.

Это возможно?

EDIT: я рассматриваю возможность замены ExpressionEngine. В EE у меня может быть макет root с моими тегами html>head+body. Тогда у меня мог бы быть макет nav, который добавляет навигацию, но ссылается на макет root как на ITS-макет. Таким образом, вы получаете root, на который ссылается nav, или на который может напрямую ссылаться любой [page] (если навигация не нужна/не нужна). Вложенные макеты просто позволяют мне избежать условного включения частичного в layout или page. Просто более чистая разметка, на мой взгляд. Кроме того, как root, так и nav будут иметь тег {% page %} для обозначения размещения контента.

Так что в идеале...

Корневой макет

<html>
<head>[common tags]</head>
<body>
    {% page %}
</body>
</html>

Макет навигации

layout="root"
==
<nav>[markup]</nav>
{% page %}

Поэтому, когда страница ссылается на root, навигация не отображается. Однако, когда страница ссылается на nav, {% page %} вставляется в nav, а содержимое nav+{% page %} передается как содержимое {% page %} в root.

Надеюсь, дополнительная информация поможет.


person Jared    schedule 07.03.2017    source источник
comment
Я не совсем уверен, что вы ищете с «вложенными макетами», не могли бы вы объяснить это более подробно и, возможно, привести примеры?   -  person LukeTowers    schedule 08.03.2017
comment
@LukeTowers Смотрите обновления вопросов.   -  person Jared    schedule 09.03.2017


Ответы (1)


Вложенные макеты в настоящее время не поддерживаются как таковые, но вы можете сделать это с помощью заполнителей и частичные.

Вот пример того, что я сейчас использую для навигации.

layouts/with-nav.htm:

description = "Layout with nav"

[staticMenu nav]
code = "header-nav"
==
{# Setup the navigation menus #}
{% put headerNav %}
    {% set hNavOptions = {
        'submenus': true
    } %}
    {% partial "tmpl/nav-header" menu=nav options=hNavOptions %}
{% endput %}

{% partial "tmpl/header" %}

    <!-- Content -->
    <div id="layout-content">
        <div class="container">
            <div class="row">
                <div class="col-sm-12">
                    {% page %}
                </div>
            </div>
        </div>
    </div>

{% partial "tmpl/footer" %}

layouts/without-nav.htm:

description = "Layout without nav"
==
{% partial "tmpl/header" %}

    <!-- Content -->
    <div id="layout-content">
        <div class="container">
            <div class="row">
                <div class="col-sm-12">
                    {% page %}
                </div>
            </div>
        </div>
    </div>

{% partial "tmpl/footer" %}

partials/tmpl/header.htm:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>{% placeholder page_title default %}{{ this.page.title }}{% endplaceholder %} | {{ app_name }}</title>

        {% partial "meta/icons" %}
        {% partial "meta/seo" %}

        {% partial "meta/styles" %}
    </head>
    <body class="page-{{ this.page.url | slugify }} layout-{{ this.layout.id }}">
        <!-- Header -->
        <header id="home" class="header-area">
            {% placeholder headerNav default %}
                <!-- headerNav not defined in page layout. -->
            {% endplaceholder %}
        </header>
person LukeTowers    schedule 10.03.2017