Представление – это обычный html-шаблон, в который могут быть включены другие html-шаблоны или фрагменты php-кода. Представление в PHP-платформе Wad-er следует реализации классического паттерна "двухэтапное представление" (Two Step View pattern), когда небольшие шаблоны помещаются в общий макет, который принято называть Layout.
Загрузка макета приложения (Layout) из контроллера. Макет применяется неявно при вызове метода render() в контроллере страницы:
class forum_controllers_index extends common_controller { //… public function index() { $model = new forum_models_index($this->parser); $this->modeldata = $model->getData(); $this->render(); } }
По умолчанию, в качестве макета используется представление ext/name_module/views /template/layout.php. Его можно изменить в текущем контроллере путём переопределения метода getLayout() базового контроллера. Например:
class forum_controllers_index extends common_controller { //… public function index() { //… $this->render(); } public function getLayout() { return SYS_BASE_PATH.'ext/forum/views/template_main/layout.php'; //подключаем другой layout } }
Создание Layout. Для того, чтобы добавить к странице дизайн и вывести ее в браузер, необходимо создать общий макет приложения. Создайте файл макета layout.php и поместите его в каталог ext/ name_module/views/template/. Поместите в файл следующий код (предварительно уберите лишние пробелы возле тегов):
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > < html > < head > < title >< ?php print($metatitle) ? >< /title > < meta http-equiv="Content-Type" content="text/html; charset=< ?php print($charset) ? >" / > < meta name="keywords" content="< ?php print($metakeywords) ? >" / > < meta name="description" content="< ?php print($metadescription) ? >" / > < base href="< ?php print($basurl) ? >" >< /base > < link rel="stylesheet" href="< ?php print(SYS_BASE_URL) ? >ext/forum/views/template/css/style.css" type="text/css" / > < /head > < body > < ?php print($content) ? > < /body > < /html >
Здесь $metatitle, $metakeywords и др. переменные внутри head формирует парсер (class pageParser), в контроллере можно их заполнить следующим образом:
$this->metatitle = $model->getMetaTitle(); $this-> metakeywords = $model->getMetaKeywords();
$content хранит результат рендеринга шаблона страницы, который будет рассмотрен в следующем разделе.
Создание шаблона страницы. Шаблон страницы может представлять собой чистый html, html с включениями php-кода или, если страница обходится без модели (логика переносится в представление), php-код. Все файлы шаблонов находятся в каталоге ext/name_module/views/.
Название файла шаблона должно полностью повторять название файла контроллера страницы. Например, для контроллера forum_controllers_index() нужно создать представление ext/forum/views /index.php. После создания этого файла, вставьте в него следующий код:
< h1 >Добро пожаловать на наш сайт!< /h1 >
Теперь, если у вас есть соответствующий контроллер (forum_controllers_index), вы можете зайти по адресу http://site.com/forum/index и увидеть на странице приветствие «Добро пожаловать на наш сайт!».
Изменение расположения файла шаблона. Если вы хотите поменять расположение файла шаблона или его название, переопределите в вашем контроллере метод setView() базового контроллера. Например:
class forum_controllers_index extends common_controller { public function index() { //… $this->setView('forum_topics'); $this->render(); } public function setView($name) { if(!$module) $module = $this->parser->pageObject['moduleid']; $this->_view = $module.'/views/main/'.$name; return ''; } }
Здесь файл представления называется forum_topics.php и расположен по адресу: ext/forum/views/ main/forum_topics.php. Новое расположение файла указывается путем переопределения метода setView(), а в методе index() происходит вызов метода setView().
Добавление динамических данных в шаблон. Следуя концепции разделения логики и представления, большая часть кода логики должна быть помещена в контроллер или модель, а в представление должны отдаваться результаты их работы - динамическое содержимое. Данные в представление могут поступать в виде строки, массива или объекта.
Пример с использованием массива:
class forum_controllers_index extends common_controller { //… public function index() { $this->delete = array(1,2,3,4,5); $this->render(); } }
В шаблоне этот массив можно использовать так:
< ?php foreach($delete as $d) { ?> < div class='item' >< ?php print $d; ?>< /div > < ?php } ?>
Кроме этого, имеется доступ к объекту парсера (class pageParser) внутри шаблона. Это дает возможность вставлять в html-код шаблона объединенные единой логикой фрагменты php-кода (сниппеты) и фрагменты html-кода (чанки).
Пример шаблона страницы с использованием сниппетов и чанков:
< div class="getquote"> < ?php print $parser-> runSnippet('getquote'); ?> < /div> < div class="messcont"> < ?php print $parser-> getChunk('messcont'); ?> < /div>