2009-06-06 9 views
2

J'utilise Smarty dans mes projets lorsque j'accepte la mise en cache, cela ne semble pas fonctionner. J'utilise la structure suivante:Le cache Smarty ne fonctionne pas?

index.php - Affichage (index.tpl)

index.tpl - {include file = page_center de $}

module = produit - $ Smarty-> assign ("page_center", "product.tpl");

Dans product.php, le modèle product.tpl doit être chargé au centre de l'index.tpl. Lorsque j'active la mise en cache, le contenu par défaut n'est toujours pas product.tpl. Lorsque la mise en cache est désactivée, cela fonctionne correctement. Quel est le problème lorsque la mise en cache est activée?

Répondre

7

Vous aurez besoin d'utiliser un identifiant unique de cache pour chaque page pour faire ce travail correctement:

$cacheID = 'some_unique_value_for_this_page'; 
$smarty->assign('page_center', 'product.tpl'); 
$smarty->display('index.tpl', $cacheID); 

Compte tenu de l'exemple que vous avez donné à la question, il serait logique d'utiliser le nom du module de votre recherche chaîne comme base de l'ID de cache.

Il y a plus d'informations sur le manuel Smarty: http://www.smarty.net/manual/en/api.display.php

+0

ok. Je l'ai testé mais ça ne m'aide pas malheureusement parce qu'à chaque fois qu'un module appelle un nouveau fichier cache est créé dans le répertoire caché, c'est la même chose que j'utilise $ smarty-> force_compile. c'est moyen n'est pas correct d'attraper je pense. – mehdi

+0

Ancien sujet maintenant, mais en utilisant une valeur qui est unique à cette page ferait l'affaire pour vous, par exemple, si votre produit a un numéro d'identification de produit, utilisez-le comme valeur cacheID unique; Smarty compilera et mettra en cache le modèle pour cette page de produit particulière une fois, puis se référera à la version mise en cache chaque fois qu'elle sera référencée dans le futur. – Rohaq

+0

Ma solution à la mise en cache basée sur le langage ($ cache_id = $ lng_id). Merci! –

0

vous avez besoin de créer un module dynamique!

function smarty_block_dynamic($param, $content, &$smarty) { 
    return $content; 
} 

puis

$smarty = new Smarty 
$smarty->register_block('dynamic', 
         'smarty_block_dynamic', 
         false /* this block wont be cached */); 

et votre tpl

Hello {$name} 

this is your las update 

{/dyamic} 
{include file="some/dynamic/thing.tpl"} 
{/dynamic} 
0

Avant d'essayer de résoudre le problème de la mise en cache Smarty, à savoir si la mise en cache ne se produit pas, s'il vous plaît vérifier si votre dossier templates_c lecture et en écriture autorisations à tous