J'ai mashed une partie du code de la documentation (situé here) pour un exemple plus complet du cache smarty. En outre, je ne suis pas sûr de ce que vous utilisiez dans votre exemple, mais vous devriez utiliser les méthodes de smarty pour manipuler le cache.
require('Smarty.class.php');
$smarty = new Smarty;
// 1 Means use the cache time defined in this file,
// 2 means use cache time defined in the cache itself
$smarty->caching = 2;
// set the cache_lifetime for index.tpl to 5 minutes
$smarty->cache_lifetime = 300;
// Check if a cache exists for this file, if one doesn't exist assign variables etc
if(!$smarty->is_cached('index.tpl')) {
$contents = get_database_contents();
$smarty->assign($contents);
}
// Display the output of index.tpl, will be from cache if one exists
$smarty->display('index.tpl');
// set the cache_lifetime for home.tpl to 1 hour
$smarty->cache_lifetime = 3600;
// Check if a cache exists for this file, if one doesn't exist assign variables etc
if(!$smarty->is_cached('home.tpl')) {
$contents = get_database_contents();
$smarty->assign($contents);
}
// Display the output of index.tpl, will be from cache if one exists
$smarty->display('home.tpl');
Comme pour le cache APC, il fonctionnera de la même manière que smarty. Ils stockent tous les deux les données dans un fichier pour une durée spécifique. Chaque fois que vous souhaitez accéder aux données, il vérifie si le cache est valide et, le cas échéant, renvoie la valeur du cache.
Cependant, si vous n'utilisez Smarty vous pouvez utiliser APC en tant que tel:
Cet exemple passe par mémoriser le résultat d'une requête de base de données dans le cache, de même, vous pouvez modifier cela pour stocker au lieu de la totalité de la production de la page afin que vous don Ne pas avoir à exécuter des fonctions PHP coûteuses fréquemment.
// A class to make APC management easier
class CacheManager
{
public function get($key)
{
return apc_fetch($key);
}
public function store($key, $data, $ttl)
{
return apc_store($key, $data, $ttl);
}
public function delete($key)
{
return apc_delete($key);
}
}
Combiné avec une certaine logique,
function getNews()
{
$query_string = 'SELECT * FROM news ORDER BY date_created DESC limit 5';
// see if this is cached first...
if($data = CacheManager::get(md5($query_string)))
{
// It was stored, return the value
$result = $data;
}
else
{
// It wasn't stored, so run the query
$result = mysql_query($query_string, $link);
$resultsArray = array();
while($line = mysql_fetch_object($result))
{
$resultsArray[] = $line;
}
// Save the result inside the cache for 3600 seconds
CacheManager::set(md5($query_string), $resultsArray, 3600);
}
// Continue on with more functions if necessary
}
Cet exemple est légèrement modifié par here.
@lan Elliott oui, la mise en cache Smarty est une bonne idée mais je ne peux pas l'utiliser. parce que je n'ai qu'un seul $ smarty-> display ('index.tpl'); et le reste des autres pages comme news.tpl entrer dans mon index.tpl centre comme ceci {include file = $ page_center} puis dans le fichier news.php j'utilise cette ligne $ smarty-> assign ('page_center', 'news.tpl '); mais quand j'active la mise en cache, il me montre toujours le contenu par défaut du centre de la page, pas news.tpl, mais quand je cache la mise en cache, ça marche bien. – mehdi
@mehdi Il semble que vous ayez besoin d'utiliser des ID de cache personnalisés, ce qui vous permet de mettre en cache autant de versions de 'index.tpl' que vous le souhaitez. par exemple. dans 'news.php', vous appelez' $ smarty-> display ('index.tpl', 'news |'. $ article_id); 'Pour les pages d'aide, vous pouvez utiliser un cache-id de '' help | ' . $ topic' etc. (L'utilisation du caractère de tuyau pour structurer vos identifiants de cache vous permet d'effacer sélectivement le cache - par exemple effacer tous les articles de presse à la fois.) – searlea