FAQ bibliothèques et extensions PHP
FAQ bibliothèques et extensions PHPConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 71, dernière mise à jour : 16 juin 2021
- Qu'est-ce que phpBB2 ?
- Comment installer le moteur de templates de phpBB2 ?
- Comment instancier la classe de template de phpBB2 ?
- Quelle est la syntaxe d'un gabarit phpBB2 ?
- Comment charger un gabarit avec le moteur de phpBB2 ?
- Comment envoyer une variable au gabarit avec le moteur de phpBB2 ?
- Comment répéter un bloc du gabarit avec le moteur de phpBB2 ?
- Comment placer un bloc dans un autre (imbrication) avec le moteur de templates de phpB2 ?
phpBB2 est avant tout un script de forum prêt à installer sur tout type de serveur Apache / PHP / MySQL, mais c'est aussi une classe de gestion de templates fondée sur la phplib.
Il y a de cela plusieurs années, le phpBB Group a effectué un très gros travail autour du template de la PHPLib afin de le rendre plus performant. C'est la version phpBB2 (dont le script de forum sont actuellement en bêta) que je vais utiliser ici, plutôt que la version PHPLib qui manque de maturité. L'extension de fichier est ".tpl".
Lien : phpBB2
Lien : Le système de templates de phpBB, par Genova
Lien : Comparatif : Découverte des principaux moteurs de template en PHP, par Guillaume Rossolini
Télécharger les scripts du forum complet sur http://www.phpbb.com/.
Extraire le script offline/template.php de l'archive de la dernière version de phpBB2, puis le déplacer dans un répertoire accessible par les utilisateurs du serveur (mais situé hors de la racine du serveur Web). La classe utilise une fonction globale de phpBB, il faut donc s'en défaire :
phpbb_realpath
realpath
$template
=
new Template('
/path/to/templates/folder
'
);
La syntaxe des variables est similaire à celle préconisée par PEAR, ici les variables {TITLE}, {META_*} et {CSS_*} :
<head>
<title>{TITLE}</title>
<meta http-equiv
=
"Content-Type"
content
=
"text/html; charset={CHARSET}"
/>
<meta name
=
"generator"
content
=
"{META_GENERATOR}"
/>
<meta name
=
"description"
content
=
"{META_DESCRIPTION}"
/>
<meta name
=
"keywords"
content
=
"{META_KEYWORDS}"
/>
<meta name
=
"MS.LOCALE"
content
=
"{META_MSLOCALE}"
/>
<link rel
=
"stylesheet"
type
=
"text/css"
href
=
"{CSS_MAINSTYLE}"
/>
<link rel
=
"stylesheet"
type
=
"text/css"
media
=
"print"
href
=
"{CSS_PRINTER}"
/>
<link rel
=
"stylesheet"
type
=
"text/css"
media
=
"screen"
href
=
"{CSS_RIDAN}"
/>
</head>
La syntaxe des blocs est fondée sur les commentaires HTML, ici le bloc "subject" et la variable {subject.TITLE} :
Le moteur de templates de phpBB2 permet de charger plusieurs gabarits dans un seul objet Template, au moyen de ce que l'on appelle des "handles" :
// Chargement des gabarits
$template
->
set_filenames(array
(
'
header
'
=>
'
header.tpl
'
,
'
body
'
=>
'
index.tpl
'
,
'
footer
'
=>
'
footer.tpl
'
)
);
//
// Mettre ici l'envoi des données au gabarit
//
// Fin du script
$template
->
pparse('
header
'
);
$template
->
pparse('
body
'
);
$template
->
pparse('
footer
'
);
La méthode set_filenames() peut être appelée autant de fois que nécessaire tout au long du script. La méthode pparse() doit être appelée une fois pour chaque handle de gabarit, à la fin du script.
$template
->
assign_vars(
array
(
'
CHARSET
'
=>
$header
[
'
charset
'
],
'
META_GENERATOR
'
=>
$meta
[
'
generator
'
],
'
META_DESCRIPTION
'
=>
$meta
[
'
description
'
],
'
META_KEYWORDS
'
=>
$meta
[
'
keywords
'
],
'
META_MSLOCALE
'
=>
$meta
[
'
mslocale
'
],
'
CSS_MAINSTYLE
'
=>
$css
[
'
mainstyle
'
],
'
CSS_PRINTER
'
=>
$css
[
'
printer
'
],
'
CSS_RIDAN
'
=>
$css
[
'
ridan
'
],
'
TITLE
'
=>
$header
[
'
title
'
]
)
);
<head>
<title>{TITLE}</title>
<meta http-equiv
=
"Content-Type"
content
=
"text/html; charset={CHARSET}"
/>
<meta name
=
"generator"
content
=
"{META_GENERATOR}"
/>
<meta name
=
"description"
content
=
"{META_DESCRIPTION}"
/>
<meta name
=
"keywords"
content
=
"{META_KEYWORDS}"
/>
<meta name
=
"MS.LOCALE"
content
=
"{META_MSLOCALE}"
/>
<link rel
=
"stylesheet"
type
=
"text/css"
href
=
"{CSS_MAINSTYLE}"
/>
<link rel
=
"stylesheet"
type
=
"text/css"
media
=
"print"
href
=
"{CSS_PRINTER}"
/>
<link rel
=
"stylesheet"
type
=
"text/css"
media
=
"screen"
href
=
"{CSS_RIDAN}"
/>
</head>
Les blocs sont des portions du gabarit que l'on peut ignorer, afficher ou bien dupliquer comme on le souhaite. Par convention, les noms des blocs sont écrits en minuscules et les blocs conditionnels (affiché/caché) sont, par convention d'écriture, préfixés de "switch_".
L'affectation d'un bloc se fait au moyen de la méthode assign_block_vars() :
$sql
=
'
SELECT id, title
FROM subject
'
;
$result
=
mysql_query($sql
) or die(mysql_error());
while($subject
=
mysql_fetch_assoc($result
))
{
$template
->
assign_block_vars
(
'
subject
'
,
array('
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
->
assign_block_vars
(
'
subject.category
'
,
array('
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
->
assign_block_vars
(
'
subject.category.tutorial
'
,
array
(
'
URI
'
=>
$tutorial
[
'
uri
'
],
'
TITLE
'
=>
$tutorial
[
'
title
'
],
'
DESCRIPTION
'
=>
$tutorial
[
'
description
'
]
)
);
}
}
}
<!-- BEGIN subject -->
<div class
=
"bloc_cours"
>
<div class
=
"titre_cours"
>
{subject.TITLE}</div>
<!-- BEGIN category -->
<div class
=
"categorie_cours"
>
{subject.category.TITLE}</div>
<div class
=
"liste_cours"
>
<ul>
<!-- BEGIN tutorial -->
<li>
<a href
=
"{subject.category.tutorial.URI}"
>{subject.category.tutorial.TITLE}</a>
:
{subject.category.tutorial.DESCRIPTION}
</li>
<!-- END tutorial -->
</ul>
</div>
<hr />
<!-- END category -->
</div>
<br />
<br />
<!-- END subject -->