View

Материал из Wiki

Перейти к: навигация, поиск

Класс View, который я использовал в старой версии http://rmcreative.ru/.

Работает как буфер для накопления данных для шаблона. Данные можно присваивать не только в текущем методе, но и в любом другом.

application/views/layout.php используется в качестве основного шаблона страницы. Шаблон, название которого передаётся в render исполняется и подставляется в $content в основном.


class Blog extends Controller {
   function index(){
     //Доступно как $title в основном шаблоне
     $this->view->setTitle('Hello, world!');
 
     $this->view->set('name', 'Alexander Makarov');
     $this->view->set('website', 'http://rmcreative.ru/');
 
     //Встраивает указанный параметром шаблон в основной и выводит всё
     $this->view->render('blog/index');
 
     //Если нужно не выводить, а например, кэшировать, так можно получить результат строкой
     //$result = $this->view->fetch('blog/index');
     //Если нужно встроить несколько подшаблонов, то можно сделать так:
     //$this->view->setGlobal('navigation', $this->view->fetch('blog/navigation'));
     //$this->view->setGlobal('content', $this->view->fetch('blog/content'));
     //$this->view->render('blog/index');
   }
 }

layout.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
     <title><?=$title?></title>
 </head>
 <body>
 <div id="content">
 <h1><?=$title?></h1>
 <?=$content?>
 </div>
 </body>
 </html>

Основной шаблон можно сменить на ходу:

$this->view->setLayout('layout_alternative');

Для основного шаблона можно задавать дополнительные переменные:

$this->view->setGlobal('description', 'Эта штука пойдёт в тэг meta');


Код

<?php
 if (!defined('BASEPATH')) exit('No direct script access allowed');
 
 /**
  * View Class
  *
  * @author Alexander Makarov
  * @copyright 2008
  * @version 0.9
  * @uses PHP5
  * @link http://rmcreative.ru/
  */
 class View {
     private $layoutVars = array();
 
     private $vars = array();
     private $layout = 'layout';
     private $title = 'Don\'t forget to set title!';
 
     function setLayout($template){
         $this->layout = $template;
     }
 
     function setTitle($title){
         $this->title = $title;
     }
 
     function set($varName, $value){
         $this->vars[$varName] = $value;
     }
 
     function setGlobal($varName, $value){
         $this->layoutVars[$varName] = $value;
     }
 
     /**
      * Fetch template and return it.
      *
      * @param String $template
      */
     function fetch($template){
         /* @var CI CI_Base */
         $CI = &get_instance();
 
         $content = $CI->load->view($template, $this->vars, true);
 
         $this->layoutVars['content'] = $content;
         $this->layoutVars['title'] = $this->title;
 
         return $CI->load->view($this->layout, $this->layoutVars, true);
     }

     function fetchPartial($template){
         /* @var CI CI_Base */
         $CI = &get_instance();
 
         return $CI->load->view($template, $this->vars, true);
     }

     function renderPartial($template){
         echo $this->fetchPartial($template);
     }
 
     /**
      * Renders template to $content.
      *
      * @param String $template
      */
     function render($template){
               echo $this->fetch($template);
     }
 }
Источник — «http://code-igniter.ru/wiki/View»
Личные инструменты