Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2010-08-13 00:35:23

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Peut-on passer des arguments aux balises de template ?

Bonjour,

Depuis deux jours je bute sur ce problème, qui n'a peut-être pas de solution.
Je voudrais par exemple faire ceci :

 

<?php if ($_GET["homepage"] == "blog") {$source = "_head_blog.html";} else {$source = "_head.html";} ?>
  {{tpl:include src="<?php echo $source; ?>"}}

J'ai également tenté ma chance sans les guillemets.
Sans résultat.

Si quelqu'un connaît la solution, ou si c'est impossible ...

Merci d'avance

Hors ligne

#2 2010-08-13 01:35:08

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Bonjour,
la balise <tpl:SysIf> devrait t'aider pour inclure des pages différentes selon le contexte : http://fr.dotclear.org/documentation/2. … tags/sysif

Hors ligne

#3 2010-08-13 08:38:20

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Merci pour cette réponse.
Grâce à <tpl:sysif> on peut en effet inclure des pages différentes selon le contexte, mais seulement en fonction d'arguments prédéfinis.
Ce que je cherche à faire c'est des inclusions en fonction d'une variable php quelconque.
Et je n'y arrive pas...
Mais ce n'est peut-être pas possible ?

Hors ligne

#4 2010-08-13 08:52:25

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Le plus simple est de te créer une balise perso du type {{tpl:myInclude}} qui contient le test qui va bien...


Dyslexics have more fnu!

Hors ligne

#5 2010-08-13 09:44:45

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Une piste à laquelle je n'avais pas pensé.
Il faut dire que n'ai pas encore écrit de balises perso. Je pensais rester un utilisateur lambda de Dotclear, mais je vais me lancer.
En tous cas merci pour cette ouverture de perspective

Hors ligne

#6 2010-08-13 15:00:31

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

J'ai tenté ma chance en suivant le conseil - avisé - de Dsls.

Quelques heures après, j'ai écrit mon premier template.
Mais il ne fonctionne pas : à l'exécution, il provoque l'erreur suivante avec une référence au cache qui ne m'aide pas à comprendre mon erreur :
Parse error: syntax error, unexpected ')' in /homez.311/collectiv/www/cache/cbtpl/04/77/0477600ea8ffd74b5399d01aea0bcfaa.php on line 69

Mon code est pourtant simple :

<?php
$core->tpl->addBlock('HomeSiteIf',array('tplBGTpl','HomeSiteIf'));

class tplBGTpl
{

	public static function HomeSiteIf($attr,$content)
	{
		if (isset($attr['site'])) {
		$site = $attr['site'];
		}
		else {
		$site= "";
		}
		
		$type= $_GET["homepage"];
		
		if ($type == 'blog' AND $site == 'faux')
		{ $expr = true; }
		else
		{ $expr = false; }
		
		return
		'<?php if ('.$expr.'): ?>'.
		$content.
		'<?php endif; ?>';
	}
	
}

?>

Si quelqu'un voit une erreur ?
J'ai beau vérifier les parenthèses, elles ne me semblent pas "unexpected"

Hors ligne

#7 2010-08-13 15:14:01

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : Peut-on passer des arguments aux balises de template ?

As-tu vidé le cache avant de tester ?
As-tu regardé le contenu du fichier cache/cbtpl/04/77/0477600ea8ffd74b5399d01aea0bcfaa.php (du côté de la ligne #69) ? Tu verras le résultat de la "pseudo-compilation" des différents marqueurs de template de la page (ou de l'élément de page) concernée.

Hors ligne

#8 2010-08-13 15:16:23

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Mon problème c'est que je ne sais pas où trouver le fichier cache !!!
Un peu débutant sur cet aspect de dotclear.

Hors ligne

#9 2010-08-13 16:31:06

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Quand tu définis $expr comme un booléen, la concaténation ne peut pas fonctionner et ton code renvoie

<?php if (): ?>

si tu utilises 

$expr = 'true';

ça devrait mieux fonctionner.

Ton code ne prend pas en compte le cache car ton test n'est pas exécuté "en direct", voir la doc pour plus d'explications : http://fr.dotclear.org/documentation/2.0/resources/tpl

Hors ligne

#10 2010-08-13 16:51:27

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Le responsable du mini-bar et le préposé à l'arrosoir sont super affutés.
Je vais tenter les  modifs suggérées et lire la doc.
Je vous tiens au courant.

Hors ligne

#11 2010-08-13 20:57:51

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

J'y suis presque, mais ça ne fonctionne qu'une fois : lle template n'est pas réexécuté (le cache je suppose)
Existe-t-il un moyen de ne pas mettre en cache une page ?

Voici le code actuel (qui fonctionne)

<?php
$core->tpl->addBlock('HomeSiteIf',array('tplBGTpl','HomeSiteIf'));

class tplBGTpl
{

	public static function HomeSiteIf($attr,$content)
	{
		$type='site';
		$site='vrai';
		if (isset($attr['site'])) {
		$site = $attr['site'];
		}
		
		$type= $_GET['homepage'];
		if ($type == "") {
		$type='site';
		}
		echo "****"; echo $type; echo "****"; echo $site; echo "****"; 
		if (($type == 'blog' AND $site == 'faux') OR (($type == 'site' AND $site == 'vrai')))
		{ return $content; }
		else
		{ return; }
		
	}
	
}

?>

Hors ligne

#12 2010-08-13 21:42:20

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Bonsoir,

Fin de l'aventure : j'ai mis tpl_use_cache à "non" et ça fonctionne très bien.
C'est pas très élégant, car le cache n'est pas une fonction pour les chiens, mais...

Sans vos conseils, je n'aurais sans doute jamais réglé le problème, alors merci.

Pour ma part je considère la question résolue !

Je ne sais pas s'il y a une manip à faire pour le signaler.

A+

Hors ligne

#13 2010-08-13 22:20:32

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : Peut-on passer des arguments aux balises de template ?

Si tu veux que le test soit évalué lors de l'affichage, il faut que ta fonction renvoie du code PHP contenant le test, c'est expliqué dans la page que j'ai mentionné plus tôt.

Hors ligne

#14 2010-08-25 18:02:42

bgin
Membre
Lieu : Cugnaux (Grand Toulouse)
Inscription : 2009-07-08
Site Web

Re : Peut-on passer des arguments aux balises de template ?

En effet, cette remarque sur l'effet du cache était écrite en encadré dès le début de la page !

C'est pas toujours facile de tout lire, et de tout comprendre...

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map