Page 1 sur 1

Problème de balise head à réouvrir

Posté : 20 août 2008, 18:29
par Rem73
Bonjour,

J'utilise le système de template de PHPlib (PHPbb)

J'ai fait une fonction qui affiche un message d'information et redirige vers une autre page.
Voici la fonction :
// Permet d'afficher un message d'information aux utilisateurs
function information($texte, $url= NULL, $titre= NULL)
{
	global $template, $dossier, $user_design, $tuks_config, $lang, $user, $db;
	// Vérifie qu'on est dans l'admin
	include_once($dossier.'systeme/systeme.php');
	$meta= NULL;
	if ( !empty($url) )
	{
		$texte .= sprintf($lang['info_information'], $url);
		$meta = '<meta http-equiv="refresh" content="5;url='.$url.'" />';
	}
	$template->set_filenames(array('information' => 'information.tpl'));

	$titre = (isset($titre) AND !empty($titre)) ? $titre : 'Information';
	$template->assign_vars(array(
		'TITRE' => $titre,
		'TEXT' => $texte,
		'META' => $meta,
		'ALT_INFORMATION' => $lang['alt_information'],
	));
	
	$template->pparse('information');
	
	// Vérifie qu'on est dans l'admin
	if (defined('IN_ADMIN') AND constant('IN_ADMIN') == TRUE )
	{
		include_once($dossier.'admin/admin_footer.php');
	}
	else
	{
		include_once($dossier.'systeme/footer.php');
	}
	exit;
}
Voici le header.tpl :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>{PAGE_TITRE}</title>
<link rel="stylesheet" media="screen" type="text/css" title="style" href="{URL_LOCATION}style.css" />
</head>

<body>

<div id="en_tete"><img src="{URL_LOCATION}images/logo_tuks.png" alt="{ALT_LOGO_TUKS}" />
	<div id="Barre"> 
		<a href="{SITE_RACINE}index.php">{T_INDEX}</a> 
		<a href="{SITE_RACINE}forum/">{T_FORUM}</a> 
		<a href="{SITE_RACINE}faq/">{T_FAQ}</a>
		<a href="{SITE_RACINE}livre_or/index.php?pseudo={USER_NOM}">{T_LIVREOR}</a> 		
	</div>
</div>
Un gros problème c'est que mon META s'affiche dans une balise <body> donc j'ai voulu mettre mon META dans une balise head, normal quoi.
Le problème c'est que dans chaque page j'inclus header.php qui ouvre header.tpl qui lui contient l'ouverture de <head> et sa fermeture.
Alors je ne peu plus rajouter mon META dans la balise <header>


J'ai trouver une solution, que je n'arrive pas à mettre à place, qui est celle-ci :
La solution est que la fonction quand elle s'exécute ignore tout le code en aval, comme ça depuis la fonction on fait une inclusion du header, je définit la variable TPL -> META dans le fichier header.tpl et le problème est résolue.

Mais à mes connaissance on ne peu pas faire ça, il faut donc trouver un moyen pour qu'on accède à cette fonction sans que la header soit inclue.

Pour pimenter le tout ma fonction est utiliser pour gérer mes erreurs SQL, donc je n'arrive pas à ne pas inclure header.php avant la fonction information.

J'ai essayer d'être le plus clair possible, mais si je ne le suis pas, posez moi des questions.

Merci d'avance.

Rem73

Posté : 23 août 2008, 11:54
par Rem73
Petit up :oops:

Posté : 23 août 2008, 13:00
par jojolapine
Hum hum, les ups ne sont pas bien vu par içi...

Sinon pour contourner le problème, tu pourrais faire une redirection javascript... non?

Posté : 23 août 2008, 13:06
par Sékiltoyai
Une preuve supplémentaire que les fichiers header et footer sont des abbérations. C'est l'architecture de ton code qui est à revoir, ce n'est pas en cherchant des combines bancales que tu t'en sortiras. Alors abandonnes cette façon de faire pour te diriger plutôt vers une notion de squelette html, c'est à dire un template dans lequel tu inclues le template de ta page, dans lequel tu inclues éventuellement le template des éléments de ta page, etc…
Et tout cela en toute fin de script, c'est à dire que tu ne dois lancer la génération du template qu'une fois que toutes les données sont traitées… Après je ne dis pas que c'est la seule façon de faire, mais en tous cas la seule façon viable de le faire…

Si jamais ce n'est pas possible de le faire avec phpLib, change de système de template. Sans vouloir polémiquer, un système de template utilisé par phpBB ne peut pas être bon… La preuve, il utilise du parsage en php, ce qui plombe inutilement les ressources…

Posté : 23 août 2008, 15:19
par Rem73
Merci de vos réponses, je vais donc réfléchir à une nouvelle organisation du code.

jojolapine : Le java script se met aussi dans mes balises head, et je part du principe que pas tout le monde n'a pas java script sur son navigateur, c'est assez rare, mais dès que je peu éviter java script je le fait ;)

Pour se qui est du système de template, smarty me tente, donc je crois que je vais suivre ton conseil, sachant que je voulais changer de système de template pour un plus approprié comme tu disait Sékiltoyai. Et tant que j'ai pas attaquer le vif du site ce n'est pas trop tard pour tout chambouler et repartir sur des bases non branlantes.

Je pense que ça va me prendre plusieurs semaines à me mettre à ce chère smarty, mais je vais le faire.

Merci pour votre aide et votre point de vue ;)

Posté : 23 août 2008, 16:27
par Sékiltoyai
Cela reste un template à pseudo langage, donc avec pertes inutiles de performance, mais cela reste un bon choix… Un des meilleurs moteurs connus…

Posté : 23 août 2008, 18:09
par Rem73
Cela reste un template à pseudo langage, donc avec pertes inutiles de performance, mais cela reste un bon choix… Un des meilleurs moteurs connus…
Merci pour ton avis,
Mais tu veux dire quoi par pseudo-langage ?

Je vais tout de suite lire quelques information sur smarty avant de me plonger dans sa doc ^^

Et ton cas merci

Posté : 23 août 2008, 18:45
par Sékiltoyai
Par pseudo-langage, on entend que tu vas écrire tes templates dans un langage spécifique au moteur de templates (ce que tu mets entre accolades). Si par exemple les données étaient intégrées par du code PHP, on ne pourrait pas le qualifier de pseudo langage, mais dans le cas de smarty ou phpLib, ou de la majorité de moteurs de templates, le langage est lu et intéprété par le moteur de template, c'est ce qu'on appelle un pseudo-langage…

Après je disais que c'est peu performant puisque tu as un langage interprété sur du langage interprété, ce qui est très mauvais. Mais Smarty a l'avantage d'avoir un cache puissant (utilisant lui le langage PHP), ce qui limite les pertes…

Posté : 23 août 2008, 19:20
par Rem73
Par pseudo-langage, on entend que tu vas écrire tes templates dans un langage spécifique au moteur de templates (ce que tu mets entre accolades). Si par exemple les données étaient intégrées par du code PHP, on ne pourrait pas le qualifier de pseudo langage, mais dans le cas de smarty ou phpLib, ou de la majorité de moteurs de templates, le langage est lu et intéprété par le moteur de template, c'est ce qu'on appelle un pseudo-langage…

Après je disais que c'est peu performant puisque tu as un langage interprété sur du langage interprété, ce qui est très mauvais. Mais Smarty a l'avantage d'avoir un cache puissant (utilisant lui le langage PHP), ce qui limite les pertes…
Merci de ces précisions.

Si je m'abuse le code PHP est aussi interpréter par du C ou du C++, je sais plus trop.

En tout cas un grand merci à toi pour tes réponses :D

Posté : 23 août 2008, 19:35
par Sékiltoyai
Oui, bien sûr, le code PHP est interprété, le noyau PHP est codé en C et en C++ en effet, mais là le problème c'est que le code d'un moteur de template serait interprété par du code PHP, donc c'est un langage interprété qui interprète un second langage, c'est dans cette double interprétation que se situe le problème.

Posté : 23 août 2008, 21:37
par Rem73
Un grand merci pour tout ces détailles :)

Je vais donc utiliser smarty qui ma sembler très très flexible, peut-être même trop, rendre les tpl actif, pour certaines choses ça me semble rendre le code moins propre mais sinon :D

Je met le sujet résolu, si je n'arrive pas sur d'autre point je posterais un autre post.

Encore merci.

Posté : 23 août 2008, 21:48
par Sékiltoyai
Je met le sujet résolu, si je n'arrive pas sur d'autre point je posterais un autre post.

Encore merci.
Très bonne initiative, et de rien :)