FAQ Zend FrameworkConsultez toutes les FAQ

Nombre d'auteurs : 16, nombre de questions : 39, dernière mise à jour : 8 février 2020 

 
OuvrirSommaireZend_View

Il faut appeler la méthode setEscape() de la Vue, dans la méthode init() du contrôleur :

 
Sélectionnez
class IndexController extends Zend_Controller_Action
{
    ...
 
    function init()
    {
        ...
        $this->view->setEscape('utf8_encode');
        ...
    }
 
    ...
}
Créé le 22 avril 2007  par Guillaume Rossolini

Oui, il est possible d'utiliser un moteur de gabarits (template engine) avec Zend_View. La Vue (du point de vue du Zend Framework) est donc un script en PHP pur, qui utilise un gabarit en HTML pur (selon la syntaxe du moteur choisi).

Créé le 25 juin 2007  par Guillaume Rossolini

N'importe quel moteur de gabarits peut convenir. C'est à vous de choisir celui qui vous convient le mieux.

Créé le 25 juin 2007  par Guillaume Rossolini

Lien : Comparatif : Les principaux moteurs de template en PHP, par Guillaume Rossolini

Si votre site a un header (doctype, css, menu...) et un footer (menu de bas de page, infos...) commun à toutes les pages, une façon simple de l'implémenter est d'intégrer le code suivant à chaque script de vue :

 
Sélectionnez
<?php echo $this->render('header.phtml'); ?>
 
// ici le contenu de votre page
 
        <?php echo $this->render('footer.phtml'); ?>

Mais ce n'est pas du tout DRY (Don't Repeat Yourself, ne vous répétez pas). Nous vous proposons donc d'utiliser un template principal qui affiche en bonne place le contenu du script d'action appelé.

Notre but est non pas de faire un render() de l'header et du footer dans chaque script de vue, mais plutôt d'utiliser un template principal qui affiche le contenu du script d'action appelé.

Le Zend_Controller_Action_Helper_ViewRenderer est un code qui automatise le render d'un template fondé sur l'action appelée. Il est très utile, mais il fait un render du template d'action, pas du template principal. Il s'agit donc d'étendre le Zend_Controller_Action_Helper_ViewRenderer pour qu'il intègre notre template principal. On en profitera pour modifier automatiquement le suffixe par défaut des scripts de vue (.phtml) en .tpl.php.

Le template principal du site s'appelle site.tpl.php et se situe dans views/scripts. Il pourrait ressembler à ceci :

 
Sélectionnez
<!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" lang="fr" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title><?php echo $this->escape($this->pageTitle);?></title>
<link rel="stylesheet" href="<?php echo $this->baseUrl; ?>/css/site.css"
  type="text/css" media="screen" />
</head>
<body>
    <div id="header">
        <?php echo $this->menu();  /* menu view helper */ ?>
    </div>
    <div id="content">
        <?php echo $this->render($this->actionScript); ?>
    </div>
    <div id="footer">
        Copyright 2007 Rob Allen
    </div>
</body>
        </html>

$this->actionScript est le script associé à l'action courante qui est automatiquement déterminée par Zend_Controller_Action_Helper_ViewRenderer. Par exemple, pour l'action index du contrôleur index, le script d'action est views/scripts/index/index.tpl.php.

Nous devons étendre le Zend_Controller_Action_Helper_ViewRenderer :

application/(default/)views/helpers/ViewRenderer.php
Sélectionnez
<?php
class Controller_Action_Helper_ViewRenderer
    extends Zend_Controller_Action_Helper_ViewRenderer
{
    /**
     * Nom du template principal. Par défaut : 'site.tpl.php'.
     *
     * @var string
     */
    protected $_layoutScript = 'site.tpl.php';
 
 
    /**
     * Constructeur
     *
     * Configure le suffixe des scripts de vue à "tpl.php" sauf si
     * un autre suffixe est passé dans les paramètres $options
     *
     * @param  Zend_View_Interface $view
     * @param  array $options
     * @return void
     */
    public function __construct(Zend_View_Interface $view = null,
                                array $options = array())
    {
        if (!isset($options['viewSuffix'])) {
            $options['viewSuffix'] = 'tpl.php';
        }
        parent::__construct($view, $options);
    }
 
    /**
     * Configure le template principal
     *
     * @param string $script
     */
    public function setLayoutScript($script)
    {
        $this->_layoutScript = $script;
    }
 
    /**
     * Renvoie le nom du template principal
     *
     * @return string
     */
    public function getLayoutScript()
    {
        return $this->_layoutScript;
    }
 
    /**
     * Renvoie le script d'action et l'assigne à la vue pour l'utiliser
     * dans le template principal. Fait un render() du template principal
     * et complète le body de l'objet Response.
     *
     * @param string $script
     * @param string $name
     */
    public function renderScript($script, $name = null)
    {
        $this->view->baseUrl = $this->_request->getBaseUrl();
        if (null === $name) {
            $name = $this->getResponseSegment();
        }
 
        // affecte le nom du script d'action à la vue
        $this->view->actionScript = $script;
 
        // Fait un render() du template principal
        // et complète le body de l'objet Response.
        $layoutScript = $this->getLayoutScript();
        $layoutContent = $this->view->render($layoutScript);
        $this->getResponse()->appendBody($layoutContent, $name);
 
        $this->setNoRender();
    }
        }

Tout ce qu'il nous reste à faire est de modifier notre bootstrap (fichier d'amorce) pour que notre nouveau ViewRenderer soit utilisé à la place de celui par défaut. On ajoute donc les lignes suivantes dans index.php avant la première instanciation du FrontController :

bootstrap
Sélectionnez
<?php
// Utilise notre ViewRenderer action helper
require_once('../application/(default/)views/helpers/ViewRenderer.php');
$viewRenderer = new Controller_Action_Helper_ViewRenderer();
        Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

C'est tout ! Notre script d'action contient juste le code HTML spécifique à l'action, et notre template principal est rendu automatiquement avec le code HTML de l'action au bon emplacement !

Créé le 9 juillet 2007  par Rob Allen, vg33
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.