簡體   English   中英

如何為帶有Volt Engine的Phalcon項目的頁眉和頁腳創建通用模板

[英]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.voltfooter.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">
        &copy; 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>&copy; {{ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM