MOTEUR DE TEMPLATE PHPBB3 SIMPLIFIÉ EN PHP5

cs_sophoan Messages postés 2 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 5 juin 2009 - 5 juin 2009 à 21:10
xfifixdu42 Messages postés 2 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 30 janvier 2011 - 30 janv. 2011 à 12:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49988-moteur-de-template-phpbb3-simplifie-en-php5

xfifixdu42 Messages postés 2 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 30 janvier 2011
30 janv. 2011 à 12:23
C'est bon j'ai trouver mon erreur , faut juste mettre en majuscule les champs ^^
xfifixdu42 Messages postés 2 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 30 janvier 2011
30 janv. 2011 à 11:26
Bonjour,
J'ai testé avec une simple assignation mais avec un bloc ça ne marche pas.
j'ai testé avec des truc simple mais rien.
Est ce qui faut faire un truc en plus au niveau configuration pour utilisé le assign_block_vars??

merci d'avance
cs_ElFefe Messages postés 3 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2010
6 sept. 2010 à 15:56
Désolé, j'avais oublié de répondre... merci, j'ai pu faire le fichier pour la sélection de langues et le remplacement des variables {L_VAR} dans les templates...
Par contre j'essaye depuis un moment de faire un menu multilingue dynamique(bdd) et en dur mais je n'arrive pas à faire la modification des langues...

mon code langues:

function set_lang()
{

global $template;

// on precise la variable langage
$template->set_language_var($lang);

$lang = array('en','fr');

if (!empty($_GET['lang']) && (in_array($_GET['lang'], $lang)) ) {
$expire = 365*24*3600;
$lang = $_GET['lang'];
setcookie('lang', $lang, time() + $expire, null, null, false, true);
}
elseif (!empty($_COOKIE['lang']) && (in_array($_COOKIE['lang'], $lang))) {
$lang = $_COOKIE['lang'];
}
else {
$lang = "fr";
}
include('lang/'.$lang.'.php');
}

mon code menu:

//Menu supérieur
$menu = array(
'L_HOME' => 'index.php',
'L_PAGE1' => 'page1.php',
'L_PAGE2' => 'page2.php',
'L_PAGE3' => 'page3.php',
'L_PAGE4' => 'page4.php',
'L_PAGE5' => 'page5.php'
);

//Envoie des variables au gabarit
foreach($menu as $key=>$value){
$template->assign_block_vars('nav', array(
'URL' => $value,
'ITEM' => $key));
}

dans ma page il apparait (L_HOME, L_PAGE1, etc...), je vois pas comment faire...

Merci
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
3 août 2010 à 11:13
Dans fr.php:
$lang = array();
$lang['WELCOME'] = 'Bienvenue';

Dans en.php:
$lang = array();
$lang['WELCOME'] = 'Welcome';

Dans le fichier template:(exemple)
{L_WELCOME}



Dans le fichier principal:
// inclure le fichier langue (fr.php ou en.php selon la langue), à toi de gerer ça.
include('fr.php');
$template = new Template('dossier TEMPLATE', 'dossier CACHE', $lang);
$template->set_filenames(array('body' => 'fichier template'));
$template->display('body');
cs_ElFefe Messages postés 3 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2010
2 août 2010 à 10:16
Je m'explique...

