FAQ PHP
FAQ PHPConsultez toutes les FAQ
Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 18 septembre 2021
- Qu'est-ce que ModeliXe ?
- Comment installer ModeliXe ?
- Comment instancier ModeliXe ?
- PHP me donne des erreurs lorsque j'utilise ModeliXe
- Quelle est la syntaxe d'un gabarit ModeliXe ?
- Comment envoyer une variable au template avec ModeliXe ?
- Comment répéter un bloc du gabarit avec ModeliXe ?
- Comment placer un bloc dans un autre (imbrication) avec ModeliXe ?
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.
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 :
Le code suivant permet de déclarer un objet ModeliXe :
$page
=
new ModeliXe('
templates/index.tpl
'
);
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 :
ereg('
http://
'
,
$url
)
preg_match('
`http://`
'
,
$url
)
ModeliXe offre deux syntaxes pour écrire le gabarit HTML : XML ou Pear.
Il y a plusieurs manières d'envoyer des données au gabarit en PHP.
Méthode 1 (contenu normal dans le gabarit) :
<span>{text id="nickname"}</span>
$nickname
=
'
Yogui
'
;
$template
->
MxText('
nickname
'
,
$nickname
);
Méthode 2 (contenu en tant qu'attribut HTML dans le gabarit) :
<meta name
=
"description"
MxAttribut
=
"content:meta_description"
/>
<meta name
=
"description"
content
=
"{text id="
meta_description"}"
/>
$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.
Avec la syntaxe XML du gabarit, il faut utiliser l'élément XML "mx:bloc".
<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.
{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.
Voici un exemple sur trois niveaux en situation réelle.
<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"
>
{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"}
$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
'
);
}
Lien : Comment se protéger de la faille XSS ?
Lien : Comparatif : Découverte des principaux moteurs de template en PHP, par Guillaume Rossolini