Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Pages : 1
Bonjour,
J'ai un plugin où j'ajoute une fonction à une nouvelle valeur au template avec
$core->tpl->addValue();
par contre là j'ai une fonction qui me génère un résultat différent en fonction du blog visité, mais avec le cache il me retourne le même résultat pour tous les blogs.
A la rigueur qu'il mette en cache pour ce blog çà me gênerai pas mais là il met en cache la réponse pour tous les blogs.
est ce que vous savez comment je peux faire pour ne pas y prendre en compte dans le cache pour tous les blogs mais seulement pour celui là ?
Hors ligne
oups je voulais poster dans DC2 et je me suis tromper, si un admin peut déplacer mon sujet, merci :s
Hors ligne
Il faut que ta fonction renvoie du code entre des tags <?php et ?> en utilisant une condition, un peu comme ça :
return '<?php echo '.sprintf($f,'$_ctx->subscribeToCommentsPosts->post_id').'; ?>';
Regarde comment se passe l'interprétation des templates dans DC 2, c'est un peu complexe mais en recherchant les noms des fonctions dans le code source on arrive à trouver quelle fonction sert à quoi. Regarde /dotclear/inc/public/class.dc.template.php pour voir la correspondance entre un tag entre {{}} et une fonction. Et regarde la documentation de Franck Paul.
- 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 bcq Moe, jvé regarder dans ce sens :)
Hors ligne
bon doit y avoir quelque chose que j'ai pas bien saisie car le cache l'emporte toujours dans mon exemple que voici.
$core->tpl->addValue('js_func',array('test','func1'));
class test{
public static function func1(){
// je récupère le domaine de l'url de la page affiché
$url_tab = split('\.',$_SERVER['SERVER_NAME']);
$content = '';
$site_id = '';
if(!empty($url_tab[0])){
$file = 'http://mondomaine.tld/url/'.$url_tab[0];
$site_id = file_get_contents($file);
// $site_id contient un identifiant en fonction de l'url fournis
$content = '
<script type="text/javascript">
var mon_site = %d;
</script>
';
}
return
'<?php echo \''.sprintf($content,$site_id).'\'; ?>';
}
}
Je supprime mon cache, je regarde un blog, puis dès que j'en regarde un autre ben là j'ai toujours le même id qui m'est retourné alors que l'id fournis par l'appel de mon url ($file = 'http://mondomaine.tld/url/'.$url_tab[0];) me fournis bien un id différent en fonction de l'url fournis.
Qu'est ce que j'ai loupé ?
Hors ligne
Bonjour
Tu ne renvoie que le resultat de ta fonction, donc celle-ci n'est évaluée qu'une fois et renvoie le résultat en dur dans le cache.
Il faut renvoyer la fonction pour qu'elle soit active dans le cache.
Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/
Hors ligne
oui finallement je venais dire que j'ai trouvé la soluce, oué en faite il faut lui renvoyé l'appel d'une fonction, du coup j'ai écrit une seconde fonction dans ma classe et j'ai remplacer $site_id dans mon return par test::func2() et hop là çà marche.
merci je comprends mieux maintenant :)
Hors ligne
Pages : 1
Vous n'êtes pas identifié(e).