Comunidad de diseño web y desarrollo en internet online

asociar plantillas a controladores (MVC)

Citar            
MensajeEscrito el 22 Ago 2010 09:29 pm
Tengo una serie de controladores puntuales, y también una serie de plantillas. Quisiera que a cada controlador se asocie una determinada plantilla.

Por otro lado, me acabo de dar cuenta de que solo tengo una vista, y me parece que tendría que tener varias. Por ejemplo, uno para manejar todo lo relacionado al login.

Código PHP :

<?php

class FrontController{   

   var $controller;
   var $dbObject;
   var $phpvars;
   var $contentsVars;
   
   function __construct(){
            
      include "controllers/BaseController.php"; 
      $baseController = new BaseController(); 
      $baseController->defineConstants();
      
      include "models/Model.php"; 
      $this->dbObject = new dbConsults();      
      
      /* Translations for the UI */
      $this->phpvars = $baseController->varsConsult($this->dbObject); 
            
      // utf-8 fixer
      include (APP_LIB."fixEncoding.php"); 
      
      $this->includeControllers();
      
      /*** init View ****/
      include "views/View.php";      
      $View = new View(); 
      $View->prepareContents($this->phpvars, $this->contentsVars);
      $View->render(); // display view
   }   
   
   private function includeControllers()
   {
      
      if (isset($_GET['login']))
      {   
      
         include "controllers/LoginController.php"; 
         $LoginController = new LoginController($this->dbObject);
         $this->contentsVars['usersData'] = $LoginController->checkUser();               
      }   
      elseif (isset($_GET['register']))
      {   
      
         include "controllers/RegistrationController.php"; 
         $RegistrationController = new RegistrationController($this->dbObject);
         $this->contentsVars['usersData'] = $RegistrationController->registerUser();   
      }
      elseif (isset($_GET['logout']))
      {   
      
         include "controllers/LoginController.php"; 
         $LoginController = new LoginController($this->dbObject);
         $LoginController->logout();
      }   
      elseif (isset($_GET['lostpassword']))
      {   
      
         include "controllers/RememberPassController.php"; 
         $RememberPassController = new RememberPassController($this->dbObject);
         $this->contentsVars['usersData'] = $RememberPassController->rememberPassword();
      }
      elseif (!isset($_GET['load']) and (FILENAME == "index"))
      {
         
         include "controllers/MainPageController.php"; 
         $MainPageController = new MainPageController();
         $this->contentsVars['tutorialsList'] = $MainPageController->listTutorials($this->phpvars, $this->dbObject);                  
      }
      else{
      
         include "controllers/PageController.php"; 
         $PageController = new PageController($this->dbObject);
         $this->contentsVars['theContents'] = $PageController->printPageContents();   
      }
      
      include "controllers/MenusController.php"; 
      $MenusController = new MenusController($this->dbObject);
      $this->contentsVars['mainLinks'] = $MenusController->printMainMenu( $this->phpvars );
      @$this->contentsVars['relPages']  = $MenusController->printSecondaryMenu( $contentsVars['theContents']['relatedPages'] );
      
      include "controllers/TagsController.php"; 
      $TagsController = new TagsController($this->dbObject);
      $this->contentsVars['theTags'] = $TagsController->tag_cloud();
   }   
   
}
?>


Código PHP :

<?php
Class View{
   
   var $template;
   var $CSS_filename;
   var $availableLanguages;
   var $contents;
   
   function __construct(){
      
      $whichTPL = $this->chooseTemplate(); 
      $this->setTemplate($whichTPL);
      $this->listStyles();
      
      include (APP_LIB."availableLanguages.php");
      $this->availableLanguages = $availableLanguages;
      
   }
   
   public function render() {
   
      echo $this->contents;
   }
   
   private function chooseTemplate(){
      
      if ( isset($_GET['login']) )      
         $response = TEMPLATES."login.tpl.php";
      
      elseif ( isset($_GET['register']) )      
         $response = TEMPLATES."registration.tpl.php";
      
      elseif ( isset($_GET['lostpassword']) )      
         $response = TEMPLATES."lostpassword.tpl.php";
         
      elseif(isset($download))         
         $response = TEMPLATES."contents.download.tpl.php";
      
      elseif(!isset($_SESSION['name']))      
         $response = TEMPLATES."contents.NoLogued.tpl.php";
      
      elseif(isset($_SESSION['name']))      
         $response = TEMPLATES."contents.Logued.tpl.php";   
         
      return $response;   
   }
   
   public function setTemplate($whichTPL) {
      
      $this->template = $whichTPL;
   }
   
   public function prepareContents($phpvars, $contentsVars ) {
      
      @$flagsDef = $this->listFlags();
   
      foreach ($contentsVars as $key => $value)
      {
         $$key = $value;         
      }
          
      ob_start();             
      include $this->template;
      $this->contents = ob_get_clean();
    }      
   
   function listStyles(){

      // display a list of styles to visualizate the web page
      $puntos = array('.', '..');
      $listado = array_diff(scandir(CSS_DIR), $puntos);
      
      foreach($listado as $elemento)   { 
         
         if(is_dir($elemento)) continue;
         
         $subdivide = pathinfo($elemento);
         $extension = strtolower($subdivide['extension']);
         $nombre_archivo = $subdivide['filename'];
                     
         if (is_file(CSS_DIR.$elemento) and $extension == "css")
         {
            $response[] = $nombre_archivo;
         }
      }
      
      $this->CSS_filename = $response;      
   }

   function listFlags(){

      $lang = $_SESSION['lang'];
                  
         // Display country flags
         $i = 0;
         foreach ($this->availableLanguages as $listLang){
   
            if (("_".$listLang == "_".$lang) or ($listLang == $lang))
            { 
               $mark = "class=\"markedLang\"";
            } 
            else { $mark = ""; };   
                     
            $response[$i]['listLang'] = $listLang;             
            $response[$i]['classMark'] = $mark; 
            $i++;
         }
      
      return $response;      
   }
   
   function highlightScope($scope){
      
      if (SCOPE == $scope)
      $highlight = 'class="markedLang"';
      
      else 
      $highlight = "";
      
      return $highlight;
   }   
}
?>

Por mayid

17 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 Ago 2010 02:43 am
No ates un controlador a una vista, ten en mente esto: un controlador puede representar la respuesta de muchas maneras. Ejemplo:

Controlador - Mostrar Hora

Vistas disponibles: hora digital ( formato: am/ph, 24hrs), hora analogica.

Además te sugiero, leer sobre autoload de php.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 Ago 2010 12:59 pm
Gracias por la respuesta!

Voy a estudiar el autoload.

Por mayid

17 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.