Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


dev:controllers:templates

Шаблоны контроллера

На этой странице рассмотрена только работа с шаблонами из контроллера, то есть их подключение. Внутреннее устройство самих шаблонов рассмотрено в соответствующем разделе.

Инициализация

Для работы с шаблонами внутри контроллера нужно получить экземпляр класса cmsTemplate:

$template = cmsTemplate::getInstance();

или обратиться к свойству объекта контроллера

$this->cms_template;

Т.е. в данном примере $template будет одно и тоже, что и $this→cms_template. В файлах контроллеров предпочтительнее использовать $this→cms_template, поскольку код будет выглядеть чище.

Вывод шаблона

Шаблоны относящиеся к текущему компоненту должны находиться в папке /templates/default/controllers/{имя компонента} и иметь расширение *.tpl.php.

Рассмотрим вывод шаблона на примере компонента example.

Создадим файл /templates/default/controllers/example/hello.tpl.php:

<h1>Hello world! My name is <?php html($name); ?>.</h1>

Шаблон представляет из себя файл, содержащий HTML-разметку и PHP-инструкции для вывода данных. В нашем случае в шаблоне будет выводиться переменная $name. Значение этой переменной будет передаваться из контроллера. Функция html() в шаблоне выводит содержимое переменной (через htmlspecialchars()).

Чтобы вывести созданный шаблон внутри экшена контроллера нужно использовать метод render($template_name[, $data]) полученного ранее объекта $template:

class example extends cmsFrontend{
 
    public function actionIndex(){
 
        // инициализируем систему шаблонов
        $template = cmsTemplate::getInstance();
 
        // выводим шаблон /templates/default/controllers/example/hello.tpl.php
        return $template->render('hello', ['name' => 'Vasiliy']);
    }
 
}

или вот так, что будет равнозначно:

class example extends cmsFrontend{
 
    public function actionIndex(){
 
        // выводим шаблон /templates/default/controllers/example/hello.tpl.php
        return $this->cms_template->render('hello', ['name' => 'Vasiliy']);
    }
 
}

Метод render($template_name[, $data[, $request]]) принимает три аргумента:

  1. Название файла шаблона (без .tpl.php) — файл будет браться из папки шаблонов данного компонента
  2. (необязательный) Массив данных для вывода в шаблоне — в виде пар Название ⇒ Значение
  3. (необязательный) Объект request. Если он не указан, то будет использован объект request от контекста контроллера.

Можно в первый параметр метода render сразу передавать массив данных для вывода в шаблоне, пропуская указание имени шаблона. В этом случае имя шаблона будет по имени текущего экшена. Например, всё тот же экшен index:

class example extends cmsFrontend{
 
    public function actionIndex(){
 
        // выводим шаблон /templates/default/controllers/example/index.tpl.php
        return $this->cms_template->render(['name' => 'Vasiliy']);
    }
 
}

В этом случае движок будет искать файл index.tpl.php.

Изменение общего макета

Общий макет — это основной шаблон всех страниц сайта, содержащий теги <html>, <head> и <body>. Внутри него выводятся шаблоны компонентов и виджетов.

Каждая тема оформления может включать в себя несколько макетов.

Например, тема оформления поставляемая в комплекте с InstantCMS называется default и содержит два макета - main и admin, которые хранятся в файлах:

  • /templates/default/main.tpl.php
  • /templates/default/admin.tpl.php

По-умолчанию для всех страниц сайта используется макет main, а компонент «Панель управления» использует макет admin. Переключение макета происходит в контроллере компонента следующим образом:

$this->cms_template->setLayout('admin');

Метод setLayout($layout_name) переключает макет для текущего вызова.

Если компонент использует собственный макет (или несколько макетов) то при смене темы оформления новая тема должна содержать в себе одноименные макеты, иначе компонент не будет совместим с темой.


Вернуться к оглавлению

dev/controllers/templates.txt · Последнее изменение: 19.10.2024 19:45 — fuze

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki