9 mai 2013

CodeIgniter et Twig, Le duo gagnant

Par Jean-Marc Amon

Bonjour!!! Une fois de plus me revoilà toujours avec des raisons différentes. Je vais vous donner un topo pour installer Twig dans CodeIgniter.

Normalement je devrais plus avoir à vous dire ce que c’est que CodeIgniter, vous le connaissez. Pour ceux qui ne savent pas ce que c’est que CodeIgniter, c’est un framework (littéralement cadre de travail) qui vous permet de développer des applications web avec PHP, très rapidement, efficacement et avec moins de code à écrire. Pour plus d’infos allez sur la page du framework, vous pouvez débuter avec ce cours du site du zéro.

Logo CodeIgniter

Logo CodeIgniter

Les utilisateurs de Symfony2 sont déjà familier à Twig, c’est le moteur de template par défaut devéloppé par le créateur du framework Symfony Fabien Potencier. Twig est facile à prendre en main et vous permet de réaliser des templates très rapidement. J’ai utilisé symfony pendant un moment et j’ai trouvé Twig vraiment super. Depuis que j’utilise CodeIgniter je me demandais comment emmener mon Twig préferé avec moi et je crois que j’ai trouvé.

 

 

 

Twig Logo Logo de Twig

Utiliser Composer pour installer Twig dans CodeIgniter

Composer est un gestionnaire de dépendance pour PHP, vous n’avez pas besoin de savoir comment il fonctionne juste comment l’utiliser.

Télécharger et installer CodeIgniter

Une fois Codeigniter téléchargé, décompresser le fichier zip sur votre serveur de développement, vous devriez avoir l’arborescence suivante :

codeigniter-abo

Aborescence de CodeIgniter

Le répertoire user_guide n’est utile que pour la documentation, il n’est donc pas nécessaire sur le serveur.

Installer Composer

Composer est un fichier avec pour extension .phar, il contient du code php. Télécharger ici et déplacer dans votre installation de CodeIgniter (Dans la même arborescence que le dossier application). Vous devez avoir PHP dans votre environnement car nous allons utiliser Composer avec l’invite de commande de Windows, les utilisateurs de Linux devrait l’avoir déjà dans leur environnement.

Installer Twig avec Composer

Toujours dans la même arborescence que le dossier application, créer un fichier composer.json et insérez y ce code

{
 "require": {
    "twig/twig": "*"
  }
}

Enregistrez et ouvrez l’invite de commande sur Windows ou le Terminal pour Linux. Rendez vous à la racine de votre installation à coups de cd et exécuter cette commande :

php composer.phar install

Composer installe Twig. A la fin de l’installation vous devriez avoir de nouveaux fichiers et répertoire supplémentaires:

Nouvelle arborescence

Nouvelle arborescence

Fini les installations, passons à la configuration.

Configuration de CodeIgniter pour l’ utilisation de Twig

Modification du fichier /index.php

Ajouter tout en haut du fichier index.php le code suivant :

include_once './vendor/autoload.php';

Créer un fichier pour la configuration

Créer un fichier dans application/config/twig.php avec le code suivant

if (!defined('BASEPATH')) exit('No direct script access allowed');

$config['template_dir'] = APPPATH.'views';
$config['cache_dir'] = APPPATH.'cache/twig';

Créer une librairie pour Twig

Creer un autre fichier dans application/libraries/Twig.php avec le contenu suivant :

if (!defined('BASEPATH')) {exit('No direct script access allowed');}

class Twig
{
    private $CI;
    private $_twig;
    private $_template_dir;
    private $_cache_dir;

    /**
     * Constructor
     *
     */
    function __construct($debug = false)
    {
        $this->CI =& get_instance();
        $this->CI->config->load('twig');

        log_message('debug', "Twig Autoloader Loaded");

        Twig_Autoloader::register();

        //HMVC patch by joseayram
        //$template_module_dir = APPPATH.'modules/'.$this->CI->router->fetch_module().'/views/';
        $template_global_dir= $this->CI->config->item('template_dir');
        $this->_template_dir = array($template_global_dir);

        //end HMVC patch


        $this->_cache_dir = $this->CI->config->item('cache_dir');

        $loader = new Twig_Loader_Filesystem($this->_template_dir);

        $this->_twig = new Twig_Environment($loader, array(
                'cache' => $this->_cache_dir,
                'debug' => $debug,
        ));

            foreach(get_defined_functions() as $functions) {
                    foreach($functions as $function) {
                        $this->_twig->addFunction($function, new Twig_Function_Function($function));
                    }
            }


    }

    public function add_function($name)
    {
        $this->_twig->addFunction($name, new Twig_Function_Function($name));
    }

    public function render($template, $data = array())
    {
        $template = $this->_twig->loadTemplate($template);
        return $template->render($data);
    }

    public function display($template, $data = array())
    {
        $template = $this->_twig->loadTemplate($template);
        $template->display($data);
    }
}

Twig est maintenant installé et fonctionne parfaitement (si vous avez bien sûr suivi toutes les étapes)

Vérifions tout ça

Dans le dossier destiné aux vues de CodeIgniter, application/views, créer un fichier layout.html.twig. Ce fichier sera notre gabarit, notre template qui va recevoir les vues spécifiques. Mettez y le code d’exemple suivant.

      
        
          
            {% block title  %} {% endblock %}
            {% block stylesheet %} {% endblock %}
            {% block style %} {% endblock %}


{% block content %} {% endblock %}

{% block footer %} {% endblock %}

Créer un autre fichier avec dans le même repertoire nommé le index.html.twig avec ce code

{% extends layout.html.twig %}

{% block content %}

Youppii ça marche

{{ message }} {% endblock %} {% block style %}