CodeIgniter est un framework PHP MVC simple et léger. Il a l'avantage d'être léger, très modulable et facile d'accès.

Pour comprendre ce tutoriel, certains prérequis sont nécessaires :

  • Connaître PHP
  • Comprendre la programme orientée objet et la notion d'héritage associée
  • Avoir des notions sur l'architecture MVC

Si c'est le cas, vous pouvez commencer ce tutoriel pour tout savoir sur CodeIgniter.

Sommaire

  1. Présentation de CodeIgniter
  2. Téléchargement et installation
  3. L'arborescence de CodeIgniter
  4. Les contrôleurs
  5. Les vues
  6. Les helpers
  7. Configurer CodeIgniter

Présentation de CodeIgniter

CodeIgniter est un framework PHP qui s'exécute côté serveur. C'est un ensemble de ressources qui va vous permettre de développer plus rapidement en PHP.

L'architecture MVC permet de grandement faciliter le développement et la maintenance des applications et sites Internet. CodeIgniter prend, à juste titre, le parti d'utiliser ce modèle. Comment fonctionne-t-il ?

Le modèle MVC

Comme tous les sites, lorsque l'internaute va sur votre site, c'est le fichier index.php qui est appelé. C'est bien sûr toujours le cas avec CodeIgniter. Schématiquement, ce fichier va instancier une classe : un contrôleur. C'est à partir de ce contrôleur que vous pourrez appeler le modèle, vous permettant de récupérer des données, puis la vue, pour retourner ces données formatées en HTML.

Les étapes du MVC avec CodeIgniter

Le modèle MVC utilisé par CodeIgniter est remarquablement standard. En voici une représentation.

Architecture MVC

Explications :

  1. L'internaute envoie une requête au serveur en tapant une URL dans son navigateur. Un système de route très simple permet d'associer un contrôleur à cette url.
  2. Le contrôleur appelle un modèle (une classe PHP en fait). Le rôle de ce dernier est de récupérer des données (souvent dans la base de données). Cette étape n'est pas nécessaire si vous ne souhaitez pas récupérer de données.
  3. Le modèle retourne les données au contrôleur.
  4. Le contrôleur appelle la vue, qui va se charger d'intégrer les données dans le HTML.
  5. Le HTML final est envoyé à l'utilisateur afin qu'il puisse consulter le site normalement.

Téléchargement et installation

Pour débuter, il vous faut télécharger puis installer CodeIgniter. Ne vous inquiétez pas, c'est vraiment simple.

Télécharger CodeIgniter

Pour installer CodeIgniter, rendez-vous sur le site officiel de CodeIgniter puis cliquez sur le bouton download. Le téléchargement de la dernière version de CodeIgniter se lance.

Installer CodeIgniter

A la fin du téléchargement, ouvrez l'archive et extrayez là dans un nouveau dossier sur votre serveur (dans le dossier www). A noter que pour faire fonctionner CodeIgniter, votre serveur doit être équipé de PHP 5.1.6 ou plus.

En vous rendant avec votre navigateur à l'URL du dossier choisi (localhost/nomdudossier si vous êtes en local), vous devriez voir une page indiquant en titre Welcome to CodeIgniter! :

Welcome to CodeIgniter

Si c'est le cas, cela signifie que CodeIgniter fonctionne correctement sur votre serveur.

L'arborescence de CodeIgniter

L'arborescence des dossiers du framework est plutôt bien pensée. Architecture simple, pas de dossier superflu, ressources bien nommées et vous n'aurez jamais à modifier le code de CodeIgniter en lui-même (c'est très appréciable pour faire des mises à jour !).

Les dossiers et fichiers de base

Allez dans le dossier de CodeIgniter, voici ce qu'il contient :

  • application : c'est le dossier dans lequel nous allons travailler.
  • system : c'est le dossier qui contient le cœur de CodeIgniter. Vous ne devez jamais modifier son contenu !
  • user_guide : la même doc que celle disponible en ligne. Vous pouvez supprimer ce dossier.
  • .gitignore : ce fichier est utilisé pour les serveurs git. Vous pouvez le supprimer.
  • .travis.yml : ce fichier est utilisé pour les tests travis. Vous pouvez le supprimer.
  • index.php : c'est le fichier que l'internaute appellera lorsqu'il se connectera à votre site. Il est très important, à ne pas toucher.
  • license.txt : le fichier de licence. Vous pouvez le supprimer.

Voici donc, après un peu de nettoyage, les dossiers et le fichier qu'il nous reste. Simple non ?

  • application
  • system
  • index.php

Le dossier Application

Le dossier application est celui dans lequel nous allons passer tout notre temps. Comme vous pouvez le voir, il a de nombreux sous-dossiers. Voici ceux qui vont nous intéresser. Ignorez les autres dossiers pour le moment, nous y reviendrons plus tard.

  • config : ce dossier contient la configuration de notre site
  • controllers : la liste de nos contrôleurs (c'est la prochaine étape)
  • helpers : la liste de nos helpers (nous en parlerons plus tard)
  • models : la liste de nos modèles (nous en parlerons plus tard)
  • views : la liste de nos vues (nous en parlerons plus tard)

Les contrôleurs

Les contrôleurs représentent le cœur de votre application. Ils vont faire le lien entre les données et l'affichage. Ils seront la "logique" de votre application.

Fonctionnement des contrôleurs

Dans le dossier controllers vous trouverez un fichier welcome.php, ouvrez le. Plusieurs choses nous intéresse :

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

class Welcome extends CI_Controller {

    public function index() {
        $this->load->view('welcome_message');
    }

}

La première ligne est un code de sécurité implémenté par CodeIgniter.

Nous voyons qu'il s'agit d'une classe ayant le nom Welcome. Elle hérite de CI_Controller. CI_Controller est une classe native de CodeIgniter permettant d'implémenter le fonctionnement global des contrôleurs. Tous vos contrôleurs devront donc être obligatoirement être des enfants de cette classe.

Cette classe ne contient qu'une méthode index qui exécute une ligne bien étrange.

$this->load->view('welcome_message');

Nous voyons que cette ligne appelle la fonction view d'un objet load. Cette objet est déclaré dans CI_Controller. En fait, cette ligne est juste l'équivalent d'un include de PHP. Disons que c'est un include boosté.

En clair, la fonction index charge simplement une vue nommée welcome_message et l'affiche à l'écran. Tout ça en une seule ligne !

Les urls avec CodeIgniter

Si vous avez bien suivi, vous vous demandez certainement comment ça se fait que lorsque vous allez sur votre site c'est le contrôleur Welcome qui est chargé.

En fait, CodeIgniter utilise un système de routes très simple. Le contrôleur est directement renseigné dans l'url.

Fonctionnement des URL avec CodeIgniter

Le slash permet de séparer les urls en plusieurs segments. Les voici sous forme de liste :

  1. http://www.monsite.com
  2. index.php
  3. utilisateur
  4. profil
  5. 1

Voici quelques explications pour chaque segment :

  • Le premier segment est l'url de base de votre site, le domaine.

  • Le deuxième est le nom de fichier index.php. Il est nécessaire pour le fonctionnement du framework, mais nous verrons une astuce pour le masquer juste après.

  • Le troisième segment correspond au contrôleur que nous allons appeler. Ici, il s'agirait du contrôleur Utilisateur.

  • Le quatrième, quant à lui, correspond à la méthode que l'on souhaite appeler. Elle doit bien entendu être présente dans le contrôleur précédent. A noter que les méthodes doivent nécessairement être publiques pour être appelée.

  • Le dernier segment est un paramètre que recevra la méthode.

Voici donc à quoi pourrait ressembler le contrôleur de cet exemple :

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

// Par convention, le nom de la classe a une majuscule
class Utilisateur extends CI_Controller {

    // La méthode profil qui sera appelé a un paramètre "$id". Dans notre exemple, il vaudra 1.
    public function profil($id) {

    }
}

Si vous nommez votre méthode index, il ne sera pas nécessaire de spécifier son nom dans l'url. Ainsi, cette url : www.monsite.com/utilisateur appellerait la fonction index du contrôleur utilisateur.

Plutôt sympa non ?

Contrôleur par défaut

Et si nous ne mettons aucun argument ? Si nous appelons directement http://www.monsite.com/ ?

CodeIgniter prévoit bien sûr le cas. Dans la configuration de notre site, nous pouvons lui spécifier quel contrôleur sera appelé si aucun n'est spécifié. Ouvrez le fichier application/config/routes.php et regardez cette ligne :

$route['default_controller'] = "welcome";

Elle spécifie que le contrôleur welcome est utilisé par défaut. Comme vous vous en doutez, c'est la méthode index de ce contrôleur qui sera appelée.

Supprimer le index.php des urls CodeIgniter

Vous pouvez supprimer le index.php de l'url avec un petit code à mettre dans le .htaccess à la racine de votre site :

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

Ensuite, ouvrez le fichier application/config/config.php puis passez la variable $config['index_page'] (ligne 17) à vide.

Cette ligne

$config['index_page'] = "index.php";

est à remplacer par celle-ci

$config['index_page'] = "";

Vous pouvez maintenant retirer le index.php de l'url, tout fonctionne normalement.

Les vues

Si vous vous rendez dans le dossier views dans application, vous verrez la vue welcome_message, ouvrez la. Vous trouvez une page HTML toute simple. C'est celle-ci qui est affichée à l'écran lorsque vous affichez le site.

Comment ça marche ?

Comprendre la notion de vue

Une vue est tout simplement un fichier .php qui va contenir le html de votre page. L'idée est d'appeler la vue depuis le contrôleur afin de lui envoyer des données préalablement récupérées. La vue se chargera d'intégrer ces données dans le format HTML classique.

Comme en PHP, il est possible d'imbriquer (include) les vues entre elles. L'idée étant bien sûr d'éviter au maximum la redondance.

Charger une vue

Comme nous l'avons vu précédemment, l'affichage d'une vue est assez simple, une seule ligne suffit dans le contrôleur.

$this->load->view('welcome_message');

Cet appel doit toujours se faire dans un contrôleur !

Cette ligne charge et affiche la vue se trouvant dans le fichier application/views/welcome_message.php.

Bien entendu, pour mieux s'organiser, vous pouvez créer des sous dossiers dans le dossier views. Il est tout à fait possible d'appeler la vue application/views/utilisateur/profil.php en utilisant le code suivant :

$this->load->view('utilisateur/profil');

Envoyer des données à la vue

La fonction view() prend d'autres paramètres. Comme nous l'avons vu, le premier est le nom de la vue. Le deuxième est un tableau qui va contenir les données que nous allons envoyer à la vue.

Prenons comme exemple ce controleur :

class Utilisateur extends CI_Controller {

    public function profil() {
        $data = array('nom' => 'Robert');
        $this->load->view('utilisateur/profil', $data);
    }

}

Nous voyons que nous passons un tableau associatif à la vue. Ce faisant, il est maintenant très simple de récupérer les données dans la vue (fichier profil.php) en faisant :

echo $nom; // ceci affichera "Robert"

Et oui ! La clé du tableau devient le nom de la variable. C'est aussi simple que ça.

Stocker la vue dans une variable

La fonction view() prend également un troisième paramètre très intéressant. Si vous le mettez à true, la vue ne s'affichera pas directement, elle sera retournée. Cela signifie que vous pourrez stocker le contenu de la vue dans une variable.

$html = $this->load->view('utilisateur/profil', $data, true);

Ici, la vue sera stocker dans la variable $html et ne sera pas affichée.

Créer un système de template avec CodeIgniter

Avec tout ceci, nous allons pouvoir créer un système de template. Sur un site Internet, il y a toujours des parties qui sont identiques pour chaque page (header et footer notamment). Nous pouvons facilement créer un système permettant de gérer cela.

Tout d'abord, il faut créer une vue template.php à la racine du dossier views et insérez y le code suivant :

<html>
    <head>
        <title>Ma page</title>
    </head>
    <body>

        <header>Ceci est le header</header>

        <div>
            <!-- La vue s'affichera ici -->
            <?php echo $page; ?>
        </div>

        <footer>Ceci est le footer</footer>
    </body>
</html>

Ce sera toujours cette vue que l'on appellera. Lors de cel appel, il nous suffira de lui passer en paramètre le contenu d'une autre vue que l'on aura instanciée dans la variable $page. Le contrôleur ressemblera donc à ceci :

class Utilisateur extends CI_Controller {

    public function profil() {
        $data = array('nom' => 'Robert');

        // On stocke notre page dans la variable $page
        $page = $this->load->view('utilisateur/profil', $data, true);

        // On affiche notre page avec le template
        $this->load->view('template', array('page' => $page));
    }

}

Bien sûr vous pouvez facilement adapter un tel système à vos besoins et y ajouter quelques fonctionnalités plus robuste.

Les helpers

Les helpers sont des fichiers PHP bien pratiques qui permettent d'accéder à de petites fonctions depuis n'importe où.

Utilisation des helpers

Un helper est un ensemble de fonctions pouvant être appelé depuis le contrôleur, la vue ou le modèle. C'est simplement un fichier .php (sans classe) qui liste des fonctions regroupées par un même thème. Si le principe n'est pas très "POO" il faut reconnaitre que c'est très utile.

Pour voir un exemple de helper, allez dans le dossier system/helpers/ puis ouvrez le fichier email_helper.php. En supprimant les commentaires, voici le contenu du fichier :

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

if ( ! function_exists('valid_email')) {
    function valid_email($address) {
        return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $address)) ? FALSE : TRUE;
    }
}

if ( ! function_exists('send_email')) {
    function send_email($recipient, $subject = 'Test email', $message = 'Hello World') {
        return mail($recipient, $subject, $message);
    }
}

function_exists permet seulement de savoir si la fonction a déjà été déclarée. Ceci permet d'éviter les conflits et de ne pas recharger deux fois la même fonction.

Vous voyez qu'il ne s'agit pas ici de classe, c'est vraiment un fichier en PHP brut. Ce helper contient seulement deux fonctions : valid_email et send_email.

Ces deux fonctions pourront être appelées directement depuis le contrôleur, la vue ou le modèle en écrivant le code suivant :

valid_email('test@test.test');

Charger un helper

Afin d'économiser des ressources, les helpers ne sont pas chargés par défaut. De cette façon, vous ne chargez les fichiers que lorsque vous les utilisez.

Les helpers se trouvent dans le dossier application/helpers/. Le nom du fichier .php doit être suffixé par _helper. Pour pouvoir utiliser un helper, il faut préalablement le charger dans le contrôleur. Le principe est le même que pour les vues :

$this->load->helper('nom_du_helper');

Noter qu'il n'est pas nécessaire d'inclure le suffixe _helper pour s'en servir.

Vous pouvez également charger plusieurs helpers en même temps en passant un tableau en paramètre.

$this->load->helper(array('helper_1', 'helper_2'));

Les helpers de base

De nombreux helpers sont présents de base dans CodeIgniter. La documentation est remarquablement bien faite. Prenez le temps de regarder ces helpers pour voir leur utilité, ils vous feront gagner beaucoup de temps :

Le helper url

Certains helpers vous seront très utiles. Le plus utile est probablement url_helper.

La fonction site_url()

La fonction site_url() dans le helper url_helper permet de construire une url. Elle est très importante car vous allez pouvoir maitriser vos urls très simplement.

Le principe est de ne jamais écrire la base de l'url du site. Celle-ci peut être dynamique ou changer, cela vous éviterait de réécrire toutes vos urls. L'utilisation de site_url est extrêmement recommandée !

Le code suivant

    <a href="<?php echo site_url('utilisateur/profil'); ?>">Clique moi</a>

générera

    <a href="http://www.monsite.com/utilisateur/profil">Clique moi</a>

Prenez l'habitude d'écrire vos urls de cette manière, vous gagnerez beaucoup de temps par la suite !

Si vous ne spécifiez aucun paramètre, l'url de base du site sera affichée : http://www.monsite.com.

La fonction redirect()

Comme son nom l'indique, cette fonction permet de simplement faire une redirection en php. De la même façon que site_url(), vous avez seulement besoin d'écrire la fin de l'url.

class Utilisateur extends CI_Controller {

    public function index() {
        redirect('utilisateur/profil'); // Redirige l'utilisateur vers la page profil
    }

    public function profil() {
        $this->load->view('profil');
    }

}

Si l'utilisateur tape l'url http://www.monsite.com/utilisateur, il sera redirigé vers http://www.monsite.com/utilisateur/profil. Rien de bien compliqué ici.

A noter tout de même que c'est une redirection 302 qui sera exécutée. Si vous souhaitez modifier cela, vous aurez plus d'informations sur la documentation.

La fonction current_url()

Cette fonction retourne l'url courante avec tous les paramètres.

Créer son propre helper

Bien entendu, vous pouvez vous-même créer vos propres helpers. C'est très intéressant car les helpers répondent généralement à des besoins assez généraux, il sera donc pertinent de les réutiliser dans différents projets.

Pour créer un helper, c'est très simple. Créer un nouveau fichier .php dans le dossier application/helpers/ portant le nom de votre helper suffixé par _helper.

Pour des raisons de sécurité, coller la ligne suivante tout en haut du fichier :

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

Puis vous pouvez commencer à créer vos propres fonctions. Pensez à bien entourer chaque fonction du if permettant de savoir si la fonction existe déjà.

if ( ! function_exists('ma_fonction')) {
    function ma_fonction($text) {

    }
}

Surcharger un helper existant

Pour certaines raisons particulières, il peut être utile de modifier le comportement d'un helper existant ou bien de lui ajouter des fonctions.

Pour cela, vous devez créer un nouveau fichier dans le dossier application/helpers/ qui portera le même nom que le helper à hériter. Il sera néanmoins préfixés par MY_.

Exemple : si je veux surcharger le helper url_helper, je devrais créer le fichier MY_url_helper.php dans le dossier application/helpers/.

Ce faisant, lorsque vous chargerez le helper de base, c'est votre helper qui sera chargé en priorité (et donc vos fonctions aussi) et seulement ensuite le helper de base. Par conséquent, si vous avez écrit une fonction portant le même nom que celle du helper de base, c'est votre fonction qui sera utilisé. Voici tout l'intérêt de vérifier préablablement si une fonction portant un nom identique a déjà été déclarée à l'aide de function_exists.

if ( ! function_exists('ma_fonction')) {

}

Configurer CodeIgniter

Toute la configuration de votre application CodeIgniter se trouve dans le dossier application/config/. Voici un récapitulatif des configurations à retenir.

Configuration générale

Ouvrez le fichier application/config/config.php. Il contient la configuration globale de votre application CodeIgniter. Nous allons nous intéresser aux éléments les plus importants.

base_url

La variable base_url permet de spécifier l'url de base de votre site (commençant par http et finissant par .com par exemple).

$config['base_url'] = '';

C'est elle qui sera utilisée lors de l'affichage des urls via le helper url_helper. En la laissant vide, CodeIgniter essaiera de deviner l'url. Pour écarter les doutes, c'est toujours mieux de la renseigner. Cette variable est particulièrement utile si vous utiliser un sous domaine ou si vous êtes en local.

Il faudrait donc mettre en valeur : http://www.monsite.com/.

Pensez à bien mettre un slash à la fin, c'est important pour la concaténation des urls.

url_uffix

Si vous souhaitez ajouter un suffixe à vos urls (par exemple .html), vous pouvez l'assigner à cette variable.

$config['url_suffix'] = '';

Ainsi, si je définis mon suffixe comme .toto, je pourrais accéder à l'url suivante http://www.monsite.com/user/detail.toto. La fonction detail du contrôleur user sera bien appelée.

language

Par défaut, la langue de votre site ou application sera en anglais (les messages d'erreurs, les formats de dates...). Assignez la variable language à french pour l'avoir en français.

$config['language'] = 'french';

Si vous actualisez votre site, une erreur va s'afficher. Effectivement, les fichiers de traduction en français ne sont pas de base dans CodeIgniter.

Vous pouvez télécharger la traduction française sur le wiki officiel de CodeIgniter puis extraire l'archive dans le dossier application/language/french/ (créer le dossier french s'il n'existe pas).

Il vous faudra aussi ajouter le fichier de langue à l'autoload. C'est expliqué dans la suite de ce chapitre, rubrique Chargement automatique de ressources.

Configurer la base de données

Le fichier database.php est assez court. Il contient les éléments de configuration de votre base de données.

$db['default']['hostname'] = 'localhost';   // Nom d'hôte
$db['default']['username'] = 'root';        // Nom d'utilisateur
$db['default']['password'] = '';            // Mot de passe
$db['default']['database'] = '';            // Nom de base de données

Globalement, ce sont ces 4 premières lignes qui vont vous intéresser. Il faut obligatoirement les renseigner si vous souhaitez utiliser une base de données. Voici l'explication de chaque paramètres :

  • hostname : Le nom d'hôte de la base de données.
  • username : Le nom d'utilisateur de connexion à base de données.
  • password : Le mot de passe de connexion à base de données.
  • database : Le nom de la base de données.
  • dbdriver : Le type de la base de données (mysql, postgres, etc.).
  • dbprefix : Utilisateur d'un préfixe pour les tables (utile pour gérer plusieurs application avec une seule base de données).
  • pconnect : Utiliser une connexion persistante (true/false).
  • db_debug : Afficher les erreurs de base de données (true/false).
  • cache_on : Mettre en cache les requêtes de base de données (true/false).
  • cachedir : Le chemin absolu vers le dossier de cache de la base de données.
  • char_set : L'encodage de caractère pour communiquer avec la base de données.
  • dbcollat : L'encodage de comparaison de caractère pour communiquer avec la base de données.
  • swap_pre : C'est une chaine de caractère permettant de facilement accéder au dbprefix dans les requêtes.
  • autoinit : Charger automatiquement la base de données lorsque la librairie est chargée (true/false).
  • stricton : Utiliser le strict mode de SQL (true/false)
  • port : Le numéro de port pour accéder à la base de données. A ajouter si vous souhaitez l'utiliser.

Chargement automatique de ressources

La plupart des ressources de CodeIgniter ne sont pas chargées par défaut (afin d'optimiser le temps de chargement). Il faut donc manuellement charger les ressources pour les utiliser.

Souvent, certains éléments ont besoin d'être chargés sur toutes les pages du site. Le fichier de configuration autoload.php permet cela.

$autoload['libraries'] = array('database');     // Les librairies
$autoload['helper'] = array('url', 'text');     // Les helpers
$autoload['config'] = array();                  // Les fichiers de configuration
$autoload['language'] = array();                // Les fichiers de langue
$autoload['model'] = array();                   // Les modèles

Ces 5 tableaux de configuration permettent de charger automatiquement les librairies, helpers, fichiers de configuration, fichiers de langue et modèles directement au chargement de n'importe quel page du site.

De fait, cela vous évitera d'écrire le code d'exemple suivant dans vos contrôleurs :

$this->load->helper('url');

Attention toutefois, le fait de charger beaucoup de ressources à un impact sur les performances. A utiliser avec sagesse.

Créer son fichier de configuration

Vous serez surement amené à créer vos propres fichiers de configuration pour stocker des informations pouvant évoluer à moyen ou long terme. Pour cela, il vous suffit simplement de créer un nouveau fichier dans le dossier application/config/.

Comme toujours, la première ligne de ce fichier devra être la suivante :

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

Puis vous pouvez y assigner autant de variables que vous le souhaitez. La seule nécessité est qu'elles doivent se trouver dans un tableau nommé $config (comme dans le fichier config.php en fait).

Exemple

Voici l'exemple d'un fichier de configuration comptabilite.php :

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

$config['taux_tva'] = 20.0;
$config[taux_'commission'] = 2.5;

Dans votre application, il vous faudra d'abord charger votre fichier de configuration (s'il n'est pas dans l'autoload).

$this->config->load('comptabilite');

Puis, vous pourrez récupérer les valeurs que vous avez défini grâce à cette ligne.

$tva = $this->config->item('taux_tva'); // $tva = 20.0

Définir une variable de configuration

Il peut également être utile de définir dynamiquement de nouvelles données de configuration - ou bien modifier des données existantes - en utilisant la fonction suivante :

// affecte 10 à la variable $config['taux_tva']
$this->config->set_item('taux_tva', 10);