Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-08-2007 19:27:14

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Ajoutez le moteur de template de votre choix à zend Framework

Voici comment ajouter le gestionnaire de vue de votre choix à Zend Framework et donc le systeme de template que vous voulez.

en premier lieu il convient d'écrire une classe de vue
pour le moment faisons simple un gestionnaire de vue qui ne fait rien

Code:

class Fast_View_Test extends Zend_View
{
   /**
     * Includes the view script in a scope with only public $this variables.
     *
     * @param string The view script to execute.
     */
   protected function _run()
   {
      $name = func_get_arg(0);
      echo 'test de view : ' . $name;
   }
}

notre view dérive de Zend View et affiche le nom du script à rendre et c'est tout.
il reste à indique au controlleur d'utiliser notre vue

Code:

Zend_Loader::loadClass(Fast_View_Test);
$view = new Fast_View_Test();
$viewRenderer= Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setView($view)->setViewSuffix('ext');

et c'est tout zend framework va maintenant utiliser votre gestionnaire de vue.

avec un système de template cela donne

Code:

class Fast_View_Ets extends Zend_View
{
   /**
     * Includes the view script in a scope with only public $this variables.
     *
     * @param string The view script to execute.
     */
   protected function _run()
   {
      $name = func_get_arg(0);
      require_once("TemplatesEngines/Ets/Ets.php");
      // rendu de la page
      printt($this, $name);
   }
}

Ets est un moteur simple Smarty lui utilise des assign pour affecter ses membres et stocke les valeurs dans son propre objet. il faut donc l'intancier dès le début et ensuite faire le rendu, mais aussi stocker les valeur dans smarty

Code:

Zend_Loader::loadClass('Zend_View');

/**
 *
 * @author Patrick Dubois et Jean Yves Terrien
 *
 */
class Fast_View_Smarty extends Zend_View
{
   public $smarty;

   /**
     * Constructeur
     *
     * @param string $tmplPath
     * @param array $extraParams
     * @return void
     */
   public function __construct()
   {
      parent::__construct();
      require_once("TemplatesEngines/Smarty/libs/Smarty.class.php");
      $this->smarty = new Smarty();
      $this->setScriptPath(dirname(dirname(dirname(dirname(__FILE__)))) . '/application/views/smarty/');
   }

   private function _getCleanPath($path)
   {
      $path = str_replace(chr(92), '/', $path); // nettoie les séparateurs à la windows
      if (substr($path, -1, 1) != '/') $path .= '/' ; // assure un séparateur final
      return $path;
   }

   public function setScriptPath($path)
   {
      parent::setScriptPath($path);
      $path = $this->_getCleanPath($path);
      $this->smarty->template_dir = $path;
      // définit les répertoires complémentaires par défaut
      $this->setCompileDir($path . 'templates_c/');
      $this->setConfigDir($path . 'configs/');
      $this->setCacheDir($path . 'cache/');
   }

   /**
    * Set templates directory
    *
    * @param string $path
    */
   public  function setTemplateDir($path)
   {
      $path = $this->_getCleanPath($path);
      $this->smarty->template_dir = $path;
   }

   /**
    * Set compiled templates directory
    *
    * @param string $path
    */
   public  function setCompileDir($path)
   {
      $path = $this->_getCleanPath($path);
      $this->smarty->compile_dir = $path;
   }

   /**
    * Set config files directory
    *
    * @param string $path
    */
   public  function setConfigDir($path)
   {
      $path = $this->_getCleanPath($path);
      $this->smarty->config_dir = $path;
   }

   /**
    * Set cached templates directory
    *
    * @param string $path
    */
   public  function setCacheDir($path)
   {
      $path = $this->_getCleanPath($path);
      $this->smarty->cache_dir = $path;
   }

   /**
     * Assign a variable to the view
     *
     * @param string $key The variable name.
     * @param mixed $val The variable value.
     * @return void
     */
   public function __set($key, $val)
   {
      if ('_' == substr($key, 0, 1)) {
         require_once 'Zend/View/Exception.php';
         throw new Zend_View_Exception(
         'Setting private var is not allowed',
         $this);
      }
      if ($this->smarty == null) {
         require_once 'Zend/View/Exception.php';
         throw new Zend_View_Exception(
         'Smarty not defined',
         $this);
      }
      $this->smarty->assign($key,$val);
      return;
   }

   public function __get($key)
   {
      if ('_' == substr($key, 0, 1)) {
         require_once 'Zend/View/Exception.php';
         throw new Zend_View_Exception(
         'Setting private var is not allowed',
         $this);
      }
      if ($this->smarty == null) {
         require_once 'Zend/View/Exception.php';
         throw new Zend_View_Exception(
         'Smarty not defined',
         $this);
      }
      return $this->smarty->get_template_vars($key);
   }

