Как создать общий шаблон с верхним и нижним колонтитулами для проектов phalcon с помощью Volt Engine

Я хочу создать общий шаблон с верхним и нижним колонтитулом для каждой страницы в /views используя phalcon вольт двигатель

моя папка иерархия ниже

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

Я хочу получить оба кода header.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>

2 ответа

Ключом к настройке шаблонов в 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.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 - это основной макет вашего сайта. Это должно включать верхний и нижний колонтитулы.

Папка Layouts - это папка для ваших контроллеров. Так что, если у вас есть, скажем, loginController, он будет искать login.volt внутри папки раскладок.

Следующим уровнем наследования является вид действия. Итак, после того, как макет контроллера называется, вызывается контроллер вида. В вашем случае index.volt, если ваш контроллер называется RegisterController, а ваше представление - indexAction.

Другие вопросы по тегам