Soutenez-nous

FAQ PHPConsultez toutes les FAQ

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

 
OuvrirSommaireBibliothèques, extensionsTemplatesphpBB2

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".

Créé le 1er juin 2007  par Guillaume Rossolini

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 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 :

Remplacez :
Sélectionnez
phpbb_realpath
Par :
Sélectionnez
realpath
Créé le 18 juin 2007  par Guillaume Rossolini
 
Sélectionnez
$template = new Template('/path/to/templates/folder');
Créé le 18 juin 2007  par Guillaume Rossolini

La syntaxe des variables est similaire à celle préconisée par PEAR, ici les variables {TITLE}, {META_*} et {CSS_*} :

 
Sélectionnez
<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} :

 
Sélectionnez
<!-- BEGIN subject -->
    <div class="bloc_cours">
        <div class="titre_cours">{subject.TITLE}</div>
    </div>
    <br />
    <br />
<!-- END subject -->
Créé le 18 juin 2007  par Guillaume Rossolini

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" :

 
Sélectionnez
// 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.

Créé le 18 juin 2007  par Guillaume Rossolini
Script PHP :
Sélectionnez
$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']
    )
);
Gabarit HTML :
Sélectionnez
<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>
Créé le 18 juin 2007  par Guillaume Rossolini

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() :

Script PHP :
Sélectionnez
foreach($subjects as $subject)
{
    $template->assign_block_vars
    (
        'subject', // le nom du bloc
        array('TITLE' => $subject['title']) // le contenu
    );
}
Gabarit HTML :
Sélectionnez
<!-- BEGIN subject -->
    <div class="bloc_cours">
        <div class="titre_cours">{subject.TITLE}</div>
    </div>
    <br />
    <br />
<!-- END subject -->
Créé le 18 juin 2007  par Guillaume Rossolini
Script PHP :
Sélectionnez
$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']
                )
            );
        }
    }
}
Gabarit HTML :
Sélectionnez
<!-- 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 -->
Créé le 18 juin 2007  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.