Now: Tutorial for Web and Software Design > PHP > PHP Basic > PHP Content
> Implementing MVC in PHP: The View [Bookmark it]
Implementing MVC in PHP: The View

Implementing MVC in PHP: The View

by Joe Stump
01/26/2006

This is the third article in a series about understanding MVC in PHP. The first article explained basics of MVC programming in PHP. The second article showed the implementation of the Controller in MVC. The final article is Implementing MVC in PHP: The Model.

The presentation layer, as I call it, is the View, in common MVC terms. Its sole responsibility is to display information. It could care less about authenticating users, what the data is or, for the most part, where it came from. The only thing it has to worry about is how to render it and where to send it once rendered.

By default, the framework uses Smarty to render the framework. I'm not here to argue semantics, but your presentation layer should consist of a template engine of some sort and a few supporting presentation layers.

The idea is that, after the Model runs, the framework hands it off to a child of the FR_Presenter_common class. Actually, the framework uses the FR_Presenter::factory() to create the presenter. Each presenter should have a display() method that does the actual rendering. When the factory creates the presenter, it passes the presenter the instance of the model class. The presenter then gets the model's data using its getData() method. From there, the presenter is free to present that data however it sees fit.

FR_Presenter_smarty

The way I've created my Smarty presenter is a hybrid of two templates. I create a Smarty template, and the outer page template includes the model's template. The model class's $pageTemplateFile can request a particular outer template. If it does not, the default is tpl/default/templates/page.tpl. The page.tpl template then uses the {$modulePath} and {$tplFile} directives to include the model's template. All model templates should reside in modules/example/tpl/.

After assigning the variables, the controller runs Smarty's display function to render the templates. With little modification, you could wrap these calls with Smarty's built-in caching as well. By using Smarty, you could enable an output modifier to output gzipped code instead of plain HTML.

<?php



  /**

  * FR_Presenter_smarty

  *

  * @author Joe Stump <joe@joestump.net>

  * @copyright Joe Stump <joe@joestump.net>

  * @license http://www.opensource.org/licenses/gpl-license.php

  * @package Framework

  * @filesource

  */



  require_once(SMARTY_DIR.'Smarty.class.php');



  /**

  * FR_Presenter_smarty

  *

  * By default we use Smarty as our websites presentation layer (view). Smarty

  * is a robust compiling template engine with an active community.

  *

  * @author Joe Stump <joe@joestump.net>

  * @package Framework

  * @link http://smarty.php.net

  */

  class FR_Presenter_smarty extends FR_Presenter_common

  {

      private $template = null;

      private $path = null;



      public function __construct(FR_Module $module)

      {

          parent::__construct($module);

          $this->path = FR_BASE_PATH.'/tpl/'.FR_TEMPLATE;

          $this->template = new Smarty();

          $this->template->template_dir = $this->path.'/'.'templates';

          $this->template->compile_dir = $this->path.'/'.'templates_c';

          $this->template->cache_dir = $this->path.'/'.'cache';

          $this->template->config_dir = $this->path.'/'.'config';

      }



      public function display()

      {

          $path = FR_BASE_PATH.'/modules/'.$this->module->moduleName.'/tpl';;

          $tplFile = $this->module->tplFile;



          $this->template->assign('modulePath',$path);

          $this->template->assign('tplFile',$tplFile);

          $this->template->assign('user',$this->user);

          $this->template->assign('session',$this->session);



          foreach ($this->module->getData() as $var => $val) {

              if (!in_array($var,array('path','tplFile'))) {

                  $this->template->assign($var,$val);

              }

          }



          if ($this->module->pageTemplateFile == null) {

              $pageTemplateFile = 'page.tpl';

          } else {

              $pageTemplateFile = $this->module->pageTemplateFile;

          }



          $this->template->display($pageTemplateFile);

      }



      public function __destruct()

      {

          parent::__destruct();

      }

  }



?>

[1] [2] Next

[Bookmark][Print] [Close][To Top]
  • Prev Article-PHP:

  • Next Article-PHP:
  • Related Materias
    Important Notice for Apach
    Custom-Compiling Apache an
    Simplify Your Life with Ap
    Industrial-Strength Webcas
    Monitoring Apache Page-Loa
    Implementing MVC in PHP: T
    Simplify PHP Development w
    Improve Your Build Process
    Implementing MVC in PHP: T
    Important Notice for PHP D
    Topics
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Graphic Design Tutorial
     

    Coreldraw Tutorial

      Illustrator Tutorial
      3D Graphics Articles
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial&Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial&Articles
     

    XML Style Tutorial

      AJAX Tutorial
      XML Mobile
    Flash Tutorial&Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial&Articles
     

    Linux Tutorial

      Symbian Tutorial
      MacOS Tutorial