[英]How do I create common template with header and footer for phalcon projects with Volt Engine
我想使用Phalcon volt引擎为/views
每个页面创建一个带有页眉和页脚的通用模板
我的文件夹层次结构如下
/views
/user
register.volt
/layouts
header.volt
footer.volt
我想将header.volt
和footer.volt
代码footer.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">
© Custom 2014
</div>
</div>
这是register.volt
的代码
<div class="register-contents">
//register form going here
</div>
在phalcon中设置模板的关键是设置视图目录的位置。 Phalcon希望您的模板和partials目录相对于该views目录。 对于单级应用程序,这足够简单:
$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>
navigation.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>© {{ date('Y') }} Your Company</p>
</div>
您还可以在页面内容之前或之后插入包含html代码段的其他模板。 使用beforeRender()和afterRender()挂钩控制模板目录中的哪些文件插入到哪里。
我强烈建议您阅读以下有关phalcon的文档: http ://docs.phalconphp.com/en/latest/reference/views.html
但是,您的文件夹结构应类似于以下内容:
/views
index.volt
/layouts
register.volt
/register
index.volt
其中views / index.volt是您网站的主要布局。 这应该包括页眉和页脚。
布局文件夹是您的控制器的布局文件夹。 因此,如果您有loginController,那么它将在布局文件夹中搜索login.volt。
继承的下一级是操作视图。 因此,在调用控制器的布局之后,将调用视图控制器。 在本例中,如果您是控制器,则index.volt名为RegisterController,而您的视图为indexAction。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.