【问题标题】:Can templates be nested in OctoberCMS?模板可以嵌套在 OctoberCMS 中吗?
【发布时间】:2017-03-07 22:13:01
【问题描述】:

我已经开始查看 10 月,虽然我能够构建默认布局并有条件地在需要的地方包含部分。我宁愿嵌套布局。

I.E. root 布局不依赖于任何其他布局,但nav 布局引用root 布局。

这可能吗?

编辑: 我正在考虑替换 ExpressionEngine。在 EE 中,我可以使用带有 html>head+body 标签的 root 布局。然后我可以在导航中添加一个nav 布局,但将root 布局引用为ITS 布局。所以你最终得到root,它被nav 引用,或者可以被任何[page] 直接引用(如果不需要/不需要导航)。嵌套布局只允许我有条件地避免在layoutpage 中包含部分内容。在我看来,这只是一个更清晰的标记。此外,rootnav 都将具有 {% page %} 标记来指示内容放置。

所以理想...

根布局

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

导航布局

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

所以当页面引用root 时,不会显示导航。然而,当一个页面引用nav时,{% page %}被注入navnav+{% page %}的内容作为{% page %}的内容传递给root

希望其他信息有所帮助。

【问题讨论】:

  • 我不太确定您在寻找“嵌套布局”的内容,您能否更深入地解释一下并提供示例?
  • @LukeTowers 查看问题更新。

标签: twig octobercms


【解决方案1】:

目前不支持嵌套布局,但您可以使用placeholderspartials 完成此操作。

这是我目前用于导航的示例。

布局/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>

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多