Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

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.

Example 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().

Example 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().

Example 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.

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors