added italian docs. thanks to Gianluca Gillini

This commit is contained in:
messju
2004-12-01 18:55:26 +00:00
parent 6a6b789efd
commit 06adad9c19
178 changed files with 15590 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
<?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<69> di mettere in
cache il loro output pu<70> 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<6F> un poco come una funzione <link linkend="plugins.inserts">insert</link>.
</para>
<para>
Al contrario di ci<63> 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<65>
dichiarare che devono essere messi in cache con il quarto parametro
<parameter>$cache_attrs</parameter>. <parameter>$cache_attrs</parameter>
<20> 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 <20> 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 <20>:
</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 <20> in cache.
Siccome l'attributo endtime <20> 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 <20>:
</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
<20> "dinamica", l'altra <20> "statica". Potete mettere qualsiasi cosa fra
{dynamic} e {/dynamic}, sicuri che non verr<72> 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
-->

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="caching.groups">
<title>Gruppi di Cache</title>
<para>
Potete raggruppare le cache in modo pi<70> elaborato impostando gruppi
di cache_id. Per fare questo separate ogni sottogruppo con una barra
verticale "|" nel valore di cache_id. Potete usare tutti i sottogruppi
che volete.
</para>
<para>
Potete pensare ai gruppi di cche come ad una gerarchia di directory.
Ad esempio, un gruppo di cache "a|b|c" pu<70> essere concepito come la
struttura di directory "/a/b/c". clear_cache(null,"a|b|c") equivale a
cancellare i file "/a/b/c/*". clear_cache(null,"a|b") sarebbe come
cancellare i file "/a/b/*". Se specificate un compile_id, ad esempio
clear_cache(null,"a|b","foo"), sar<61> considerato come un ulteriore
sottogruppo "a/b/c/foo/". Se specificate un nome di template, ad
esempio clear_cache("foo.tpl","a|b|c"), Smarty tenter<65> di cancellare
"/a/b/c/foo.tpl". NON POTETE cancellare un template specifico sotto
pi<70> gruppi di cache, ad es. "a/b/*/foo.tpl"; i gruppi di cache funzionano
SOLO da sinistra a destra. Dovrete raggruppare i vostri template sotto
un singolo sottogruppo di cache per poterli cancellare tutti insieme.
</para>
<para>
I gruppi di cache non vanno confusi con la gerarchia della vostra directory
dei template: i gruppi di cache infatti non sanno qual <20> la struttura
dei template. Ad esempio, se avete una struttura di template tipo
"themes/blu/index.tpl" e volete avere la possibilit<69> di cancellare
tutti i file di cache per il tema "blue", dovrete creare un gruppo di
cache che riproduce la struttura dei template, ad esempio
display("themes/blue/index.tpl","themes|blue"), e poi eliminarli
con clear_cache(null,"themes|blue").
</para>
<example>
<title>gruppi di cache_id</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
// eliminiamo tutti i file di cache che hanno "sports|basketball" come primi due gruppi
$smarty->clear_cache(null,"sports|basketball");
// eliminiamo tutti i file di cache che hanno "sports" come primo gruppo di cache
// questo include "sports|basketball", nonch<63> "sports|(anything)|(anything)|(anything)|..."
$smarty->clear_cache(null,"sports");
// eliminiamo il file di cache foo.tpl con "sports|basketball" come cache_id
$smarty->clear_cache("foo.tpl","sports|basketball");
$smarty->display('index.tpl',"sports|basketball");
?>
]]>
</programlisting>
</example>
</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
-->

View File

@@ -0,0 +1,127 @@
<?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<70> file di cache per una singola chiamata a display()
o fetch(). Diciamo che una chiamata a display('index.tpl') pu<70> 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<72> 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, <20> 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'<27> 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
-->

View File

