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

115 lines
4.0 KiB
XML
Raw Normal View History

<?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
-->