Skip to content
Anton edited this page Sep 1, 2016 · 33 revisions

Описание

Двухуровневый шаблонизатор (View- первый, Layout- второй) с нативным синтаксисом PHP, схож с Zend_View + Zend_Layout.

Настройки

Глобальных настроек нет

Использование

В контроллере назначаем переменный в шаблон с использованием метода assign() либо вернув массив переменных:

/**
 * @return void
 */
return function() {
    $this->assign('title', "Hello world");

    return [
        'keywords' => ['hello', 'world'],
        'description' => 'first message'
    ];
};

В шаблоне выводим данные:

<h2><?=$title?></h2>
<p>Follows code works too</p>
<h2><?=$this->title?></h2>
<p><?=$description?></p>

Для экранирования данных используем глобальную функцию esc():

<p><?=esc($description)?></p>

Назначаем переменную в Layout:

return
/**
 * @return Response
 */
function() {
    Layout::set('title', "Hello world");
};

Отключаем вывод из контроллера (отключаем и view и layout):

return
function() {
    return false;
};

Отключаем view (может понадобиться для backbone.js):

return
function() {
    $this->disableView();
};

Отключаем layout:

return
function() {
     $this->disableLayout();
};

Методы

  • toArray() - получение всех данных из View

  • setFromArray(array $data) - добавление данных скопом во View

  • resetArray() - очистка всех данных

  • setPath($path) - путь к шаблонам

  • setTemplate($file) - шаблон для отображения

  • addPartialPath($path) - путь к шаблонам-помощникам

  • render() - собственно метод который отвечает за вывод, он также вызывается в магических методах __toString и __invoke

View Helpers

ahref

Синтаксис:

$this->ahref(\string $text, \string $href, array $attributes = [])

Создаёт ссылку <a>:

  • если $href == null, ссылка не будет построена
  • если ссылка является текущей, к классу ссылки будет прибавлен класс on
<?=$this->ahref('Profile', '/users/profile/id/13', ['class'=>'button']);?>
<a href="/users/profile/id/13" class="button">Profile</a>

Второй параметр может быть опциями для помощника вида url():

<?=$this->ahref('Profile', ['users', 'profile', ['id'=>13]], ['class'=>'button']);?>
<a href="/users/profile/id/13" class="button">Profile</a>

baseUrl

Синтаксис:

$this->baseUrl($file = null)

Добавляет к переданному URL базовый URL системы, или просто возвращает baseUrl:

<base href="<?=$this->baseUrl()?>" />
<!-- or -->
<img src="<?=$this->baseUrl('redactor/logo.png')?>" alt="Logo"/>
<!-- by default baseUrl of system is equal to '/' -->
<img src="/radactor/logo.png" alt="Logo"/>

controller

Синтаксис:

$this->controller(\string $controller = null)

Данный метод возвращает текущий контроллер, или сверяет текущий с запрашиваемым:

<?=$this->controller()?>
index
<?php if ($this->controller('index')) :?>
Home Page
<?php endif; ?>

dispatch

Синтаксис:

$this->dispatch(\string $module, \string $controller, $params = array())

Запускает указанный контроллер с перечисленными параметрами, при этом параметры переданные в массиве имеют приоритет над параметрами из запроса, параметры запроса будут так же доступны в объекте Request:

// pages/index view
// url /pages/id/9
$this->dispatch('users', 'profile', ['id' => 42]);

// users/profile controller
$request->id == 42;
$request->getQuery('id') == 9; // HTTP only

headScript

Синтаксис:

$this->headScript(\string $script = null)

Добавляет указанный скрипт в стек, дабы в дальнейшем вставить его в тег <head> шаблона. Без параметров возвращает код тега <script> для вставки, и очищает стек. Если Layout отсутствует (это может быть AJAX запрос), то вызов скрипта вернёт код тега <script>:

<!-- layout -->
<head>
<?=Layout::headScript()?>
</head>

<!-- view -->
<?=$this->headScript('js/jquery.js')?>
<?=$this->headScript('$.ready(function(){
    // la-la-la
})')?>

<!-- result -->
<head>
<script src="js/jquery.js"></script>
<script type="text/javascript">
<!--
$.ready(function(){
    // la-la-la
})	
//-->
</script>
</head>

headStyle

Синтаксис:

$this->headStyle(\string $style = null, \string $media = 'all')

Назначение аналогично headScript, но применительно к CSS стилям.

module

Синтаксис:

$this->module($module = null)

Данный метод возвращает текущий модуль, или сверяет текущий с запрашиваемым:

<?=$this->module()?>
forum
<?php if ($this->module('forum')) :?>
Our Forum
<?php endif; ?>

partial

Синтаксис:

$this->partial(\string $template, $params = array())

Вывод другого шаблона внутри нашего:

<?php $this->partial('/partial/table.phtml', array('rows' => $data)) ?>

partialLoop

Синтаксис:

$this->partialLoop(\string $template, $data = [], $params = [])

Вывод другого шаблона в цикле, который бегает по массиву $data, ключ массива будет передан в качестве переменной $partialKey, значение массива в $partialValue

<?php $this->partialLoop('/partial/tr.phtml', $rows) ?> 

script

Синтаксис:

$this->script(\string $src = null)

Формирует строку для подключения javascript-кода к HTML. Может подключать как внешние файлы, так и локальные, может оборачивать inline-скрипты:

<!-- view -->
<?php
$this->script('redactor/redactor.js');
$this->script('
    require(["jquery", "bluz"], function($, bluz) {
        bluz.ready(function(){
            $("'.$selector.'").redactor('.$settings.');
        });
    });
');
?>
<!-- result -->
<script src="/redactor/redactor.js"></script>
<script type="text/javascript">
<!--
    require(["jquery", "bluz"], function($, bluz) {
        bluz.ready(function(){
            $(".redactor").redactor({"autoresize":false});
        });
    });
//-->
</script>

style

Синтаксис:

$this->style(\string $style, $media = 'all')

Аналогично помощнику script(), но уже касательно CSS.

url

Синтаксис:

$this->url(\string $module, \string $controller, array $params = [], boolean $checkAccess = false)

Формирует ссылку на указанный контроллер, согласно прописанных в системе роутов. Если указан флаг $checkAccess то так же проверяет доступ по правилам описанных в ACL, в случае, если нет доступа - вернёт null, что влияет на поведение помощника ahref, который в этом случае не построит ссылку.

Clone this wiki locally