<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Luizz &#187; Smarty</title>
	<atom:link href="http://www.luizz.it/category/smarty/feed" rel="self" type="application/rss+xml" />
	<link>http://www.luizz.it</link>
	<description>Appunti di lavoro per lo sviluppo di applicazioni WEB con CakePHP</description>
	<lastBuildDate>Thu, 05 Jan 2012 08:48:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Usare HTML_QuickForm con Smarty</title>
		<link>http://www.luizz.it/38/pear/usare-html_quickform-con-smarty</link>
		<comments>http://www.luizz.it/38/pear/usare-html_quickform-con-smarty#comments</comments>
		<pubDate>Mon, 07 Jan 2008 22:45:41 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[Pear]]></category>
		<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://luizz/?p=38</guid>
		<description><![CDATA[Come impiegare il package con un template engine come Smarty]]></description>
			<content:encoded><![CDATA[<p>Se si vuole integrare la creazione di form con l&#8217;uso di smarty si può optare per due soluzioni:<br />
la prima consiste nell&#8217;assegnare ad una variabile dell&#8217;oggetto Smarty l&#8217;intero HTML generato dall&#8217;oggetto HTML_QuickForm;<br />
la seconda consiste nell&#8217;impiegare il renderer HTML_QuickForm_Renderer_ArraySmarty basato su HTML_QuickForm::toArray().</p>
<p><strong>1) Il metodo più semplice e immediato</strong></p>
<p>E&#8217; sufficente assegnare ad una variabile di Smarty il valore restituito dal metodo toArray dell&#8217;oggetto HTML_QuickForm.</p>
<p>Questo fornisce il codice HTML relativo al form costruito che può essere scritto così com&#8217;è nella pagina.<br />
A fronte dell&#8217;estrema semplicità si contrappone il totale controllo dell&#8217;aspetto da parte del codice.<br />
In questo modo per cambiare aspetto al form bisogna intervenire sul codice e non è sufficente apportare modifiche al template.</p>
<p>Codice di esempio:</p>
<pre><code>// creo l'oggetto QuickForm e Smarty
$obj_form = new HTML_QuickForm('frmReg');
$smarty = new Smarty();

// aggiunge gli elementi
$obj_form->addElement('textarea', 'txtAddress', 'Address:',
   array('rows' => 3, 'cols' => 30));
$obj_form->addElement('text', 'txtEmailAddress', 'Email Address:',
   array( 'size' => 40, 'maxlength' => 255));
$obj_form->addElement('submit', 'btnSubmit', 'Register');

// processo gli eventuali dati ricevuti dal form
if($obj_form->validate()) {
.....
}

// assegno alla variabile il codice HTML da mostrare nella pagina
$smarty->assign('mio_form',$obj_form->toHtml());

// visualizza il template
$smarty->display('mio_template.tpl');

 /*
 * Nel template ? sufficente inserire il seguente
 * comando per avere il form creato
 */

  <html>
    ....cut....
    {$mio_form}
    ....cut....
  </html></code></pre>
<p><strong><br />
2) Pieno controllo a Smarty<br />
</strong></p>
<p>Con questo metodo, si pu? demandare praticamente tutto il controllo dell&#8217;aspetto del form al template engine, prevedendo la posizione per ogni singolo elemento del form, compresi i messaggi di errore e gli asterischi per i campi obbligatori.</p>
<pre><code>//PEAR::HTML_QuickForm
require_once 'HTML/QuickForm.php';
require_once 'HTML/QuickForm/Renderer/ArraySmarty.php';

/* .... codice per l'inserimento degli elementi nel form .... */

// associo il renderer all'oggetto Smarty
$renderer =&#038; new HTML_QuickForm_Renderer_ArraySmarty($smarty);

// processo i dati inviati da form
if($form->validate()) {
   $form->freeze();
}

// accetta le eventuali modifiche al renderer
$form->accept($renderer);

//assegna l'array generato a una variabile
$smarty->assign('obj_form', $renderer->toArray());

// mostra il template
$smarty->display('test.tpl');

Il codice da inserire nel template invocato nello script ? il seguente:
{$obj_form.javascript}
<form {$obj_form.attributes}>
{$obj_form.hidden}

 {include file="common/footer.tpl"}
<table width="70%" border="0" >
<tr>
<th colspan="2">{$obj_form.header.titolo}</td>
</tr>
<tr>
<td colspan="2">{$obj_form.requirednote}</td>
</tr>
<tr>
<td>{$obj_form.txtAddress.label}</td>
<td>{$obj_form.txtAddress.html}</td>
</tr>
<tr>
<td>{$obj_form.ddlCountry.label}</td>
<td>{$obj_form.ddlCountry.html}</td>
</tr>
<tr>
<td>{if $obj_form.txtEmailAddress.required} (*) {/if}
         {$obj_form.txtEmailAddress.label}</td>
<td>{$obj_form.txtEmailAddress.html}
        <span style="color:#FF0000;">
           {$obj_form.errors.txtEmailAddress}
        </span>
     </td>
</tr>
<tr>
<td>{if $obj_form.btn.required} (*) {/if}
         {$obj_form.txtEmailAddress.label}</td>
<td>{$obj_form.btn.html}</td>
</tr>
</table>

</code></pre>
<p>In sostanza, il metodo toArray permette di ottenere un array con una particolare struttura che poi viene assegnato ad una variabile di Smarty.<br />
Nel manuale questa struttura è ben documentata.</p>
<p>Certo è che con questo sistema aumenta molto la complessità del template Smarty (si pensi se non si conoscono a priori gli elementi presenti nel form), ma di sicuro si può operare un completo controllo sull&#8217;aspetto del form intervenendo solo sul template.</p>
<p><strong>3) Un&#8217;ulteriore soluzione</strong></p>
<p>Mi è venuto in mente che una soluzione ulteriore è quella di creare un file di configurazione che può essere letto per impostare in modo appropriato il sistema template del renderer di HTML_QuickForm per poi utilizzare la soluzione 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/38/pear/usare-html_quickform-con-smarty/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Template Engine</title>
		<link>http://www.luizz.it/37/smarty/template-engine</link>
		<comments>http://www.luizz.it/37/smarty/template-engine#comments</comments>
		<pubDate>Mon, 07 Jan 2008 22:41:23 +0000</pubDate>
		<dc:creator>Luizz</dc:creator>
				<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://luizz/?p=37</guid>
		<description><![CDATA[Manuale di Smarty in Italiano Validare i form all&#8217;interno dei template Questa classe permette di effettuare un controllo sul formato dei dati che vengono inseriti tramite form. Il link è segnalato anche dal sito ufficiale di Smarty http://www.phpinsider.com/php/code/SmartyValidate/]]></description>
			<content:encoded><![CDATA[<p><a href="http://smarty.php.net/manual/it/">Manuale di Smarty in Italiano</a></p>
<p><strong>Validare i form all&#8217;interno dei template</strong></p>
<p>Questa classe permette di effettuare un controllo sul formato dei dati che vengono inseriti tramite form.<br />
Il link è segnalato anche dal sito ufficiale di Smarty<br />
<a href="http://www.phpinsider.com/php/code/SmartyValidate/">http://www.phpinsider.com/php/code/SmartyValidate/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizz.it/37/smarty/template-engine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

