» II Premier exemple: affectation d'une variableNous allons faire un simple script qui souhaite la bienvenue au pseudo connecté.
Dans votre fichier test.php placez le code suivant:
- Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$username = $user->data['username'];
$template->set_filenames(array('body' => 'test_body.html'));
$template->assign_vars(array(
'PSEUDO' => $username,
));
$template->display('body');
?>
et dans test_body.html, cette simple ligne:
- Code: Tout sélectionner
Bienvenue {PSEUDO}
Exécutez le fichier test.php et observez le résultat.
Explications- Code: Tout sélectionner
$username = $user->data['username'];
=> récupère le nom de l'utilisateur
- Code: Tout sélectionner
$template->set_filenames(array('body' => 'test_body.html'));
=> attribue au fichier test_body.html un template ayant l'identifiant body. vous pouvez ainsi utiliser plusieurs fichiers html à condition de leur attribuer des identifiants différents
- Code: Tout sélectionner
$template->assign_vars(array(
'PSEUDO' => $username,
));
=> va affecter à la variable template PSEUDO la variable $username.
Pour cela, le moteur de template va rechercher dans le fichier html toutes les occurences de {PSEUDO} et les remplacer par le contenu de $username.
Dans cet exemple, nous n'avions assigné qu'une variable, mais si plusieurs variables sont à assigner, il n'est pas nécessaire de lancer à chaque fois la fonction assign_vars, il suffit d'ajouter des clés dans l'array:
- Code: Tout sélectionner
$template->assign_vars(array(
'VAR1' => 'valeur 1',
'VAR2' => 'valeur 2',
'VAR3' => 'valeur3'
));
avec à gauche, le nom de la variable qu'on trouvera entre accolades { } dans le template, et à droite la valeur qu'on veut lui assigner
- Code: Tout sélectionner
$template->display('body');
=> affiche le template ayant l'identifiant body
Les erreurs possiblesDans test.php remplacez:
- Code: Tout sélectionner
$template->set_filenames(array('body' => 'test_body.html'));
par:
- Code: Tout sélectionner
$template->set_filenames(array('body' => 'test_body2.html'));
et exécutez-le. Vous allez voir s'afficher le message suivant:
Erreur générale
template->_tpl_load_file(): File ./styles/prosilver/template/test_body2.html does not exist or is empty
vous avez attribué à votre template body un fichier qui n'existe pas où qui n'est pas à la bonne adresse.
Travailler avec les clés de languephpBB étant capable de fonctionner avec plusieurs langues, il faut éviter de mettre du texte en 'dur' dans votre fichier html mais au contraire utiliser les clés de langue.
Reprenez le fichier test_body.tpl et remplacez son contenu par:
- Code: Tout sélectionner
{L_WELCOME} {PSEUDO}
Exécutez test.php après avoir effacé le cache.
Vous voyez s'afficher {WELCOME} suivi du pseudo. Que s'est-il passé ?
Quand le moteur de template trouve une variable commençant par L_ il va chercher dans les clés de langue une clé portant le nom de cette variable sans le L_. S'il la trouve il l'affiche, sinon il affiche le nom de la clé manquante entre accolades. Ceci est commode pour trouver les clés de langue manquantes.
Nous allons donc devoir ici créer la clé WELCOME:
Ouvrez languages/fr/common.php, cherchez:
- Code: Tout sélectionner
'WARN_USER' => 'Avertir l’utilisateur',
et ajoutez après
- Code: Tout sélectionner
'WELCOME' => 'Bienvenue',
Sauvegardez, effacez le cache et relancez test.php. Le message de bienvenue s'affiche correctement.
Conventions de dénomination des variables templates- Les variables templates doivent être entre accolades {}
- par convention elles sont écrites en majuscules afin de mieux les distinguer du code html
- les variables de texte doivent commencer par L_, les urls par U_ , les urls javascript par UA_, les textes javascript par LA_, les données système par S_ et le reste à votre convenance (si vous ne respectez pas ces conventions, sauf pour les accolades, ça n'entrainera pas d'erreur, c'est juste pour améliorer la lisibilité de votre code)
Un petit rappelOn a pu voir, sur le forum, des utilisateurs tester:
- Code: Tout sélectionner
$template->set_filenames(array('body' => 'mon_fichier.php');
et s'étonner que les instructions php ne s'appliquent pas.
Alors il est nécessaire de rappeler que les templates
ne sont pas des fichiers d'éxécution.Une fois que les variables ont été remplacées par les données issues du script php, le template est destiné à l'affichage et les seuls scripts qui s'exécuteront sont les scripts javascript.
Vous verrez au dernier chapitre qu'il est quand même possible d'insérer des scripts PHP à l'intérieur de votre template, mais avec une syntaxe particulière et cela doit rester exceptionnel.