j ai besoin d'un éclaircissement sur le fonctionnement de la fonction $template->destroy_block_vars().
j ai eu beau chercher sur le forum phpBB officiel, sur le forum de developpement area51, et meme ici, je ne trouve pas la solution...
j ai suivi la doc de cette adresse :
documentation-phpbb3/sujet154167.html#p1178214
ainsi que la doc précédente.
mon probleme se situe sur le fait que certains de mes blocs sont utilisés plusieurs fois dans une même page, mais avec des variables différentes.
que ce soit mon code actuel ou l exemple donné sur phpbb-fr (çi dessus), si on reutilise un meme script (par exemple list_users) , le moteur de template cumule le contenu à chaque rappel du script.
dans le cas de list_users, la liste se cumule a chaque appel. donc si j appelle 3 fois le script, le premier rendu sera normal, le second contiendra le resultat du 1 rendu + le resultat du second, et le 3eme contiendra le contenu du 1er 2eme et 3 eme rendu.
par l exemple c est plus simple
j ai repris le code de : documentation-phpbb3/sujet154167.html#p1178213
les modifications: (pour des questions de praticité personnelle, j ai placé ces scripts dans un dossier '/_tests/' de phpBB)
test.php
- 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();
page_header();
$template->set_filenames(array('body' => 'test_body.html'));
include($phpbb_root_path.'_tests/welcome.'.$phpEx);
include($phpbb_root_path.'_tests/users.'.$phpEx);
tst_users('BLOC2');
tst_welcome('BLOC1');
tst_users('BLOC4');
page_footer();
?>
users.php
- Code: Tout sélectionner
<?php
if (!defined('IN_PHPBB'))
{
exit;
}
function tst_users($bloc)
{
global $user, $template, $db;
$template->set_filenames(array('list_users' => 'test_users.html'));
$sql = 'SELECT username FROM ' . USERS_TABLE . '
ORDER by username ASC LIMIT 0,10';
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('row', array(
'USERNAME' => $row['username']
));
}
$template->assign_display('list_users', $bloc, false);
$template->destroy_block_vars('row');
}
?>
welcome.php
- Code: Tout sélectionner
<?php
if (!defined('IN_PHPBB'))
{
exit;
}
function tst_welcome($bloc)
{
global $user, $template;
$username = $user->data['username'];
$template->set_filenames(array('welcome' => 'test_welcome.html'));
$template->assign_vars(array(
'PSEUDO' => $username,
));
$template->assign_display('welcome', $bloc, false);
}
?>
a ce stade je supprime le template 'row' et ça fonctionne.
mais mon script actuel ne peu connaitre le(s) block_vars qui sont utilisés dans les scripts appelés.
et la je galère depuis plusieurs jours.
si une bonne ame pouvait m aider .
merci par avance.


