IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Smarty] Mise en cache partielle d'une page


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut [Smarty] Mise en cache partielle d'une page
    Bonjour a tous, j'ai une question sur le système de mise en cache de smarty.
    J'ai mis une page simple en cache afin de vérifier que je n'avais pas d'erreur.
    Voyez donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function diplayHome(){
    		$this->smarty->cache_dir = '../../../_scriptroot/smarty/cache/_root';
    		$this->smarty->caching = 2;
    		$this->cache_lifetime = 60 * 5;
    		$this->smarty->use_sub_dirs = true;
    		$this->smarty->display('_root/index.tpl');
    	}
    Cela fonctionne parfaitement
    Maintenant j'ai une page avec du contenu dynamic, exemple un système de news ou encore un livre d'or simple.
    J'aimerai que la page sois mise en cache mais que le cointenu dynamic ne le sois pas afin d'afficher tous les enregistrements (logique)
    Comment réaliser cela j'ai lu plusieurs topic sur le sujet mais rien ne fonctionne
    Une petite explication m'aiderai beaucoup pour comprendre

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    Et avec les balises {dynamic} de smarty ? ca ne marche pas ? normalement, c'est fait pour ca..

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    non j'ai une page blanche, je ne vois pas l'erreur si au moins cela me retournais une erreur .
    même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('display_errors', 'on');
    ini_set('error_reporting',E_ERROR | E_WARNING | E_PARSE);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    Je sais que tu as des soucis quand tu as des templates inclus dans d'autres templates.. et que eux ont des tags dynamic.. (affichage d'un nocache avec un id..)

    Mais page carrement blanche sans erreur.. ca doit venir d'ailleurs, ce souci..

    tu mets la balise dynamic, ca te fait page blanche, tu la retires, ca t'affiche la page ?

  5. #5
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Si je retire la balise dynamic la page s'affiche c'est sa le plus amusant.
    Pour le problème de page blanche je n'ai jamais trouvé d'ou cela provenais encore un mystère
    Il est vrai que j'ai des tpl inclu dans d'autre cela joue il sur la balise dynamic ?
    je n'inclu que le header et footer ne contenant que quelque info stocker dans un fichier de config rien de plus.
    j'ai tout essayé pour la mise en cache mais rien n'y fais

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    oui, quand tu inclue un tpl dans un autre et qu'il comporte des tags dynamic, tu as des erreurs.. la solution c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Pour que smarty accepte les zones dynamiques, a l'interieur d'un template inclus... 
    function smarty_block_dynamic($param, $content, &$Smarty) {
        return $content;
    }
    $Smarty->register_block('dynamic', 'smarty_block_dynamic', false);
    Mais la page blanche blanche.. ca j'ai jamais vu..

  7. #7
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Effectivement il accepte la balise dynamic mais mon contenu dynamic est tjrs mis en cache donc si j'ajoute un enregistrement dans mon tableau celui-ci n'apparais pas dans le site il garde l'ancienne liste ?
    j'ai ceci dans mon code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function loadMessage(){
    			//self::paginate();
    			$this->smarty->register_block('dynamic', 'smarty_block_dynamic', false);
    			$this->smarty->assign('gbook',$this->dbguestbook->loadData());
    	}
    function diplayGuest(){
    		$this->smarty->cache_dir = '../../../_scriptroot/smarty/cache/guestbook';
    		$this->smarty->caching = 2;
    		$this->cache_lifetime = 60 * 5;
    		$this->smarty->use_sub_dirs = true;
    		$this->smarty->display('guestbook/index.tpl');
    	}
    dans mon tpl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {dynamic}
    			{foreach from=$gbook key=attr item=gb}
    				<div class="guestdate">{$gb.creation|date_format:"%A, %e %B, %Y, %H:%M:%S"}</div>
    				<p class="guestpseudo">{$gb.pseudo} à écris :</p>
    				<p class="guestmessage">{$gb.message|replace:'\"':'"'|replace:"\'":"'"|replace:"\'":"'"}</p>
    			{/foreach}
    			{/dynamic}
    surement un mauvais réglage du temps de mise en cache ?

  8. #8
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    j'ai trouvé une astuce pour mon livre d'or en utilisant clear_cache lors de l'ajout d'un message.
    Je souhaite en savoir d'avantage sur la mise en cache afin d'optimiser mon site et comprendre ainsi le fonctionnement existe il un site regroupant divers tutos autre que la doc de smarty ?
    ps: par contre la pagination reste un mystère pour moi avec smarty mais c un autre topic.

    merci

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    attention avec le clear cache.. specifie bien le cache_id a supprimer, sinon tu perds le benefice de ton cache..

  10. #10
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    quoi comme ceci ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->smarty->clear_cache('guestbook/index.tpl');

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    heu oui par exemple.. !
    ou avec le cache_id en plus, si tu en as un (en general, c'est conseillé) sauf si tu as un template par script et pas de variable qui peut jouer sur la sortie du template

  12. #12
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    je ne comprend pas trop comment ajouter l'option cache_id a mon script faut dire pas facile d'utiliser ce maudi cache avec du dynamique.
    Par contre j'ai entendu parlé de la balise insert mais sont utilisation reste un mystère

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    ca depend, tu as un fichier de template par script ? ou un seul fichier commun avec des includes dependant des conditions ? des variables GET ou POST qui influent sur le look des pages, le rendu html ?

  14. #14
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    j'ai un fichier de template par page ou plutot par script.
    Par exemple news a un seul fichier template afficher avec display mais possède des includes de tpl (header,footer,menu,etc) avec aussi des requetes GET pour afficher une news complète (ou articles c pareille :p)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?php
    require_once ('../../../_scriptroot/include/extend.smarty.php');
    require('db/index.php');
    require ('rss.php');
    /**
     * @link http://www.clashdesign.net/
     * @copyright clashdesign.net 2008
     * @author : Gérits Aurélien
     * @package : clashdesign framework and Magix CMS
     * 
     */
    /**
    	 * Class Load news complete
    	 * module
    	 * * @package DataObject
    	 * 
    	 */
    class IniNewsPage{
     
    	public $smarty;
    	/**
    	 * 
    	 * @var string
    	 */
    	private $dbh;
    	/**
    	 *
    	 *
    	 * @var string
    	 */
    	public $id_news;
     
    	/**
    	 * function construct class
    	 *
    	 */
    	function __construct(){
    		$this->smarty = new MySmarty();
    		$this->dbh = new DbLoadData();
     
    	}
    	/**
    	 * function Load data with mysql
    	 *
    	 */
    	function Loadata(){
    		if (!$this->smarty->is_cached('news/index.tpl')) {
    			$this->smarty->assign('result',$this->dbh->loadData());
    		}
    	}
    	/**
    	 * function display home page frontend
    	 *
    	 */
    	function newsHomeDisplay(){
    		$this->smarty->cache_dir = '../../../_scriptroot/smarty/cache/news';
    		$this->smarty->caching = 2;
    		$this->smarty->cache_lifetime = 60 * 5;
    		$this->smarty->use_sub_dirs = true;
    		$this->smarty->register_block('dynamic', 'smarty_ClashBlock_Dynamic', false);
    		$this->smarty->display('news/index.tpl');
    		if ($_GET['id_news']) {
    			$this->smarty->clear_cache('news/index.tpl');
    		}
    	}
    }
     
    ?>
    Mon tpl index.tpl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    include file="layer/header.tpl" section="prepend"}
    <div id="page">
    {include file="layer/top.tpl"}
    <div id="content">
    	{include file="layer/navtop.tpl"}
    	<div id="principal" class="principal">
    	 <h1 class="Titre">Les news</h1>
    	    {include file="news/news.tpl"}
        </div>
    </div>
    {include file="layer/footer.tpl"}
    mon news.tpl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {dynamic}
    		<div id="news">
    		{if count($result) >=1}
    			{foreach from=$result key=attr item=i}
    			    <div class="day-date">{$i.news_date|date_format:"%A, %e %B, %Y"}</div>
    			    <div class="post-title"><span>{$i.sujet}</span></div>
    			    <p> 
    				    {if $smarty.get.id_news}
    					   	 {$i.texte}
    					   	  <p><a href="{$_scripRootUrl}news">Retour</a></p>
    					   	 {else}
    					   	 {$i.texte|truncate:150}...
    					   	 <p><a href="{$_scripRootUrl}news-{$i.id_news}" title="{$i.sujet}">Lire tout</a></p>
    				    {/if}
    			    </p>
    		    {/foreach}
    		 {else}
    		 <p>Il n'y as aucune news</p>
    		 {/if}
    	   </div>
    	 {/dynamic}
    Bon pour l'instant la mise en place du cache dynamic est un peux bancal et pas optimiser du tout

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    En clair, l'idee est de generer un identifiant unique pour chaque affichage different.. donc par exemple, avec un template general.tpl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $cache_id = 'maNews_'.$_GET['id_news']
     
    if(!$Smarty->is_cached('general.tpl',$my_cache_id))
    {
        Tous mes traitements php dans ce if
    et les assign smarty.. et tout ce qui doit etre géré par le cache..
    }
     
    $Smarty->display('general.tpl', $my_cache_id);

    Bon courage.. la c'est vraiment.. tester, explorer..

  16. #16
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Voila j'ai ajouter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $my_cache_id = 'News_'.$_GET['id_news'];
     
    		if(!$this->smarty->is_cached('news/index.tpl',$my_cache_id)){
     
    			$this->smarty->clear_cache('news/index.tpl');
    		}
     
    		$this->smarty->display('news/index.tpl',$my_cache_id);
    Il crée bien un dossier par id de news cependant si j'ajoute une news dans l'admin je suppose qu'il n'affichera pas celle-ci dans la page public je serai obliger de vider le cache lors d'un ajout.

  17. #17
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    j'ai quand même un souci avec la fonction qui me tape de gros warning sur certaine page ?
    exemple :
    Warning: Smarty error: [in purchase/form.tpl line 28]: syntax error: block function 'dynamic' is not implemented (Smarty_Compiler.class.php, line 720) in /Applications/MAMP/htdocs/fremor/_scriptroot/smarty/libs/Smarty.class.php on line 1092
    pourtant j'ai bien la fonction dans le dossier des plugins et l'appel dans mes class avec register_block .
    Cela ne le fais pas tout le temps

  18. #18
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bon apparemment,
    j'ai ce message d'erreur lorsque je vide les fichiers compilé et que le cache n'est pas re créer.
    Suffit simplement de bien vidé le dossier template_c et ensuite de vidé le cache...
    Sinon il existais bien un bug avec le multicache résolu depuis la sortie de la 2.6.20
    ps: vivement la v3

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Mise a jour auto d'une page Excel ?
    Par didier.007 dans le forum Excel
    Réponses: 2
    Dernier message: 07/06/2009, 13h06
  2. MAJ partielle d'une page web sans intervention client
    Par evangeliste dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 06/12/2007, 12h56
  3. Changement partiel d'une page
    Par Xann_71 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/07/2007, 13h27
  4. [Smarty] Mise en cache
    Par Arnaud F. dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 14/06/2007, 10h49
  5. Liste déroulante + chargement partiel d'une page
    Par lamelfa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/09/2006, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo