Files
smarty/docs/it/programmers/advanced-features/advanced-features-objects.xml

115 lines
4.0 KiB
XML

<?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 è registrare gli oggetti al template, quindi accedere
ad essi attraverso una sintassi simile a quella delle funzioni utente. L'altro
modo è 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ù sicuro, perché su un oggetto registrato potete impedire
l'accesso a certi metodi o proprietà. 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à dalle vostre necessità, ma quando possibile
usate sempre il primo metodo, per mantenere la sintassi del template al massimo
della semplicità.
</para>
<para>
Se la security è abilitata, non è possibile accedere a metodi o funzioni private
(che cominciano con "_") dell'oggetto. Quando esistono un metodo e una proprietà
con lo stesso nome, verrà usato il metodo.
</para>
<para>
Potete impedire l'accesso a certi metodi e proprietà 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 è un array associativo, e il secondo è 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> è <literal>true</literal> e
contiene una lista di metodi che devono essere trattati come
blocchi. Ciò 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à usato per riferimento)
$smarty->register_object("foobar",$myobj);
// se vogliamo impedire l'accesso a metodi o proprietà, 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
-->