Files
smarty/docs/it/programmers/caching/caching-multiple-caches.xml

128 lines
3.8 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="caching.multiple.caches">
<title>Cache multiple per una pagina</title>
<para>
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.
</para>
<example>
<title>passare un cache_id a display()</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$my_cache_id = $_GET['article_id'];
$smarty->display('index.tpl',$my_cache_id);
?>
]]>
</programlisting>
</example>
<para>
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.
</para>
<note>
<title>Nota tecnica</title>
<para>
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!
</para>
</note>
<para>
Assicuratevi di passare lo stesso valore di cache_id come
secondo parametro a <link linkend="api.is.cached">is_cached()</link> e
<link linkend="api.clear.cache">clear_cache()</link>.
</para>
<example>
<title>passare un cache_id a is_cached()</title>
<programlisting role="php">
<![CDATA[
<?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);
?>
]]>
</programlisting>
</example>
<para>
Potete eliminare tutti i file di cache per un determinato cache_id
passando null come primo parametro di clear_cache().
</para>
<example>
<title>eliminare tutte le cache per un determinato cache_id</title>
<programlisting role="php">
<![CDATA[
<?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");
?>
]]>
</programlisting>
</example>
<para>
In questo modo, potete "raggruppare" i vostri file di cache dando
loro lo stesso valore di cache_id.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->