Composants de vues : Zend_View

Zend_View est le composant correspond à la « View » dans le modèle MVC. Il permet de séparer la vue des scripts des contrôleurs.

Zend_View permet d’utiliser PHP directement comme langage de template. Il est possible d’utiliser n’importe quels autres autres moteur de template, il suffit dans ce cas d‘implémenter un adaptateur entre la classe Zend_View et le moteur de template choisi. Je ne peut que déconseiller l’utilisation d’un moteur de template autres que PHP.

Le composant Zend_View est utilisable soit directement en composant indépendant, soit dans le cadre du modèle MVC fournit dans le Zend Framework.

Exemple de contrôleur

$data = array(
  new Artcicle(array(
    'auteur' => 'Sylvain FIX',
    'titre'    => ''
    'url'      => ''
  )),
  new Artcicle(array(
    'auteur' => 'Sylvain FIX',
    'titre'    => ''
    'url'      => ''
  )),
);
 
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->articles = $data;
 
echo $view->render('articlelist.php');

Script de vue

Le script de vue est un script PHP comme les autres à la différence près qu’il s’exécute dans la portée de l’instance de la classe Zend_View.

<?php if ($this->articles): ?>
    <table summary="Liste des articles">
        <caption>Liste des articles</caption>
        <thead>
            <tr>
                <th>Auteur</th>
                <th>Titre</th>
                <th>Url</th>
            </tr>
        </thead>
        <tbody>
        <?php foreach ($this->articless as $key => $val): ?>
        <tr>
            <td><?php echo $this->escape($val->auteur) ?></td>
            <td><?php echo $this->escape($val->titre) ?></td>
            <td><?php echo $this->escape($val->url) ?></td>
        </tr>
        <?php endforeach; ?>
 
        </tbody>
</table>
<?php else: ?>
    <p>Aucun livre à afficher</p>
<?php endif; ?>

Configuration du Zend_View

Ce composant dispose de plusieurs options de configuration.

basePath
Indique ou le chemin où l’on va trouver les helpers, les filtres et les scripts de vues. La structure attendue sous le basePath est simple, elle comprend les répertoires helpers, filters et scripts qui correspondent respectivement les 3 éléments pré-cités.
encoding
Indique l’encodage des caractères qui sera utilisé dans les différentes fonctions (htmlentities, htmlspecialchars, …). Par défault on utilise l’encodage ISO-8859-1 (latin-1)
escape
Indique le callback à utiliser pour la méthode escape() en charge de l’échappement des caractères.
filter
Indique le filtre à utiliser avant d’effectuer le rendu d’un script.
strictVars
Force Zend_View à emettre des « notices » et des « warnings »quand des variables non inialisées sont lues. Il est fortement conseiller d’utiliser cette option en développement.

Les balises courtes

Les balises courtes (<? et <?=) apportent une plus grande lisibilité au code du template. Mais des raisons évidentes, ces balises sont désactivés (désactivés par défaut dans le php.ini-recommended, incompatibilité avec le XML, …) dans la configuration des serveurs.

Le composant Zend_View dispose d’un enveloppe de flux pour convertir les balises courtes en balises longues :

$view->setUseStreamWrapper(true);

Ainsi, il n’est pas nécessaire de changer la configuration du serveur. La documentation parle d’un risque de baisse de performances sans pour autant donner de détails précis sur les pertes.

Par ailleurs, il fortement conseiller d’utiliser la syntaxe alternative pour les structures de contrôles. Cette manière d’écrire améliore la lisibilité des codes sources

<?php if ($condition): ?>
  // Traitement
<?php endif; ?>

Helpers

Le composants de vue est accompagné d’un ensemble de helpers qui en font un puissant langage de template, on dispose d’helper pour la gestion des formulaires, les valeurs passés en paramètres sont automatiquement échappés.

<form action="login.php" method="post">
<p>
<dl>
  <dt><label for="login">Login :</label></dt>
  <dd><?= $this->formText('login', 'Login', array('size' => 32)) ?></dd>
  <dt><label for="assword">Password :</label></dt>
  <dd><?= $this->formText('password', 'Password', array('size' => 32 ) ?></dd>
</dl>
<?= $this->formSubmit('ok', 'OK') ?>
</p>
</form>

On trouve également des aides pour faire des cycles,des listes, intégrer du Flash, , appeler d’autres templates (partial), et pour la capture / restitution de contenu (placeholder).

Parmi les placeholder standard, le Zend Framework fournit Doctype, HeadLink, HeadMeta, HeadScript, HeadStyle, HeadTitle, InlineScript qui permettent au sein même d’une venu de venir modifier ou enrichir les méta-donnés, les styles ou le code javascript d’une page Web.

Il existe encore plein d’autres helper disponible par défaut, la documentation donnera largement plus de détail à ce sujet. Cependant, il est important de noter que chaque helper répond à un besoin récurrent de tout intégrateur Web.

Helper personnalisé

Il est extrêmement facile d’écrire d’écrire des helper personalisé, il de créer une classe qui implémente Zend_View_Helper_Interface ou qui étend Zend_View_Helper_Abstract, la fichier contenant la classe doit bien sûr se trouvais dans le chemin d’inclusion à la configuration du composant Zend_View.

class Ma_View_Helper_MonHelper extends Zend_View_Helper_Abstract {
 
    public function monHelper() {
        return "Mon helper";
    }
}

L’utilisation est encore plus simple :

<?= $view->monHelper() ?>

Composants fournissant d’autres helpers

Il existe dans le Zend Framework de nombreux composants qui viennent enrichir les helpers disponibles directement dans le composant Zend_View :

  • Zend_Navigation fournit des helpers pour la génération de menu, de sitemap, de lien, de fil d’ariane, … .
  • Zend_Dojo fournit des helpers qui encapsule la bibliothèque javascript Dojo
  • ZendX_Jquery fournit des helpers qui encapsule la bibliothèqe javascript JQuery

Pour ceux qui doutais encore que PHP n’est pas un bon langage de template, je crois que le Zend_View est le composant qu’il ne connaissait pas. L’essayer c’est l’adopter. Et encore, ici je ne parle même pas de son intégration dans le cadre MVC avec le Zend_Layout qui décuple encore la puissance de ce composant.

Articles liés

Supprimer $this dans les scripts de Zend_View
Sortie de Zend framework 1.7.5
Template eZ Publish en PHP
Zend_Form : LE composant de formulaire
Changement Autoload avec le Zend Framework 1.8

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">