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,114 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="advanced.features.objects">
<title>Oggetti</title>
<para>
Smarty consente di accedere agli oggetti PHP attraverso i template. Ci sono
due modi per farlo. Uno <20> registrare gli oggetti al template, quindi accedere
ad essi attraverso una sintassi simile a quella delle funzioni utente. L'altro
modo <20> di assegnare gli oggetti ai template ed accedere loro come ad una
qualsiasi variabile assegnata. Il primo metodo ha una sintassi del template
migliore. E' anche pi<70> sicuro, perch<63> su un oggetto registrato potete impedire
l'accesso a certi metodi o propriet<65>. D'altra parte, su un oggetto registrato
non potete effettuare dei cicli o metterlo in un array di oggetti, ecc.
Il metodo che sceglierete dipender<65> dalle vostre necessit<69>, ma quando possibile
usate sempre il primo metodo, per mantenere la sintassi del template al massimo
della semplicit<69>.
</para>
<para>
Se la security <20> abilitata, non <20> possibile accedere a metodi o funzioni private
(che cominciano con "_") dell'oggetto. Quando esistono un metodo e una propriet<65>
con lo stesso nome, verr<72> usato il metodo.
</para>
<para>
Potete impedire l'accesso a certi metodi e propriet<65> elencandoli in un array
come terzo parametro di registrazione.
</para>
<para>
Per default, i parametri passati agli oggetti attraverso i template sono
passati nello stesso modo in cui li leggono le funzioni utente. Il primo
parametro <20> un array associativo, e il secondo <20> l'oggetto smarty. Se
volete i parameteri passati uno alla volta per ogni argomento come nel
tradizionale passaggio di parametri per gli oggetti, impostate il quarto
parametro di registrazione a false.
</para>
<para>
Il quinto parametro opzionale ha effetto soltanto quando
<parameter>format</parameter> <20> <literal>true</literal> e
contiene una lista di metodi che devono essere trattati come
blocchi. Ci<43> significa che questi metodi hanno un tag di
chiusura nel template
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>) e i
parametri passati al metodo hanno la stessa struttura di
quelli per le funzioni plugin per i blocchi. Questi metodi
quindi ricevono 4 parametri <parameter>$params</parameter>,
<parameter>$content</parameter>, <parameter>&amp;$smarty</parameter>
e <parameter>&amp;$repeat</parameter> e si comportano come
funzioni plugin per i blocchi.
</para>
<example>
<title>usare un oggetto registrato o assegnato</title>
<programlisting role="php">
<![CDATA[
<?php
// the object
class My_Object {
function meth1($params, &$smarty_obj) {
return "this is my meth1";
}
}
$myobj = new My_Object;
// registriamo l'oggetto (sar<61> usato per riferimento)
$smarty->register_object("foobar",$myobj);
// se vogliamo impedire l'accesso a metodi o propriet<65>, elenchiamoli
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// se vogliamo usare il formato tradizionale per i parametri, passiamo un false
$smarty->register_object("foobar",$myobj,null,false);
// Possiamo anche assegnare gli oggetti. Facciamolo per riferimento quando possibile.
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl");
?>
+]]>
</programlisting>
<para>
Ed ecco come accedere all'oggetto in index.tpl:
</para>
<programlisting>
<![CDATA[
{* accediamo all'oggetto registrato *}
{foobar->meth1 p1="foo" p2=$bar}
{* possiamo anche assegnare l'output *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
the output was {$output}
{* accediamo all'oggetto assegnato *}
{$myobj->meth1("foo",$bar)}
]]>
</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,66 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="advanced.features.outputfilters">
<title>Filtri di output</title>
<para>
Quando il template viene richiamato via display() o fetch(), <20> possibile
eseguire uno o pi<70> filtri sul suo output. Ci<43> <20> diverso dai postfiltri,
perch<63> questi ultimi lavorano sul template compilato prima che venga
salvato su disco, mentre i filtri dioutput lavorano sull'output del
template quando viene eseguito.
</para>
<para>
I filtri di output possono essere
<link linkend="api.register.outputfilter">registrati</link> o caricati
dalla directory plugins con la funzione
<link linkend="api.load.filter">load_filter()</link> oppure impostando la
variabile <link linkend="variable.autoload.filters">$autoload_filters</link>.
Smarty passer<65> l'output del template come primo argomento, e si aspetter<65>
che la funzione restituisca il risultato dell'esecuzione.
</para>
<example>
<title>uso di un filtro di output</title>
<programlisting role="php">
<![CDATA[
<?php
// mettiamo questo nell'applicazione
function protect_email($tpl_output, &$smarty)
{
$tpl_output =
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
'$1%40$2', $tpl_output);
return $tpl_output;
}
// registriamo il filtro
$smarty->register_outputfilter("protect_email");
$smarty->display("index.tpl");
// ora ogni indirizzo email nell'output del template avr<76> una semplice
// protezione contro gli spambot
?>
]]>
</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,62 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="advanced.features.postfilters">
<title>Postfiltri</title>
<para>
I postfiltri sui template sono funzioni PHP che vengono eseguite sui template
dopo la compilazione. I postfiltri possono essere
<link linkend="api.register.postfilter">registrati</link> oppure caricati
dalla directory plugins con la funzione <link
linkend="api.load.filter">load_filter()</link> o impostando la variabile
<link linkend="variable.autoload.filters">$autoload_filters</link>.
Smarty passer<65> il codice del template compilato come primo parametro,
e si aspetter<65> che la funzione restituisca il template risultante.
</para>
<example>
<title>uso di un postfiltro</title>
<programlisting role="php">
<![CDATA[
<?php
// mettiamo questo nell'applicazione
function add_header_comment($tpl_source, &$smarty)
{
return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source;
}
// registriamo il postfiltro
$smarty->register_postfilter("add_header_comment");
$smarty->display("index.tpl");
?>
]]>
</programlisting>
<para>
Questo far<61> s<> che il template compilato index.tpl appaia cos<6F>:
</para>
<screen>
<![CDATA[
<!-- Created by Smarty! -->
{* resto del template... *}
]]>
</screen>
</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,58 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="advanced.features.prefilters">
<title>Prefiltri</title>
<para>
I prefiltri sui template sono funzioni PHP che vengono eseguite sui template
prima della compilazione. Sono utili per pre-processare i template allo
scopo di rimuovere commenti non desiderati, tenere d'occhio ci<63> che i
progettisti mettono nei template, ecc. I prefiltri possono essere
<link linkend="api.register.prefilter">registrati</link> oppure caricati
dalla directory plugins con la funzione <link
linkend="api.load.filter">load_filter()</link> o impostando la variabile
<link linkend="variable.autoload.filters">$autoload_filters</link>.
Smarty passer<65> il codice sorgente del template come primo parametro,
e si aspetter<65> che la funzione restituisca il codice sorgente risultante.
</para>
<example>
<title>uso di un prefiltro</title>
<programlisting role="php">
<![CDATA[
<?php
// mettiamo questo nell'applicazione
function remove_dw_comments($tpl_source, &$smarty)
{
return preg_replace("/<!--#.*-->/U","",$tpl_source);
}
// registriamo il prefiltro
$smarty->register_prefilter("remove_dw_comments");
$smarty->display("index.tpl");
?>
]]>
</programlisting>
<para>
Questo rimuover<65> tutti i commenti dal sorgente del template.
</para>
</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,157 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="section.template.cache.handler.func">
<title>Funzione di gestione della Cache</title>
<para>
Come alternativa all'uso del meccanismo di default per la cache basato
sui file, potete specificare una funzione personalizzata di gestione
che verr<72> usata per leggere, scrivere ed eliminare i file in cache.
</para>
<para>
Create una funzione nella vostra applicazione che Smarty user<65> come
gestore della cache. Impostate il nome di questa funzione nella variabile
di classe <link linkend="variable.cache.handler.func">$cache_handler_func</link>.
Smarty ora user<65> questa funzione per gestire i dati della cache. Il primo
parametro <20> l'azione, che pu<70> essere 'read', 'write' o 'clear'. Il
secondo parametro <20> l'oggetto Smarty. Il terzo parametro <20> il contenuto in
cache. In una 'write', Smarty passa il contenuto da mettere in cache in
questo parametro. In una 'read', Smarty si aspetta che la funzione prenda questo
parametro per riferimento e che lo riempia con i dati della cache.
In una 'clear', il parametro non viene usato, quindi passate una variabile
dummy. Il quarto parametro <20> il nome del file del template (necessario
per le read e le write), il quinto parametro <20> il cache_id (opzionale), e
il sesto <20> il compile_id (opzionale).
</para>
<para>
Nota: l'ultimo parametro ($exp_time) <20> stato aggiunto in Smarty-2.6.0.
</para>
<example>
<title>esempio con l'uso di MySQL per la cache</title>
<programlisting role="php">
<![CDATA[
<?php
/*
esempio:
include('Smarty.class.php');
include('mysql_cache_handler.php');
$smarty = new Smarty;
$smarty->cache_handler_func = 'mysql_cache_handler';
$smarty->display('index.tpl');
il database mysql avr<76> questo formato:
create database SMARTY_CACHE;
create table CACHE_PAGES(
CacheID char(32) PRIMARY KEY,
CacheContents MEDIUMTEXT NOT NULL
);
*/
function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null)
{
// impostiamo i dati d'accesso al db
$db_host = 'localhost';
$db_user = 'myuser';
$db_pass = 'mypass';
$db_name = 'SMARTY_CACHE';
$use_gzip = false;
// creiamo un cache id unico
$CacheID = md5($tpl_file.$cache_id.$compile_id);
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
$smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
return false;
}
mysql_select_db($db_name);
switch ($action) {
case 'read':
// leggiamo la cache dal database
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$row = mysql_fetch_array($results,MYSQL_ASSOC);
if($use_gzip && function_exists("gzuncompress")) {
$cache_content = gzuncompress($row["CacheContents"]);
} else {
$cache_content = $row["CacheContents"];
}
$return = $results;
break;
case 'write':
// salviamo la cache sul database
if($use_gzip && function_exists("gzcompress")) {
// compress the contents for storage efficiency
$contents = gzcompress($cache_content);
} else {
$contents = $cache_content;
}
$results = mysql_query("replace into CACHE_PAGES values(
'$CacheID',
'".addslashes($contents)."')
");
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$return = $results;
break;
case 'clear':
// eliminiamo i dati in cache
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
// eliminiamo tutto
$results = mysql_query("delete from CACHE_PAGES");
} else {
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
}
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$return = $results;
break;
default:
// errore, azione non prevista
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
$return = false;
break;
}
mysql_close($link);
return $return;
}
?>
]]>
</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,246 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="template.resources">
<title>Risorse</title>
<para>
I template possono arrivare da varie risorse. Quando fate la display o la
fetch di un template, o quando fate la include da un altro template,
fornite un tipo di risorsa, seguito dal percorso appropriato e dal nome
del template. Se non viene esplicitamente indicato un tipo di risorsa,
viene utilizzato il valore di <link
linkend="variable.default.resource.type">$default_resource_type</link>.
</para>
<sect2 id="templates.from.template.dir">
<title>Template della $template_dir</title>
<para>
I template provenienti dalla $template_dir non hanno bisogno che
indichiate un tipo di risorsa, sebbene possiate indicare file: per
coerenza. Basta che forniate il percorso per il template che volete
usare, relativo alla directory radice $template_dir.
</para>
<example>
<title>uso dei template della $template_dir</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display("index.tpl");
$smarty->display("admin/menu.tpl");
$smarty->display("file:admin/menu.tpl"); // equivale al precedente
?>
]]>
</programlisting>
<para>
And from within Smarty template:
</para>
<programlisting>
<![CDATA[
{include file="index.tpl"}
{include file="file:index.tpl"} {* equivale al precedente *}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="templates.from.any.dir">
<title>Template da qualsiasi directory</title>
<para>
I template che si trovano al di fuori della $template_dir richiedono
obbligatoriamente che indichiate il tipo di risorsa file: seguito
dal percorso assoluto e dal nome del template.
</para>
<example>
<title>uso dei template da qualsiasi directory</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display("file:/export/templates/index.tpl");
$smarty->display("file:/path/to/my/templates/menu.tpl");
?>
]]>
</programlisting>
<para>
And from within Smarty template:
</para>
<programlisting>
<![CDATA[
{include file="file:/usr/local/share/templates/navigation.tpl"}
]]>
</programlisting>
</example>
<sect3 id="templates.windows.filepath">
<title>Percorsi su Windows</title>
<para>
Se usate una macchina Windows, i percorsi di solito comprendono
una lettera di drive (C:) all'inizio del percorso. Accertatevi
di usare "file:" nel path, per evitare conflitti di namespace e
ottenere i risultati voluti.
</para>
<example>
<title>uso di template da percorsi di Windows</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display("file:C:/export/templates/index.tpl");
$smarty->display("file:F:/path/to/my/templates/menu.tpl");
?>
{* dall'interno di un template *}
{include file="file:D:/usr/local/share/templates/navigation.tpl"}
]]>
</programlisting>
</example>
</sect3>
</sect2>
<sect2 id="templates.from.elsewhere">
<title>Template da altre risorse</title>
<para>
Potete ottenere template da qualsiasi risorsa alla quale sia
possibile accedere con PHP: database, socket, directory LDAP, e
cos<6F> via. Potete farlo scrivendo una funzione plugin per le
risorse e registrandola a Smarty.
</para>
<para>
Consultate la sezione <link linkend="plugins.resources">plugin
risorse</link> per maggiori informazioni sulle funzioni che
dovrete creare.
</para>
<note>
<para>
Notate che non <20> possibile modificare il comportamento della risorsa
<literal>file</literal>, ma potete fornire una risorsa che legge i
template dal filesystem in maniera diversa registrandola con un altro
nome di risorsa.
</para>
</note>
<example>
<title>uso di risorse personalizzate</title>
<programlisting role="php">
<![CDATA[
<?php
// mettete queste funzioni da qualche parte nell'applicazione
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
// fate qui le chiamate al database per ottenere il template
// e riempire $tpl_source
$sql = new SQL;
$sql->query("select tpl_source
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// qui facciamo una chiamata al db per riempire $tpl_timestamp.
$sql = new SQL;
$sql->query("select tpl_timestamp
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_timestamp = $sql->record['tpl_timestamp'];
return true;
} else {
return false;
}
}
function db_get_secure($tpl_name, &$smarty_obj)
{
// ipotizziamo che tutti i template siano sicuri
return true;
}
function db_get_trusted($tpl_name, &$smarty_obj)
{
// non usata per i template
}
// register the resource name "db"
$smarty->register_resource("db", array("db_get_template",
"db_get_timestamp",
"db_get_secure",
"db_get_trusted"));
// uso della risorsa dallo script php
$smarty->display("db:index.tpl");
?>
]]>
</programlisting>
<para>
And from within Smarty template:
</para>
<programlisting>
<![CDATA[
{include file="db:/extras/navigation.tpl"}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="default.template.handler.function">
<title>Funzione di gestione dei template di default</title>
<para>
Potete specificare una funzione da usare per ottenere i contenuti
del template nel caso in cui non sia possibile leggerlo dalla
risorsa appropriata. Un uso possibile di questa funzione <20> di
creare al volo template che non esistono.
</para>
<example>
<title>uso della funzione di gestione dei template di default</title>
<programlisting role="php">
<![CDATA[
<?php
// mettete questa funzione da qualche parte nell'applicazione
function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
{
if( $resource_type == 'file' ) {
if ( ! is_readable ( $resource_name )) {
// create il file del template e restituite il contenuto.
$template_source = "This is a new template.";
$template_timestamp = time();
$smarty_obj->_write_file($resource_name,$template_source);
return true;
}
} else {
// non <20> un file
return false;
}
}
// impostate il gestore di default
$smarty->default_template_handler_func = 'make_template';
?>
]]>
</programlisting>
</example>
</sect2>
</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
-->