   /**
     * Allows testing with empty() and
     * isset() to work
     *
     * @param string $key
     * @return boolean
     */
   public function __isset($key)
   {
      $vars = $this->smarty->get_template_vars();
      return isset($vars[$key]);
   }

   /**
     * Allows unset() on object properties to work
     *
     * @param string $key
     * @return void
     */
   public function __unset($key)
   {
      $this->smarty->clear_assign($key);
   }

   /**
     * Assign variables (other method)
     *
     */
   public function assign($spec, $value = null)
   {
      if (!is_array($spec)) {
         $spec = array($spec=>$value);
      }
      foreach ($spec as $key=>$val) {
         if ('_' == substr($key, 0, 1)) {
            require_once 'Zend/View/Exception.php';
            throw new Zend_View_Exception(
            'Setting private var is not allowed',
            $this);
         }
         if ($this->smarty == null) {
            require_once 'Zend/View/Exception.php';
            throw new Zend_View_Exception(
            'Smarty not defined', $this);
         }
         $this->smarty->assign($key,$val);
      }
      return;

   }

   /**
     * Clear all assigned variables
     *
     * Clears all variables assigned to
     * Zend_View either via {@link assign()} or
     * property overloading ({@link __get()}/{@link __set()}).
     *
     * @return void
     */
   public function clearVars()
   {
      $this->smarty->clear_all_assign();
   }

   /**
     * Includes the view script in a scope with only public $this variables.
     *
     * @param string The view script to execute.
     */
   protected function _run()
   {
      $name = func_get_arg(0);
      $scriptName = basename(dirname($name)).'/'.basename($name);//
      $this->setTemplateDir(dirname(dirname($name)));
      echo $this->smarty->fetch($scriptName);
   }
}

et indiquer au controleur de l'utiliser

Code:

Zend_Loader::loadClass(Fast_View_Smarty);
$view = new Fast_View_Smarty();
$viewRenderer= Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setView($view)->setViewSuffix('tpl');

Voilà nous avons ajouté 5 moteurs de view dont 3 avec moteur de template dans la journée.

Cordialement JYT

Dernière modification par sekaijin (17-08-2007 19:28:17)

Hors ligne

 

#2 17-08-2007 21:50:13

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: Ajoutez le moteur de template de votre choix à zend Framework

remplace tes dirname(dirname()) par dirname() ou realpath() les cumulés ne sert pas a grand chose

Hors ligne

 

#3 19-08-2007 13:20:27

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Ajoutez le moteur de template de votre choix à zend Framework

dirname(dirname(__File__)) te donne le path du dossier parent contenant le fichier qui exécute cette instruction.
dirname(__File__) te donne le dossier contenant le fichier

par contre dirname(realpath(../)) ne te donne pas le path du dossier parent contenant le fichier qui exécute cette instruction mais le parent du dossier contenant le script appelé dans zf ce sera le parent du dossier contenant index.php

mais ceci n'est qu'un détail d'implémentation. à toi de placer les fichier ou tu veux et à leur fournir le bon path

dans cet exemple cela correspond simplement à l'implémentation que nous avons choisie. et qui est celle que nous avons l'habitude d'utiliser dans nos applications.

A+JYT

Hors ligne

 

#4 04-11-2011 16:29:00

hadesjack
Membre
Date d'inscription: 12-10-2009
Messages: 23

Re: Ajoutez le moteur de template de votre choix à zend Framework

bonjour,
j'ai un souci avec est et zend framework.

Je penses que ce message est surtout dédié à sekaijin.

Donc mon souci est lié au fait que je récupère dans ma session  tout les variables $this->view.

plus exactement dans ce bout de code

Code:

/**
     * Includes the view script in a scope with only public $this variables.
     *
     * @param string The view script to execute.
     */
    protected function _run()
    {
        // récupère le chemin complet du template demandé
        $name = func_get_arg(0);
        // le template principal est considéré à la racine des templates
        // de l'application (ou du module).
        if (!isset($this->_ets->_mainTemplate)) {
            $this->setMainTemplate(str_replace(chr(92), '/', dirname(dirname($name)) . '/main.html'));
        }
        // initialiser ets
        require_once("TemplatesEngines/Ets/Ets.php");
        // on indique à l'arbre de données d'Ets quel est le template à inclure
        $this->_ets->_content = str_replace(chr(92), '/', $name);
        $this->_ets->_templatesDir = dirname(dirname($name)) . '/';
        // rendu de la page
        printt($this->_ets, $this->_ets->_mainTemplate);
    }

je vais avoir a cette ligne  printt($this->_ets, $this->_ets->_mainTemplate);
les donné de la variable $this->_ets qui ce retrouve plus tard dans ma session.
je n'arrive pas à comprendre pourquoi. de plus ca ne ce met pas directement à la racine de session mais dans $_SESSION['historic']['_parent'].

Merci d'avance.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages