Soutenez-nous

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireBibliothèques, extensionsTemplatesModeliXe

ModeliXe est un moteur de templates écrit en PHP.

ModeliXe est un projet français qui a été transmis à Florian Perrichot. La liste des contributeurs est longue et j'y ai retrouvé des noms que je connaissais : Sébastien Hordeaux (créateur de Waterpoof/PHPEdit) et Frédéric Bouchery (ancien bloggueur aux billets intéressants).

Aujourd'hui, l'ancienne page existe mais elle n'est plus maintenue.

Créé le 1er juin 2007  par Guillaume Rossolini

Lien : Qu'est-ce qu'un template ?
Lien : Quel est le principe de fonctionnement d'un template ?
Lien : Quels sont les principaux systèmes de template ?
Lien : Comparatif : Découverte des principaux moteurs de template en PHP, par Guillaume Rossolini

ModeliXe est disponible sous forme d'une arhive ZIP sur le site de Florian.

Pour l'installer, il suffit de décompresser l'archive dans un répertoire de votre serveur. Comme toute bibliothèque, il est recommandé de ne pas placer les scripts sous l'arborescence publique mais plutôt à l'extérieur.

La configuration se fait une fois pour tous les sites qui utilisent ModeliXe :

ModeliXe.php
Sélectionnez
define('MX_GENERAL_PATH', realpath(dirname(__FILE__)).'/');
Créé le 1er juin 2007  par Guillaume Rossolini

Le code suivant permet de déclarer un objet ModeliXe :

 
Sélectionnez
$page = new ModeliXe('templates/index.tpl');
Créé le 1er juin 2007  par Guillaume Rossolini

Avec certaines versions de ModeliXe, il faut apporter quelques corrections avant de pouvoir l'utiliser correctement.

Si vous avez PHP 5.2 ou +, les expressions rationnelles classiques POSIX ne sont plus incluses qu'en PECL (afin de laisser la place à l'extension PCRE), ce qui rend indisponible la fonction ereg() utilisée par la classe de gestion d'erreurs de ModeliXe, ErrorManager. Il faut donc apporter la modification suivante :

Trouver dans ErrorManager::SetErrorOut() :
Sélectionnez
ereg('http://', $url)
Remplacer par :
Sélectionnez
preg_match('`http://`', $url)
Créé le 1er juin 2007  par Guillaume Rossolini

ModeliXe offre deux syntaxes pour écrire le gabarit HTML : XML ou Pear.

Exemple de gabarit ModeliXe avec la syntaxe XML
Sélectionnez
<mx:bloc id="subject">
    <div class="bloc_cours">
        <div class="titre_cours"><mx:text id="title"/></div>
    </div>
    <br />
    <br />
</mx:bloc id="subject">
Exemple de gabarit ModeliXe avec la syntaxe Pear
Sélectionnez
{start id="subject"}
    <div class="bloc_cours">
        <div class="titre_cours">{text id="title"}</div>
    </div>
    <br />
    <br />
{end id="subject"}
Créé le 1er juin 2007  par Guillaume Rossolini

Il y a plusieurs manières d'envoyer des données au gabarit en PHP.

Méthode 1 (contenu normal dans le gabarit) :

Syntaxe XML
Sélectionnez
<span><mx:text id="nickname"/></span>
Syntaxe Pear
Sélectionnez
<span>{text id="nickname"}</span>
Envoi depuis PHP
Sélectionnez
$nickname = 'Yogui';
$template->MxText('nickname', $nickname);

Méthode 2 (contenu en tant qu'attribut HTML dans le gabarit) :

Syntaxe XML
Sélectionnez
<meta name="description" MxAttribut="content:meta_description" />
Syntaxe Pear
Sélectionnez
<meta name="description" content="{text id="meta_description"}" />
Envoi depuis PHP
Sélectionnez
$description = 'Mettre ici la description du site';
$template->MxText('meta_description', $description);

Un avantage de la syntaxe XML par rapport à la syntaxe Pear est que le gabarit HTML est aux normes définies par le W3C.

Créé le 1er juin 2007  par Guillaume Rossolini

Lien : Comment se protéger de la faille XSS ?

Avec la syntaxe XML du gabarit, il faut utiliser l'élément XML "mx:bloc".

 
Sélectionnez
<mx:bloc id="subject">
    <div class="bloc_cours">
        <div class="titre_cours"><mx:text id="title"/></div>
    </div>
    <br />
    <br />
</mx:bloc id="subject">

Avec la syntaxe Pear du gabarit, les mots clefs "start" et "end" permettent de définir les bornes.

 
Sélectionnez
{start id="subject"}
    <div class="bloc_cours">
        <div class="titre_cours">{text id="title"}</div>
    </div>
    <br />
    <br />
{end id="subject"}

Depuis PHP, il faut utiliser la méthode MxText() pour envoyer les données au gabit, puis MxBloc() pour que la classe génère le HTML correspondant.

 
Sélectionnez
$subjects = array
(
    'title' => 'Premier titre',
    'title' => 'Second titre',
    'title' => 'Troisième titre'
);

foreach($subjects as $subjects)
{
    $template->MxText('subject.title', $subject['title']);

    $template->MxBloc('subject', 'loop');
}
Créé le 1er juin 2007  par Guillaume Rossolini

Lien : Comment se protéger de la faille XSS ?

Voici un exemple sur trois niveaux en situation réelle.

Gabarit syntaxe XML
Sélectionnez
<mx:bloc id="subject">
    <div class="bloc_cours">
        <div class="titre_cours"><mx:text id="title"/></div>
    <mx:bloc id="category">
        <div class="categorie_cours"><mx:text id="title"/></div>
        <div class="liste_cours">
            <ul>
        <mx:bloc id="tutorial">
                <li>
                    <a href="<mx:text id="uri"/>"
                    ><mx:text id="title"/></a> : <mx:text id="description"/>
                </li>
        </mx:bloc id="tutorial">
            </ul>
        </div>
        <hr />
    </mx:bloc id="category">
    </div>
    <br />
    <br />
</mx:bloc id="subject">
Gabarit syntaxe Pear
Sélectionnez
{start id="subject"}
    <div class="bloc_cours">
        <div class="titre_cours">{text id="title"}</div>
    {start id="category"}
        <div class="categorie_cours">{text id="title"}</div>
        <div class="liste_cours">
            <ul>
        {start id="tutorial"}
                <li>
                    <a href="{text id="uri"}"
                    >{text id="title"}</a> : {text id="description"}
                </li>
        {end id="tutorial"}
            </ul>
        </div>
        <hr />
    {end id="category"}
    </div>
    <br />
    <br />
{end id="subject"}
 
Sélectionnez
$sql = 'SELECT id, title
        FROM subject';
$result = mysql_query($sql) or die(mysql_error());
while($subject = mysql_fetch_assoc($result))
{
    $template->MxText(
        'subject.title',
        $subject['title']);

    $sql = 'SELECT id, title
            FROM category
            WHERE subject_id = '.$subject['id'];
    $categories = mysql_query($sql) or die(mysql_error());
    while($category = mysql_fetch_assoc($categories))
    {
        $template->MxText(
            'subject.category.title',
            $category['title']);

        $sql = 'SELECT id, uri, title, description
                FROM tutorial
                WHERE category_id = '.$category['id'];
        $tutorials = mysql_query($sql) or die(mysql_error());
        while($tutorial = mysql_fetch_assoc($tutorials))
        {
            $template->MxText(
                'subject.category.tutorial.uri',
                $tutorial['uri']);

            $template->MxText(
                'subject.category.tutorial.title',
                $tutorial['title']);

            $template->MxText(
                'subject.category.tutorial.description',
                $tutorial['description']);

            $template->MxBloc('subject.category.tutorial', 'loop');
        }

        $template->MxBloc('subject.category', 'loop');
    }

    $template->MxBloc('subject', 'loop');
}
Créé le 2 juin 2007  par Guillaume Rossolini

Lien : Comment se protéger de la faille XSS ?
Lien : Comparatif : Découverte des principaux moteurs de template en PHP, par Guillaume Rossolini

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.