Utiliser Zend_Layout

L'utilisation classique de Zend_Layout est simple. En supposant que vous utilisez Zend_Application, il suffit simplement de passer des options de configuration et créer un script de layout.

Layout Configuration

L'endroit recommandé pour stocker les layouts est "layouts/scripts/" dans l'application:

  1. application
  2. |-- Bootstrap.php
  3. |-- configs
  4. |   `-- application.ini
  5. |-- controllers
  6. |-- layouts
  7. |   `-- scripts
  8. |       |-- layout.phtml

Pour initialiser Zend_Layout, ajouter ceci à votre fichier de configuration ("application/configs/application.ini"):

  1. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
  2. resources.layout.layout = "layout"

La première ligne indique où chercher les scripts de layout; la seconde donne le nom du script à utiliser (l'extension est supposée ".phtml" par défaut).

Créer un script de layout

Il convient maintenant de créer un script de layout. D'abord, vérifiez l'existance du dossier "application/layouts/scripts"; puis ouvrez un éditeur et créez une mise en page balisée. Les scripts de layout sont des scripts de vue, avec quelques différences tout de même.

  1. <html>
  2. <head>
  3.     <title>My Site</title>
  4. </head>
  5. <body>
  6.     <?php echo $this->layout()->content ?>
  7. </body>
  8. </html>

Dans l'exemple ci-dessus, un appel à l'aide de vue layout() y est effectué. Lorsque vous activez l'instance de Zend_Layout, vous avez aussi accès à une aide d'acion et de vue qui permettent d'accéder à l'instance de Zend_Layout; et vous pouvez ainsi appeler des méthodes sur l'objet layout. Dans notre cas, nous récupérons une variable appelée $content, et nous l'affichons. Par défaut, $content est peuplée du contenu de la vue rendue pour l'action en cours. Sinon, tout ce que vous feriez dans un script de vue est valide dans un script de layout: appel d'aides ou de méthodes sur la vue.

Maintenant, nous avons un script de layout fonctionnel et notre application sait où le trouver.

Accéder à l'objet Layout

Il est probable que vous ayez besoin d'accéder à l'objet instance layout. Cela est possible de trois manières:

  • Dans des scripts de vue: utilisez l'aide de vue layout(), qui retourne l'instance de Zend_Layout enregistrée au moyen du plugin MVC.

    1. <?php $layout = $this->layout(); ?>

    Comme cela retourne l'objet de layout, vous pouvez appeler dessus toute méthode ou assigner des variables.

  • Dans vos contrôleurs: utilisez ici l'aide d'action layout(), qui agit comme l'aide de vue.

    1. // Appel de l'aide comme méthode sur le gestionnaire d'aides:
    2. $layout = $this->_helper->layout();
    3.  
    4. // Ou, de manière plus détaillée:
    5. $helper = $this->_helper->getHelper('Layout');
    6. $layout = $helper->getLayoutInstance();

    Comme avec l'aide de vue, vous pouvez appeler dès lors n'importe quelle méthode de layout ou lui assigner des variables.

  • Ailleurs: utilisez la méthode statique getMvcInstance(). Cette méthode retourne l'instance de layout comme déja vu plus haut maintenant.

    1. $layout = Zend_Layout::getMvcInstance();
  • Via le bootstrap: utilisez la ressource layout qui crée, configure et retourne l'objet Zend_Layout.

    1. $layout = $bootstrap->getResource('Layout');

    Partout où vous avez accès à l'objet bootstrap, il s'agit de la méthode recommandée par rapport à getMvcInstance().

Autres opérations

Dans la plupart des cas, le script de configuration de layout ci-dessus (avec quelques modifications) répondra à vos besoins. Cependant, dans certains cas il peut être intéressant d'utiliser d'autres fonctionnalités. Dans les exemples qui suivent, vous allez utiliser une desméthodes listées ci-dessus pour récupérer l'objet layout.

  • Affecter les variables de layout. Zend_Layout garde en mémoire les variables de vue spécifiques à la layout, la clé $content en est un exemple. Vous pouvez assigner et récupérer ces variables grâce à la méthode assign() ou en y accédant comme des attributs classiques.

    1. // Affecter du contenu:
    2. $layout->somekey = "foo"
    3.  
    4. // Afficher ce même contenu:
    5. echo $layout->somekey; // 'foo'
    6.  
    7. // Utiliser la méthode assign() :
    8. $layout->assign('someotherkey', 'bar');
    9.  
    10. // Accéder à la variable reste identique:
    11. echo $layout->someotherkey; // 'bar'
  • disableLayout(). Occasionellement, vous pouriez vouloir d"sactiver totalement les layouts, par exemple, pour répondre à une requête AJAX ou autravers d'une API RESTful. Dans ces cas, appelez la méthode disableLayout() de l'objet layout.

    1. $layout->disableLayout();

    Le contraire de cette méthode, enableLayout(), permet de ré-activer le rendu des layouts pour l'action en cours.

  • Utiliser un autre script de layout: Si vous avez plusieurs scripts de layout pour votre application, vous pouvez selectionner lequel rendre grâce à la méthode setLayout(). Précisez alors le nom du script de layout, sans l'extension.

    1. // Utiliser le script de layout "alternate.phtml":
    2. $layout->setLayout('alternate');

    Le script de layout doit se trouver dans le $layoutPath précisé via la configuration (en bootstrap générallement). Zend_Layout utilisera le nouveau script à rendre.

blog comments powered by Disqus