@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="caching.setting.up">
<title>Impostare il Caching</title>
<para>
La prima cosa da fare <20> abilitare il caching. Per farlo bisogna
impostare <link linkend="variable.caching">$caching</link> = true (o 1.)
</para>
<example>
<title>abilitare il caching</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
Col caching abilitato, la chiamata alla funzione display('index.tpl')
causa la normale generazione del template, ma oltre a questo salva
una copia dell'output in un file (la copia in cache) nella <link
linkend="variable.cache.dir">$cache_dir</link>. Alla chiamata successiva
di display('index.tpl'), verr<72> usata la copia in cache invece di
generare di nuovo il template.
</para>
<note>
<title>Nota tecnica</title>
<para>
I file nella $cache_dir vengono chiamati con nomi simili al nome del
template. Sebbene abbiano l'estensione ".php", in realt<6C> non sono
script php eseguibili. Non editateli!
</para>
</note>
<para>
Ogni pagina in cache ha un tempo di vita limitato, determinato da
<link linkend="variable.cache.lifetime">$cache_lifetime</link>. Il
valore di default <20> 3600 secondi, cio<69> 1 ora. Dopo questo tempo, la
cache viene rigenerata. E' possibile dare a file singoli il proprio
tempo di scadenza impostando $caching = 2. Consultate la documentazione
di <link linkend="variable.cache.lifetime">$cache_lifetime</link> per i dettagli.
</para>
<example>
<title>impostare cache_lifetime per singolo file di cache</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = 2; // la durata <20> per singolo file
// impostiamo il cache_lifetime per index.tpl a 5 minuti
$smarty->cache_lifetime = 300;
$smarty->display('index.tpl');
// impostiamo il cache_lifetime per home.tpl a 1 ora
$smarty->cache_lifetime = 3600;
$smarty->display('home.tpl');
// NOTA: l'impostazione seguente di $cache_lifetime non funzioner<65>
// con $caching = 2. La scadenza per home.tpl <20> stata gi<67> impostata
// a 1 ora, e non rispetter<65> pi<70> il valore di $cache_lifetime.
// La cache di home.tpl scadr<64> sempre dopo 1 ora.
$smarty->cache_lifetime = 30; // 30 seconds
$smarty->display('home.tpl');
?>
]]>
</programlisting>
</example>
<para>
Se <link linkend="variable.compile.check">$compile_check</link> <20> abilitato,
tutti i file di template e di configurazione che sono coinvolti nel file
della cache vengono verificati per vedere se sono stati modificati. Se qualcuno
dei file ha subito una modifica dopo che la cache <20> stata generata, il file
della cache viene rigenerato. Questo provoca un piccolo sovraccarico, quindi,
per avere prestazioni ottimali, lasciate $compile_check a false.
</para>
<example>
<title>abilitare $compile_check</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->compile_check = true;
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
Se <link linkend="variable.force.compile">$force_compile</link> <20> abilitato,
i file della cache verranno sempre rigenerati. Di fatto questo disabilita
il caching. $force_compile normalmente serve solo per scopi di debug, un
modo pi<70> efficiente di disabilitare il caching <20> di impostare <link
linkend="variable.caching">$caching</link> = false (o 0.)
</para>
<para>
La funzione <link linkend="api.is.cached">is_cached()</link> pu<70> essere
usata per verificare se un template ha una cache valida oppure no. Se avete
un template in cache che necessita di qualcosa come una lettura da un
database, potete usare questa funzione per saltare quella parte.
</para>
<example>
<title>uso di is_cached()</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
if(!$smarty->is_cached('index.tpl')) {
// Non c'<27> cache disponibile, assegnamo le variabili qui.
$contents = get_database_contents();
$smarty->assign($contents);
}
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
Potete mantenere parti di una pagina dinamiche con la funzione del template
<link linkend="language.function.insert">insert</link>. Diciamo che l'intera
pagina pu<70> essere messa in cache eccetto un banner che viene visualizzato
in fondo a destra nella page. Usando la funzione insert per il banner, potete
tenere questo elemento dinamico all'interno del contenuto in cache. Consultate
la documentazione su <link linkend="language.function.insert">insert</link> per
dettagli ed esempi.
</para>
<para>
Potete eliminare tutti i file della cache con la funzione <link
linkend="api.clear.all.cache">clear_all_cache()</link>, o singoli
file della cache (o gruppi di file) con la funzione <link
linkend="api.clear.cache">clear_cache()</link>.
</para>
<example>
<title>eliminare la cache</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
// eliminiamo tutti i file della cache
$smarty->clear_all_cache();
// eliminiamo solo la cache di index.tpl
$smarty->clear_cache('index.tpl');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
</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
-->