Le blog du pangolin

Accueil > Programmation > PHP > CodeIgniter > Utiliser les templates dwoo avec codeigniter

Utiliser les templates dwoo avec codeigniter

mercredi 25 avril 2012, par Super Pangolin

Les vues de codeIgniter, c’est pratique mais un peu basique. Nous allons ajouter le moteur de template "dwoo" à notre framework préféré pour le rendre un peu plus sexy. Pour cela, nous allons suivre le tutoriel de Phil Sturgeon.

Tout d’abord, téléchargeons la dernière version de dwoo sur le site officiel. Décompressez le répertoire "Dwoo" dans le répertoire "libraries" de votre application.

Récupérez ensuite le code de Phil et copiez le fichier "parser.php" dans votre répertoire "config" et "MY_Parser.php" dans votre répertoire "libraries".

Vous vous rendrez compte que ce fichier MY_Parser comporte deux erreurs. Vous devrez commenter la ligne 146

//$data = array_merge($data, $this->_ci->load->_ci_cached_vars);

et modifier la ligne 158 :

$string = str_replace(array('{elapsed_time}', '{memory_usage}'), array('[elapsed_time]', '[memory_usage]'), $string);

Créez ensuite le répertoire "application/cache/dwoo/compiled". Sivous êtes sous linux, vous devrez mettre les droits en écriture dessus.

Utilisation

Pour activer ce parser, on doit avoir le code suivant dans son contrôleur :

  1. <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. class Dwoo_test extends CI_Controller {
  4.     function index()
  5.     {
  6.         $this->load->library('parser');
  7.         $this->parser->parse('test', array('message' => 'OH HAI!'));
  8.        
  9.         }
  10. }

Télécharger

Pareil que le parser de base, en somme !!

La syntaxe de Dwoo

Pour ceux qui connaissent, la syntaxe est proche de celle de smarty. Pour ceux qui ne connaissent pas, cela permet de simplifier l’écriture des vues en évitant tous les

  1. <?php echo $monTexte; ?>

Pour afficher le contenu de variables :

contrôleur :

  1.         $this->load->library('parser');
  2.         $var1 = 'Mon texte';
  3.         $var2 = array('pomme', 'poire', 'pêche', 'abricot');
  4.         $var3 = array('France' => 'Paris', 'UK' => 'Londres', 'Allemagne' => 'Berlin');
  5.         $var4 = new stdClass();
  6.         $var4->type='chat';
  7.         $var4->pattes=4;
  8.         $var4->moustaches=true;
  9.         $var4->alimentation='croquettes';
  10.  
  11.         $this->parser->parse('test', array('data1' => $var1, 'data2' => $var2, 'data3' => $var3, 'data4' => $var4));

Télécharger

et dans la vue :

  1. 1 : {$data1}<br />
  2. 2-1 : {$data2.1}<br />
  3. 2-2 : {$data2.2}<br />
  4. 2-3 : {$data2.3}<br />
  5. 3-France : {$data3.France}<br />
  6. 3-UK : {$data3.UK}<br />
  7. 3-Allemagne : {$data3.Allemagne}<br />
  8. 4->type : {$data4->type}<br />
  9. 4->pattes : {$data4->pattes}<br />
  10. 4->moustaches : {$data4->moustaches}<br />
  11. 4->alimentation : {$data4->alimentation}<br />

Télécharger

On peut également coder des instructions conditionnelles et des boucles :

  1. {if $data4->moustaches}
  2.     Il a des moustaches
  3. {else}
  4.     Il n'a pas de moustaches
  5. {/if}

Télécharger

Pour les boucles, on a plusieurs choix :

  • loop (qui correspond à un for, mais qui nécessite obligatoirement un indice numérique et que l’on connaisse la structure de chaque occurrence.
  • foreach qui correspond à son homologue PHP.
  • for

Loop :

Si on passe le tableau suivant au template :

  1.         $var5 = array(array('pays' => 'France', 'capitale' => 'Paris'),
  2.                         array('pays' => 'UK', 'capitale' => 'Londres'),
  3.                         array('pays' => 'Allemagne', 'capitale' => 'Berlin'));

Télécharger

on va pouvoir accéder aux données du tableau avec ce code :

  1. {loop $var5}
  2.     {$pays} - {$capitale} <br />
  3. {/loop}

Télécharger

Foreach :

C’est exactement la même syntaxe qu’en PHP. Par exemple pour mon tableau $var3 :

  1. $var3 = array('France' => 'Paris',
  2.         'UK' => 'Londres',
  3.         'Allemagne' => 'Berlin');

Télécharger

je peux boucler de cette façon :

  1. {foreach $data3 nompays, donneespays}
  2.     {$nompays} - {$donneespays} <br />
  3. {/foreach}

Télécharger

La syntaxe est donc la suivante :

  1. {foreach $data3 maClé, mesDonnées}
  2.     {$maClé} - {$mesDonnées.uneDonnée} <br />
  3. {/foreach}

Télécharger

For :

Tout comme en PHP, for demande 3 paramètres : un indice de départ, un indice de fin et un itérateur. Mais il peut également être utilisé avec juste un nom d’indice et de tableau. La fin et l’itterateur seront paramétrés automatiquement en fonction du contenu du tableau.

Par exemple, avec notre var2 :

  1. $var2 = array('pomme', 'poire', 'pêche', 'abricot');

on peut écrire

  1. {for i 0 3}
  2.         {$i} - {$data2.$i}<br />
  3. {/for}

Télécharger

ou encore

  1. {for i $data2}
  2.         {$i} - {$data2.$i}<br />
  3. {/for}

Télécharger

Messages

  • Hello, j’ai intégré Dwoo template sans utiliser la librairie phil layout car je ne vois pas du tout l’utilité d’utiliser cette librairie template + dwoo en collaboration vue que l’on peut complètement se passer de la librairie philsturgeon template ?.....

    j’ai approté juste des petites modifications dans le coeur de la class librairie de dwoo template afin qu’il soit compatible CI 2.xxx (je ne sais plus ce que j’avais modifié par contre donc si quelqu’un a une erreur lors de l’intégration qu’il me demande).

    Après il suffit tout simplement d’utiliser dans les view ses propres layout que l’on nome comme on veut par convention, le mieux reste encore layout-default, layout-side-content etc...

    la librairie dwoo est très pompé sur smarty et plus lourd sur la compilation que smarty 3, tout en sachant que smarty 3 est encore plus puissant que son prédécesseur.

    Dwoo template gère l’héritage tout comme twig, smarty 3 et phpti (moteur de template tout en php pour ceux qui préfèreront et très complète aussi).

    donc pas besoin de librairie encombrante de template ou layout en plus, il suffit de faire jouer l’héritage de template :
    extends ’layout.tpl’

    notre code de la vue

    pour la gestion des javascript et css suffit d’utiliser les block et l’héritage des block

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.