Dotclear

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

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2009-06-18 22:09:56

LaHyenne
Membre
Inscription : 2009-05-19

Include php et cache

Bonjour,

Je crois avoir cerné mon problème, mais n'arrive pas à le résoudre.

Je veux inclure des pages php et que ces dernières ne soient pas incluses au cache.
Pour ça, j'ai bien compris que ma fonction doit inclure du code php, mais apparemment, ça marche pô.

mes codes :

$core->tpl->addValue('myinclude',
array('myinclude','tplMyInclude'));

// On défini la classe qui va gérer tout ça
class myinclude {
 public static function tplMyInclude($attr) {
  if (!isset($attr['src'])) { return; }
  $src = $attr['src'];
  return '<?php '.include("'.$src.'").' ?>';
 }
}

Qui appelle le fichier :

<?php
        require_once( 'inc/bdd_functions.php' );
        require_once( 'inc/liste_de_strips.php' );

        echo liste_de_strips(0, 9, "status='Vivant' OR status='Nouveau'");
?>

J'aimerais que ma fonction liste_de_strips() soit appelé à chaque nouvelle chargement de page, mais impossible.

Quelqu'un aurait une solution ?
Merci d'avance,
Etienne

Hors ligne

#2 2009-06-18 22:27:35

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

Re : Include php et cache

Bonjour,
comment s'appelle le second fichier ? Où est-il ?

Hors ligne

#3 2009-06-18 23:21:00

LaHyenne
Membre
Inscription : 2009-05-19

Re : Include php et cache

Hey, bonsoir Moe !

Le second fichier s'appelle presentation_strips.php et se situe un peu plus loin, mais sur le même serveur (en fait dans le dossier includes, lui même inclus comme dossier include par defaut pour php).
Et les deux fichier qui sont en require dans celui que j'ai mis ci dessus sont dans le même dossier include.
Tout est donc sur le serveur.

Ca aurait une influence ?
Je sèche un peu, j'avoue ;)

LH

Hors ligne

#4 2009-06-18 23:33:35

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

Re : Include php et cache

Oui ça a une influence, les fichiers sont appelés relativement au fichier qui appelle le blog ( /dotclear/index.php par défaut). Pour avoir des chemins absolus, qui ne dépendent pas de ce fichier, il faut utiliser dirname(__FILE__). __FILE__ est le fichier courant et dirname() retourne le dossier contenant ce fichier.

Mise en pratique : utiliser dirname(__FILE__) pour l'appel des fichiers comme ici. Tu peux utiliser require() pour afficher une erreur en cas de problème, ça t'aidera peut-être à déboguer.

LaHyenne a écrit :

(en fait dans le dossier includes, lui même inclus comme dossier include par defaut pour php).

Ça veut dire que ces fichiers peuvent être appelés sans avoir leur chemin complet ?

LaHyenne a écrit :

Et les deux fichier qui sont en require dans celui que j'ai mis ci dessus sont dans le même dossier include.

Tu peux les appeler avec ce code :

<?php
        require_once(dirname(__FILE__).'/inc/bdd_functions.php' );
        require_once(dirname(__FILE__).'/inc/liste_de_strips.php' );

        echo liste_de_strips(0, 9, "status='Vivant' OR status='Nouveau'");
?>

Enfin je suis pas sûr, si ils sont "dans le même dossier include", pourquoi as-tu écrit /inc/ dans le chemin ?

Hors ligne

#5 2009-06-19 03:25:51

LaHyenne
Membre
Inscription : 2009-05-19

Re : Include php et cache

héhéhé, j'ai rajouté inc/ devant afin justement que inc/mesfichiers.php et le presentation_strips.php soient tous les deux inclus à partir de include.
Et oui, l'include marche pas de soucis de ce côté là.

Ca marche très bien (démo en cours sur http://ourse.org avant de le transférer sur lapin.org)
Mon unique problème est que comme on le voit sur cette page de démo, je charge dynamiquement les derniers strips du portail. Et que donc cette liste doit être chargée en permanence, ce qui n'est pas le cas à cause de la mise en cache.

Et juste je suis incapable de désactiver cette mise en cache sur ce module spécifique.
J'ai bien essayé de chercher sur le forum ailleurs, j'ai trouvé des trucs correspondants, mais j'ai jamais réussi à comprendre comme il faut, ni à mettre en place les solutions.
(charger un fichier php plutôt qu'un fichier html ? ce n'est pas ce que je fais déjà ?)

Biz, LH

Hors ligne

#6 2009-06-19 05:54:15

LaHyenne
Membre
Inscription : 2009-05-19

Re : Include php et cache

Deux choses en fait :
- Je ne suis pas certain de m'être bien expliqué. En gros, les modules existent déjà, ailleurs que dans dotclear. Je veux simplement inclure ces modules sans passer par la case cache. Je ne peux pas vraiment modifier ces modules vu que je suis censé m'en servir ailleurs (m'enfin le jour ou j'ai pas le choix, ben j'aurais pas le choix, hein)
- En fait, le code que j'utilise pour la classe myInclude est le suivant :

return '<?php include("'.$src.'") ?>';

Ce code se situe dans le fichier _public.php du theme noviny que je suis en train de détourner.
Avec ce code, j'ai l'affichage qu'on voit en ce moment sur ourse.org, avec $src = presentation_strips.php, un fichier php qui se charge bien sinon ça ne marcherait pas. Comment ce fichier php peut-il ne pas recalculer son propre contenu malgré l'appel direct à une fonction ?

*** un peu plus tard ***
J'ai aussi essayé en activant le php direct dans le tpl home.html et en faisant un bête include de mon fichier php, mais cela ne marche pas mieux, j'ai toujours un problème de cache. Le truc étonnant c'est que c'est firefox qui cache les données ?

*** après une demi heure de cogitation ***
Je ne comprend toujours pas comment ça marche.
Comment ça se fait que ma liste se met à jour lorsque je vide mon cache firefox alors que ce dernier est censé être vide ?

***
Meme si je modifie des trucs dans presentation_strips.php genre je rajoute un bête { echo 'truc'; }, ben ça l'affiche pas tant que j'ai pas vidé mon cache firefox.

***
Dans 'Maintenance',
"Vider le répertoire du cache des templates" ne change rien du tout, c'est vraiment un cache firefox.

***
J'ai beau essayer pleins de trucs genre rajouter une balise 

<meta http-equiv="cache-control" content="no-cache"/>

, j'ai toujours :

Key: http://ourse.org/
     Data size: 9494 bytes
   Fetch count: 1
Last modified: 2009-06-19 00:28:17
       Expires: 1969-12-31 18:00:00

si je tape : 'about:cache?device=memory' dans firefox

***

  <meta http-equiv="cache-control" content="no-cache"/>
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="expires" content="0">

dans home.html ne change rien.

***
sur les conseils de : http://blog.chaosklub.com/index.php/pos … 2-partie-3
Création d'un fichier .htaccess contenant :

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
</IfModule>

***
Ok.

Donc ma vraie question finale (oublier le coup du cache dotclear), c'est comment éviter à firefox de mettre en cache la racine de mon site.
Ou comment lui faire comprendre qu'il faut le renouveler au bout de quelques secondes ?

Merci d'avance pour votre compréhension et patience !

Etienne, quelques heures de galère sans succès...

Hors ligne

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

Pied de page des forums

Sites map