smarty template engine
Thursday, January 08, 2009  
download | documentation | faq | forum | mailing lists | changelog | contribs 


search for in the  


Cache multiple per una pagina

Potete avere più file di cache per una singola chiamata a display() o fetch(). Diciamo che una chiamata a display('index.tpl') può avere diversi output in base a una certa condizione, e volete cache separate per ciascun caso. Potete farlo passando alla funzione un cache_id come secondo parametro.

Esempio 14-6. passare un cache_id a display()

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching true;

$my_cache_id $_GET['article_id'];

$smarty->display('index.tpl',$my_cache_id);
?>

Qui sopra passiamo la variabile $my_cache_id a display() come cache_id. Per ogni valore di $my_cache_id verrà generato un file di cache per index.tpl. In questo esempio, "article_id" proveniva dall'URL e viene usato come cache_id.

Nota tecnica: Siate molto prudenti quando passate valori ricevuti da un client (come un browser) a Smarty (o qualsiasi applicazione PHP). Sebbene nell'esempio qui sopra l'uso di article_id proveniente dall'URL sembri molto comodo, potrebbe avere brutte conseguenze. Il valore di cache_id viene usato per creare una directory sul filesystem, quindi se l'utente passa un valore molto lungo come article_id, o se scrive uno script che spedisce velocemente valori casuali, potremmo avere dei problemi sul server. Assicuratevi di validare qualsiasi dato ricevuto in input prima di usarlo. In questo caso, potreste sapere che article_id ha una lunghezza di 10 caratteri, è composto solo di caratteri alfanumerici, e deve essere un article_id valido sul database. Verificatelo!

Assicuratevi di passare lo stesso valore di cache_id come secondo parametro a is_cached() e clear_cache().

Esempio 14-7. passare un cache_id a is_cached()

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching true;

$my_cache_id $_GET['article_id'];

if(!
$smarty->is_cached('index.tpl',$my_cache_id)) {
    
// Non c'è un file di cache disponibile, assegnamo le variabili qui.
    
$contents get_database_contents();
    
$smarty->assign($contents);
}

$smarty->display('index.tpl',$my_cache_id);
?>

Potete eliminare tutti i file di cache per un determinato cache_id passando null come primo parametro di clear_cache().

Esempio 14-8. eliminare tutte le cache per un determinato cache_id

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching true;

// eliminiamo tutti i file di cache con "sports" come cache_id
$smarty->clear_cache(null,"sports");

$smarty->display('index.tpl',"sports");
?>

In questo modo, potete "raggruppare" i vostri file di cache dando loro lo stesso valore di cache_id.




 

credits 

Smarty Copyright © 2002-2008
New Digital Group, Inc.

All rights reserved.