mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-29 19:31:36 +01:00
added italian docs. thanks to Gianluca Gillini
This commit is contained in:
@@ -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>&$smarty</parameter>
|
||||
e <parameter>&$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
|
||||
-->
|
||||
@@ -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
|
||||
-->
|
||||
@@ -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
|
||||
-->
|
||||
@@ -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
|
||||
-->
|
||||
@@ -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
|
||||
-->
|
||||
246
docs/it/programmers/advanced-features/template-resources.xml
Normal file
246
docs/it/programmers/advanced-features/template-resources.xml
Normal 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
|
||||
-->
|
||||
Reference in New Issue
Block a user