2010-08-10 8 views
2

Je voudrais aller un peu plus loin dans la mise en cache Smarty, j'ai quelques questions simples ...Smarty infirmation fichiers mis en cache

  1. Pour manipuler l'invalidation du cache Je veux savoir ce répertoire Smarty stocke son cache Par exemple, toutes les pages mises en cache liées à user_id=123 Je veux stocker à cache/users/123/. Où cache est smarty cache dir. Comment puis-je dire à smarty de stocker le cache lié à user_id=123 à cache/users/123/? Smarty stockera-t-elle également le cache de sous-modèles dans ce répertoire?

  2. Existe-t-il des recommandations sur le nettoyage de la mémoire cache dans ce répertoire? Je pense que la suppression de fichiers de ce répertoire peut provoquer des erreurs si certains visiteurs visitent actuellement cette page (une erreur peut survenir lorsque smarty verra que le cache de template est trouvé, mais le cache de sous-template est introuvable car il a déjà été supprimé par exemple).

Toutes recommandations et conseils sont appréciés.

Merci.

Répondre

0

Jetez un oeil à Smarty docs:... la section « Cache Groups » exactement ce que fait

.
0

utilisation peut changer cacheDir Smarty, selon l'endroit où vous voulez est (vous pouvez vérifier que quelques propres instructions if)

// Create smarty object 
$smarty = new Smarty(); 

// Change smarty-dir is like this: 
if (isset($_GET['userId'])) { 
    $smarty->compile_dir = '/path/to/dir/' . $_GET['userId']; 
} else { 
    $smarty->compile_dir = '/path/to/dir/default'; 
} 

Le deuxième point est un peu plus difficile, vous devez foreach par tous MAPPS, et attribuer la nouvelle compilation dir, puis exécutez la commande suivante:

$smarty->clear_cache(); 

Mais comme vous l'avez dit, il est possible que le fichier est demandé alors qu'il ya une suppression. :-(


Mais il est recommandé de ne pas utiliser des dossiers de cache, Smarty ne cache pas la sortie, juste le fichier PHP compilé.

+0

merci pour votre réponse. Existe-t-il des moyens de définir un sous-répertoire de cache, alors que $ smarty-> cache_dir est défini sur un seul répertoire ('$ smarty-> cache_dir = '/ path/to/cache''). Cela résoudra une énorme charge de problèmes, je pense. Je sais que si '$ smarty-> use_sub_dirs = true' nous pouvons définir le chemin vers le cache directement dans cache_id ('/user/123/'), mais Smarty ajoutera aussi ses propres sous-répertoires supplémentaires à notre cache_id, donc en résultat nous obtiendrons quelque chose comme ('/ user/123 /% 12 /% 23 /% 45 /'). Savez-vous comment l'éviter? – Kirzilla

+0

Lorsque vous le définissez sur true, vous pouvez utiliser un différent cache_id à chaque fois ($ smarty-> fetch ('fichier', 'cacheId') & $ smarty-> display ('fichier', 'cacheId')). – Ronn0

+0

Smarty effectue les deux types de mise en cache si vous les activez. Vous pouvez également mettre en cache les modèles compilés et la sortie finale. – djn

1

Vous devez PAS cache réinitialisés manuellement. Utilisez clear_cache() et clear_compiled_tpl() pour que vous pouvez effacer toutes les données et aussi faire compensation sélective avec les

Questions connexes