Files
smarty/docs/it/programmers/caching/caching-cacheable.xml

146 lines
4.0 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="caching.cacheable">
<title>Mettere in Cache l'output dei Plugin</title>
<para>
A partire dai plugin di Smarty-2.6.0 la possibilità di mettere in
cache il loro output può essere dichiarata nel momento in cui li si
registrano. Il terzo parametro da passare a register_block,
register_compiler_function e register_function si chiama
<parameter>$cacheable</parameter> e per default vale true, il che
equivale al comportamento dei plugin di Smarty nelle versioni
precedenti alla 2.6.0
</para>
<para>
Quando si registra un plugin con $cacheable=false il plugin viene
chiamato tutte le volte che la pagina viene visualizzata, anche se
la pagina stessa arriva dalla cache. La funzione del plugin funziona
così un poco come una funzione <link linkend="plugins.inserts">insert</link>.
</para>
<para>
Al contrario di ciò che avviene in <link
linkend="language.function.insert">{insert}</link>, gli attributi passati
al plugin non vengono, per default, messi in cache. E' possibile però
dichiarare che devono essere messi in cache con il quarto parametro
<parameter>$cache_attrs</parameter>. <parameter>$cache_attrs</parameter>
è un array di nomi di attributi che devono essere messi in cache, in
modo che la funzione del plugin ottenga il valore dell'attributo qual
era al momento in cui la pagina è stata salvata sulla cache ogni volta
che la cache stessa viene riletta.
</para>
<example>
<title>Evitare che l'output di un plugin vada in cache</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
function remaining_seconds($params, &$smarty) {
$remain = $params['endtime'] - time();
if ($remain >=0)
return $remain . " second(s)";
else
return "done";
}
$smarty->register_function('remaining', 'remaining_seconds', false, array('endtime'));
if (!$smarty->is_cached('index.tpl')) {
// leggiamo $obj dal db e lo assegnamo al template...
$smarty->assign_by_ref('obj', $obj);
}
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
dove index.tpl è:
</para>
<programlisting>
<![CDATA[
Time Remaining: {remain endtime=$obj->endtime}
]]>
</programlisting>
<para>
Il numero di secondi che mancano alla scadenza di $obj cambia ad
ogni visualizzazione della pagina, anche se questa è in cache.
Siccome l'attributo endtime è in cache, l'oggetto deve essere
letto dal database solo quando la pagina viene scritta sulla cache,
ma non nelle richieste successive.
</para>
</example>
<example>
<title>Evitare che un intero blocco di template vada in cache</title>
<programlisting role="php">
<![CDATA[
index.php:
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
dove index.tpl è:
</para>
<programlisting>
<![CDATA[
Page created: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... qui facciamo altre cose ...
{/dynamic}
]]>
</programlisting>
</example>
<para>
Quando ricaricate lapagina vedrete che le due date sono diverse. Una
è "dinamica", l'altra è "statica". Potete mettere qualsiasi cosa fra
{dynamic} e {/dynamic}, sicuri che non verrà messa in cache col resto
della pagina.
</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
-->