Si je créer un dossier lang et que dedans je mets mes ficher fr.php et en.php, comment je dois procéder pour le code php (pour faire appel à ces fichier pour qu'il remplace le {L_WELCOME}).

je ne comprends pas vraiment la fonction lang dans le moteur de template et comment écrire la page php pour qu'il aille chercher les infos !

Je vous remercie par avance.
Zoulcalibur Messages postés 3 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 1 août 2010
1 août 2010 à 12:36
Fichier langue de quoi ?
cs_ElFefe Messages postés 3 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 6 septembre 2010
27 juil. 2010 à 01:16
Bonjour,

Merci pour ce code, j'commence à comprendre le principe. Par contre je ne sais pas comment rajouter des langues je n'arrive pas à comprendre comment appeler les fichiers langue.

Si quelqu'un pourrait m'expliquer, ça serai super sympa...

Merci.
eriden42 Messages postés 1 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 10 juillet 2010
10 juil. 2010 à 22:28
Ayant besoin de faire un menu dynamique

<!-- BEGIN main_menu-->
<!-- IF main_menu.S_FIRST_ROW -->

<!-- ENDIF -->
<li>[{main_menu.HREF} {main_menu.NAME}]</li>
<!-- IF main_menu.S_LAST_ROW -->

<!-- ENDIF -->
<!-- END main_menu-->

j'avais une erreure, j'ai donc regarder ce que je pouvais faire et j'ai trouver cette solution. Certe il existe peut être plus optimise, mais ça marche ^^

Ligne 250 remplacer
// Assign S_FIRST_ROW
if (!$s_row_count)
$vararray['S_FIRST_ROW'] = true;

// Now the tricky part, we always assign S_LAST_ROW and remove the entry before
// This is much more clever than going through the complete template data on display (phew)
$vararray['S_LAST_ROW'] = true;
if ($s_row_count > 0)
unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']);

par // Assign S_FIRST_ROW
if (!$s_row_count)
$vararray['S_FIRST_ROW'] = true;
else
$vararray['S_FIRST_ROW'] = false;

// Now the tricky part, we always assign S_LAST_ROW and remove the entry before
// This is much more clever than going through the complete template data on display (phew)
$vararray['S_LAST_ROW'] = true;
if ($s_row_count > 0)
$str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW'] = false;
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
15 juin 2010 à 10:31
Les variables dans un bloc doivent etre indexés sauf si c'est une variable language.
Pour les variables de language, tu rajoutes un prefixe 'L_' à chaque clé: exemple pour $lang['NAME'] tu mets {L_NAME}.
Par contre pour les dossiers:
var $template = new Template(Dossier où se trouve accueil.html, Dossier où on met les fichiers caches);
C'est le dossier par rapport à l'emplacement du fichier Template.
aikinhdo Messages postés 4 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 14 juin 2010
14 juin 2010 à 15:55
Bonjour,

Je crois que j'ai trouvé.

Dans la page accueil.html, il faut "indexer" la variable.
Et mettre :
<!-- BEGIN mon_bloc -->
Hello ! Mon nom est {mon_bloc.NAME} et mon IP est : {mon_bloc.IP}

<!-- END mon_bloc -->

A la place de
<!-- BEGIN mon_bloc -->
Hello ! Mon nom est {NAME} et mon IP est : {IP}

<!-- END mon_bloc -->

Par contre, est ce que c'est normal. Je laisse les gens qui s'y connaissent y répondre.
aikinhdo Messages postés 4 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 14 juin 2010
14 juin 2010 à 11:34
Bonjour,

Merci pour les réponses rapide.
Il y a du mieux.

Voici le fichier index.php

<?php
// page d'accueil

include('includes/template.class.php');
include('includes/functions.php');
include('includes/config.php');

// on precise le repertoire où se trouve les fichiers templates et le répértoire où on met les fichiers compilés (cache)
$template = new Template('template', 'cache');

// on precise la variable langage
$template->set_language_var($lang);

page_header('Ma page d\'accueil', 'Accueil', 'HOME');
page_footer();

// On va afficher 5 fois le bloc
for ($i = 0; $i < 5; $i++)
{
$template->assign_block_vars('mon_bloc', array(
'NAME' => 'Genova',
'IP' => '12'));
}

$template->set_filenames(array('body' => 'accueil.html'));
$template->display('body');

?>

Voici le fichier accueil.html
<!-- INCLUDE header.html -->

<!-- BEGIN mon_bloc --> Hello ! Mon nom est {NAME} et mon IP est : {IP}
<!-- END mon_bloc -->

Voici la page d'accueil.

Bla bla bla bla bla .........

<!-- INCLUDE footer.html -->

Par contre, si je mets :
var $template = new Template(Dossier où se trouve accueil.html, Dossier où on met les fichiers caches);

J'ai cette erreur :Parse error: syntax error, unexpected T_VAR in S:\Applications\PortableApps\mowes_portable\www\phpbb3\index.php on line 9

Sinon, j'ai bien une boucle qui s'affiche.

Accueil
Hello ! Mon nom est et mon IP est :
Hello ! Mon nom est et mon IP est :
Hello ! Mon nom est et mon IP est :
Hello ! Mon nom est et mon IP est :
Hello ! Mon nom est et mon IP est :

Voici la page d'accueil.

Bla bla bla bla bla .........

Mais, les variables ne sont pas passés.

Je ne trouve pas ou cela peut venir. Une config PHP pas à jour?

Merci de ton aide
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
13 juin 2010 à 20:53
Dans fichier: accueil.html
<!-- BEGIN mon_bloc --> Hello ! Mon nom est {mon_bloc.NAME} et mon IP est : {mon_bloc.IP}
<!-- END mon_bloc -->

Dans fichier: index.php
var $template = new Template(Dossier où se trouve accueil.html, Dossier où on met les fichiers caches);

// On va afficher 5 fois le bloc
for ($i = 0; $i < 5; $i++)
{
$template->assign_block_vars('mon_bloc', array(
'NAME' => 'Genova',
'IP' => '12'));
}

$template->set_filenames(array('body' => 'accueil.html'));
$template->display('body');
stevensf Messages postés 3 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 13 juin 2010
13 juin 2010 à 00:48
avec pas mal de retard, j'avais pas vu ta réponse 'gagah1'... Merci pour l'info :)
aikinhdo Messages postés 4 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 14 juin 2010
12 juin 2010 à 22:27
Non c'est le bout de code que j'ai rajouté en plus dans le fichier index.php.
En fait, j'essaie de comprendre le tuto de phpbb3 en m'appuyant sur le script que j'ai downloader ici.
Zoulcalibur Messages postés 3 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 1 août 2010
11 juin 2010 à 21:07
Tu n'as mis que ce code PHP dans ton index.php?
aikinhdo Messages postés 4 Date d'inscription vendredi 14 septembre 2007 Statut Membre Dernière intervention 14 juin 2010
11 juin 2010 à 16:04
Bonjour,

J'ai voulu suivre le tuto de phpbb3 forum.
Dès le début, j'ai un soucis.
Je n'arrive pas à affecter de variable simple.

Dans la page d'accueil.html
J'ai rajouté cette ligne

<!-- BEGIN mon_bloc --> Hello ! Mon nom est {NAME} et mon IP est : {IP}
<!-- END mon_bloc -->

et dans la page index.php

$template->assign_vars(array(
'NAME' => 'Genova',
'IP' => '12',
));

// On va afficher 5 fois le bloc
for ($i = 0; $i < 5; $i++)
{
// Cette fonction va créer le bloc, a chaque passage elle empilera le bloc a la suite, c'est à dire que
// l'appeler 5 fois de suite va créer le bloc 5 fois
$template->assign_block_vars('mon_bloc', array());
}

Quand j'affiche ma page, c'est tout vide.

Est ce que quelqu'un peut me dire pourquoi les variables ne sont pas affectées?

merci
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
3 mars 2010 à 14:50
C'est deconseiller de désactiver le système cache, mais si tu veux, change la fonction sur la ligne 184 comme celle ci:
private function _tpl_load(&$handle)
{
// If we don't have a file assigned to this handle, die.
if (!isset($this->files[$handle]))
trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR);

$this->_tpl_load_file($handle);
return false;
}
cs_Alencar Messages postés 2 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 2 mars 2010
2 mars 2010 à 11:27
c'est peut être possible en modifiant le fonctionnement de la fonction "display" qui est dans la class, mais a mon avis il doit y avoir d'autre modification. Je ne voudrais pas dire de bêtise mais je crois que cette modification ne peut pas ce faire par une simple configuration.
En plus, si tu n'utilise pas de cache, cela va demander plus de ressource a ton serveur puisqu'il devra reconvertir le template en code PHP a chaque affichage de la page.
stevensf Messages postés 3 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 13 juin 2010
2 mars 2010 à 10:41
bonjour...

J'aimerai désactiver le système de cache... qq pourait-il me dire comment faire SVP

MErci par avance
cs_Alencar Messages postés 2 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 2 mars 2010
17 janv. 2010 à 20:49
Sympa comme idée =). Depuis le temps que je la cherchais cette class.
J'ai essayer de faire la même chose avec la class bbcode. J'ai donc supprimer tous ce qui concernait les balise additionnel via sql, j'ai regrouper tous les fonction, changer quelque variables et tous marche pour les balise par défaut. Seulement comme je ne sais pas très bien comment fonctionne (ni a quoi sert) le "bitfield" je n'arrive pas a ajouter de nouvelles balise.

Quelqu'un aurais une idée?
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
3 oct. 2009 à 09:54
Le fichier index.html permet de securiser le contenu d'un dossier. Si un curieux veut acceder au dossier template (http://www.monsite.fr/template) et que le serveur ne trouve pas un fichier nommé index.html ou index.php ou index.asp etc... , le serveur envoie la liste de tous les fichiers qui se trouvent dans ce dossier.
Zoulcalibur Messages postés 3 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 1 août 2010
2 oct. 2009 à 18:40
Bonjour, merci pour le code il a l'air de très bien fonctionner.

Par contre il semblerait qu'un fichier index.html s'est glissé dans tous les dossiers, il ne sert à rien il me semble.

Merci
cs_marco_12 Messages postés 1 Date d'inscription mercredi 8 mars 2006 Statut Membre Dernière intervention 14 juillet 2009
14 juil. 2009 à 13:15
j'ai eu le meme message d'erreur, et visiblement, c'etait "private" qui ne passait pas en PHP < 5, mais nikel en version 5 :p
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
5 juin 2009 à 21:24
Je ne vois pas d'erreur sur la ligne 23:
"private $_tpldata array('.'> array(0 => array()));"
Aucune idée!
cs_sophoan Messages postés 2 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 5 juin 2009
5 juin 2009 à 21:10
il y a une erreur de code:

Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' template.class.php on line 23
Rejoignez-nous