Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
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
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
- les règles du forum : http://forum.dotclear.net/viewtopic.php?id=39494
- la galaxie de Dotclear 2 : http://fr.dotclear.org/documentation/2.0/links
Hors ligne
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
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
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
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.
Le B.A.BA : https://abc.dotaddict.org
La doc DC2 : https://fr.dotclear.org/documentation/2.0
Mes extensions : https://www.mirovinben.fr/blog/index.ph … pluginsDC2
Mes marqueurs de template : https://www.mirovinben.fr/blog/index.php?post/id3553
Hors ligne
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
- les règles du forum : http://forum.dotclear.net/viewtopic.php?id=39494
- la galaxie de Dotclear 2 : http://fr.dotclear.org/documentation/2.0/links
Hors ligne
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
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
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.
- les règles du forum : http://forum.dotclear.net/viewtopic.php?id=39494
- la galaxie de Dotclear 2 : http://fr.dotclear.org/documentation/2.0/links
Hors ligne
Hors ligne
Vous n'êtes pas identifié(e).