【问题标题】:How do I create common template with header and footer for phalcon projects with Volt Engine如何使用 Volt 引擎为 phalcon 项目创建带有页眉和页脚的通用模板
【发布时间】:2016-04-01 12:02:36
【问题描述】:

我想使用 phalcon volt 引擎为/views 中的每个页面创建一个带有页眉和页脚的通用模板

我的文件夹层次结构在下面

/views
    /user
       register.volt
    /layouts
       header.volt
       footer.volt

我想将header.voltfooter.volt 的代码都放入register.volt 页面

这是header.volt中的代码

<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-full">
    <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand">Payroll</a>
    </div>
    <div class="collapse navbar-collapse navbar-right">
        <ul class="nav navbar-nav">
            <li>item 1</li>
        </ul>
    </div><!--/.nav-collapse -->
</div>

这是footer.volt中的代码

    <div class="footer">
        <div class="container container-full">
        &copy; Custom 2014
        </div>
    </div>

这是register.volt中的代码

<div class="register-contents">
    //register form going here
</div>

【问题讨论】:

  • 我编辑了我的问题..

标签: php phalcon volt


【解决方案1】:

在 phalcon 中设置模板的关键是设置视图目录的位置。 Phalcon 期望您的模板和部分目录与该视图目录相关。这对于单级应用程序来说已经足够简单了:

$view = new \Phalcon\Mvc\View();
$view->setViewsDir( realpath( __DIR__ . '/views/' ) );
$view->setLayoutsDir( '/layouts/' );
$view->setPartialsDir( '/partials/' );

当您想要为每个模块创建一个共享模板目录和单独的视图目录时,这在多模块设置中会变得很棘手。

$view = new \Phalcon\Mvc\View();
$view->setViewsDir( realpath( __DIR__ . '/views/' ) );
$view->setLayoutsDir( '../../../common/views/layouts/' );
$view->setPartialsDir( '../../../common/views/partials/' );

在你的布局目录中,创建你的主模板:

{{ getDoctype() }}
<html>
    {{ partial('head') }}
    <body>
        {{ partial('navigation') }}
        {{ flash.output() }}
        {{ get_content() }}
        {{ partial('footer') }}
    </body>
</html>

在您的 partials 目录中,放置您的 head、navigation 和 footer 文件:

head.volt

<head>
    {{ tag.getTitle() }}
    {{ assets.outputCss() }}
    {{ assets.outputJs() }}
</head>

导航.php

<?php
// get list of navigation elements from model
$navigation = \MyNamespace\Navigation::getNavElements();
echo "<ul class='nav'>\n";
forEach( $navigation as $element ){
    printf("\t<li><a href='%s'>%s</a></li>\n",$element['url'],$element['display']);
}
echo "</ul>\n";

footer.volt

<div class='footer'>
    <p>&copy; {{ date('Y') }} Your Company</p>
</div>

您还可以在页面内容之前或之后插入包含 html sn-ps 的其他模板。使用 beforeRender() 和 afterRender() 钩子来控制模板目录中的哪些文件被插入到哪里。

【讨论】:

    【解决方案2】:

    我强烈建议您阅读此处提供的 phalcon 文档:http://docs.phalconphp.com/en/latest/reference/views.html

    不过,您的文件夹结构应该类似于以下内容:

    /views
        index.volt
        /layouts
            register.volt
        /register
            index.volt
    

    views/index.volt 是您网站的主要布局。这应该包括页眉和页脚。

    Layouts 文件夹是控制器的布局文件夹。因此,如果您有 loginController,那么它将在 layouts 文件夹中搜索 login.volt。

    下一级继承是动作视图。所以,在控制器的布局被调用之后,视图控制器被调用。在你的情况下 index.volt 如果你的控制器被命名为 RegisterController 并且你的视图是 indexAction。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多