tag:blogger.com,1999:blog-51765714381333739752024-03-13T19:33:36.534+01:00Paolo Mosca analista programmatore espertoApplicazioni web, sviluppo App mobile Android e iOS, creazione siti webPaolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.comBlogger41125tag:blogger.com,1999:blog-5176571438133373975.post-678511435450147012013-10-08T14:13:00.000+02:002013-10-08T14:44:54.293+02:00Joomla loadposition<div style="text-align: justify;">
<b><a href="http://joomla.org/" target="_blank">Joomla</a></b> attraverso il <b>loadposition</b> ci permette di mostrare l'output di un <b>modulo</b> direttamente nel contenuto di un articolo. Questo è reso possibile proprio dal <b>plugin "</b><u>Content - Load Modules</u>" che è abilitato di default nell'installazione di <b>Joomla</b>. Attraverso il parametro del <b>plugin</b> possiamo dire a <b>Joomla</b> se inserire il <b>modulo</b> in un div oppure in una tabella o in nessun tag. Consiglio di lasciare l'impostazione di default che inserisce il <b>modulo</b> in un div. Vediamo ora come utilizzare il <b>loadposition</b>.<br />
<br /></div>
<h2>
Joomla loadposition</h2>
<div style="text-align: justify;">
Creiamo un <b>modulo</b> e come posizione mettiamo pure una non presente all'interno del nostro <b>template</b> (inventiamo pure un nome univoco. Ad esempio <i>posizione1</i>). Ci basterà ora inserire nel nostro articolo, nel punto in cui vogliamo far comparire il <b>modulo</b>, la seguente stringa:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>{loadposition posizione1}</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
In questo modo il nostro <b>modulo</b> apparirà nell'articolo che abbiamo creato. Notiamo che se abbiamo più <b>moduli</b> associati alla stessa posizione il <b>plugin</b> li inserirà tutti. Infatti, come dice il termine stesso, stiamo caricando (load) una posizione (position).<br />
<br /></div>
<h2>
Una variante a Joomla loadposition: il loadmodule</h2>
<div style="text-align: justify;">
Attraverso il <b>loadmodule</b> andiamo invece a caricare il <b>modulo</b> del tipo specificato. Supponiamo di voler mostrare nel nostro articolo il <b>modulo</b> di login. La sintassi è molto semplice:</div>
<br />
<i>{loadmodule mod_login}</i><br />
<br />
<div style="text-align: justify;">
Il nome del tipo (mod_login nell'esempio) deve essere quello della cartella che contiene il <b>modulo</b>. E' possibile anche caricare un modulo specificando il titolo che gli abbiamo dato nel Module Manager:</div>
<br />
<i>{loadmodule module,title}</i><br /><br />Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com1tag:blogger.com,1999:blog-5176571438133373975.post-23185964362510210372013-09-23T00:31:00.001+02:002013-09-23T00:42:13.055+02:00Joomla emailNelle nostre <b>estensioni Joomla</b> è veramente molto semplice <b>inviare email</b>. Utilizzando le api di <b>Joomla</b>, con poche righe di codice, possiamo mandare <b>email</b> in tutta sicurezza, delegando a <b>Joomla</b> tutto il lavoro.
<br />
<br />
<h2>
Inviare una email con le api di Joomla</h2>
Per prima cosa occorre creare un oggetto di tipo JMail:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$mailer = JFactory::getMailer();</span><br />
<br />
Il passo successivo è quello di inserire il <b>mittente</b>, che andremo a recuperare dalla configurazione globale di <b>Joomla</b>:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$config = JFactory::getConfig();</span><br />
<span style="font-family: Courier New, Courier, monospace;">$sender = array(<br /> $config->getValue('config.mailfrom'),
<br /> $config->getValue('config.fromname')<br /> );</span><br />
<span style="font-family: Courier New, Courier, monospace;">$mailer->setSender($sender);</span><br />
<br />
successivamente inseriremo il <b>destinatario</b> della <b>email</b>:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$mailer->addRecipient('indirizzo@domain.it');</span><br />
<br />
Se avete bisogno di inserire molti destinatari, basterà inserirli in un array:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$recipients = array(<br /> 'primo@domain.com', <br /> 'secondo@domain.com',<br /> </span><span style="font-family: 'Courier New', Courier, monospace;">'terzo@domain.com'</span><span style="font-family: 'Courier New', Courier, monospace;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">);</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">$mailer->addRecipient($recipients);</span><br />
<br />
Ora con le funzioni setSubject e setBody imposteremo l'<b>oggetto</b> della <b>email</b> e il <b>testo</b> in essa contenuto:
<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$mailer->setSubject('Subject of the email');</span><br />
<span style="font-family: Courier New, Courier, monospace;">$mailer->setBody('Sample text'); </span><br />
<br />
Se volte inviare una <b>mail</b> con testo in HTML basta scrivere:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$mailer->isHTML(true); </span><br />
<br />
Mentre per la codifica:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$mailer->Encoding = 'base64';
</span><br />
<br />
Volendo potete inserire un allegato con la funzione addAttachment. Per il percorso del file da allegare vi consiglio di utilizzare le <a href="http://paolomosca.blogspot.it/2012/08/le-costanti-di-joomla.html" target="_blank">costanti di Joomla</a>:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$mailer</span><span style="font-family: 'Courier New', Courier, monospace;">->addAttachment(</span><span style="font-family: 'Courier New', Courier, monospace;"> JPATH_COMPONENT.DS.'files'.DS.'file.zip'</span><span style="font-family: 'Courier New', Courier, monospace;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">);</span><span style="font-family: 'Courier New', Courier, monospace;"> </span><br />
<br />
Infine non ci rimane che inviare l'<b>email</b>:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$send = $mailer->Send(); </span><br />
<span style="font-family: Courier New, Courier, monospace;">if ($send !== true) { </span><br />
<span style="font-family: Courier New, Courier, monospace;"> echo 'Error sending email: '.$send->message; </span><br />
<span style="font-family: Courier New, Courier, monospace;">} </span><br />
<span style="font-family: Courier New, Courier, monospace;">else { </span><br />
<span style="font-family: Courier New, Courier, monospace;"> echo 'Mail sent'; </span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-42018791811570902522013-05-04T15:42:00.002+02:002013-08-16T11:23:27.676+02:00Virtuemart: scegliere il gruppo clienti nel form di registrazione<div>
<div style="text-align: justify;">
In <b><a href="http://virtuemart.net/" target="_blank">Virtuemart</a></b> possiamo creare <b>gruppi clienti</b> e assegnare gli utenti del <b>sito web</b> al <b>gruppo cliente</b> desiderato. Non ci è data però la possibilità di scegliere il nostro <b>gruppo clienti</b> mentre stiamo compilando il <b>form di registrazione</b>. In alcuni casi però è fondamentale avere questa possibilità direttamente nella fase di <b>registrazione</b> al <b>sito web</b>.
</div>
<br /></div>
<h2>
Plugin VMGroup</h2>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-6JriA9p4h6c/UYUOQtVCA8I/AAAAAAAAAHM/tFzYuRGZ2_4/s1600/Virtuemart+gruppo+cliente+registrazione.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Virtuemart gruppo cliente nel form di registrazione"><img alt="Virtuemart gruppo cliente nel form di registrazione" border="0" height="320" src="http://3.bp.blogspot.com/-6JriA9p4h6c/UYUOQtVCA8I/AAAAAAAAAHM/tFzYuRGZ2_4/s320/Virtuemart+gruppo+cliente+registrazione.jpg" width="296" /></a></div>
<br />
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://extensions.ventia.net/joomla/vmgroup-virtuemart-shopper-group-registration" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="VMGroup"><img alt="VMGroup" border="0" src="http://2.bp.blogspot.com/-KvtdvpwUC_k/UaIw0svX56I/AAAAAAAAAHo/F8XoecCEbiQ/s1600/download.png" title="VMGroup" /></a></div>
<br />
Ho realizzato un <b>plugin</b> che aggiunge un nuovo campo direttamente nel form di <b>registrazione</b> (vedi immagine) dando l'opportunità all'utente di selezionare il proprio <b>gruppo cliente</b>. Questa operazione è possibile sia nel <b>form di registrazione</b> di <a href="http://www.joomla.org/" target="_blank">Joomla</a> sia nella vista <b>Manutenzione Account Cliente</b> di <b>Virtuemart</b> grazie ad un <u>override</u> da utilizzare assieme al <b>plugin</b>.</div>
<br /></div>
<h2>
Configurazione plugin VMGroup</h2>
<ol>
<li>Scegli i <b>gruppi clienti</b> che vuoi visualizzare durante la registrazione individuando i relativi ID. Come sicuramente saprai basta andare sulla maschera <b>Gruppi Clienti</b> di <b>Virtuemart</b></li>
<li>Abilitare il plugin ed inserire gli ID del punto sopra separati da un punto e virgola</li>
<li>Caricare nella cartella html del <b>template</b> che state utilizzando l'override distribuito insieme al <b>plugin</b></li>
</ol>
<div style="text-align: center;">
<b><a href="http://extensions.ventia.net/joomla/vmgroup-virtuemart-shopper-group-registration" target="_blank"><span style="font-size: large;">Scarica VMGroup</span></a></b></div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com1tag:blogger.com,1999:blog-5176571438133373975.post-57128710351454146902013-03-16T00:26:00.002+01:002013-03-16T00:35:58.596+01:00Hosting VirtueMart Professionale<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-iRhvRFo8cOA/UT5Pob5BFiI/AAAAAAAAAG4/AmLRIywW7Ng/s1600/hosting-virtuemart-professionale.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" title="hosting virtuemart professionale"><img alt="hosting virtuemart professionale" border="0" src="http://3.bp.blogspot.com/-iRhvRFo8cOA/UT5Pob5BFiI/AAAAAAAAAG4/AmLRIywW7Ng/s1600/hosting-virtuemart-professionale.png" /></a></div>
<div style="text-align: justify;">
Un <b>Hosting Professionale</b> per il nostro <b>e-commerce</b> sviluppato con <a href="http://virtuemart.net/" target="_blank">Virtuemart</a> è molto importante per non vanificare gli sforzi. <b>VirtueMart</b> è un componente per <a href="http://www.joomla.org/" target="_blank">Joomla</a> che vi può permettere di avere un <b>e-commerce</b> completo ed efficace in pochissimo tempo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ma quale <b>hosting</b> scegliere per ospitare il nostro <b>sito web</b>?</div>
<div style="text-align: justify;">
<br /></div>
<h2>
Caratteristiche di un hosting VirtueMart professionale </h2>
<ol>
<li style="text-align: justify;"><b>Performante</b>. Sembrerà banale ma la <b>velocità</b> di risposta di un <b>e-commerce</b> è decisiva. <b>VirtueMart</b> richiede la giusta dose di potenza. <b>Hosting</b> condivisi con molti <b>siti web</b> su macchine con poca RAM e con processori datati possono essere la fortuna del vostro portafoglio ma la rovina del vostro business.</li>
<li style="text-align: justify;"><b>Sicuro</b>. La sicurezza prima di tutto. Con i soldi non si scherza! <b>Joomla</b> è uno dei <b>CMS</b> più utilizzati e di conseguenza le persone che si divertono a trovare il modo di "bucarlo" sono molte. Oltre ad un server <b>sicuro</b> (magari che utilizza <a href="http://www.suphp.org/" target="_blank">suPHP</a> e altri accorgimenti) è importante avere un <b>hosting</b> con certificato <b>SSL</b>. E' difficile definire <b>sicuro</b> un <b>e-commerce</b> che non utilizza il protocollo HTTPS.</li>
<li style="text-align: justify;"><b>Backup giornalieri</b>. Inutile che vi spieghi l'importanza.</li>
<li style="text-align: justify;"><b>Accessi</b> FTP e a PhpMyAdmin</li>
<li style="text-align: justify;"><b>Spazio adeguato</b>. Magari senza limiti.</li>
<li style="text-align: justify;"><b>Disponibilità</b> da parte del fornitore del servizio. Mi è capitato di dover cambiare servizio di <b>hosting</b> solo per il fatto che non riuscivo ad ottenere risposte su esigenze particolari di configurazione del <b>server</b>.</li>
</ol>
<div style="text-align: center;">
<span style="font-size: large;">Al prezzo di 129 € / anno</span> </div>
<div style="text-align: justify;">
<br />
vi offriamo oltre a tutto questo una <u>installazione pronta all'uso</u> di <b>Joomla</b> + <b>VirtueMar</b>t già perfettamente configurata con certificato SSL.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: medium; line-height: 25px;">Se sei interessato </span><a href="mailto:moscapaolo@gmail.com" style="background-color: white; color: #092c59; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: large; line-height: 25px; text-decoration: none;">contattami</a><span style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: medium; line-height: 25px;"> per la tua <br /><a href="mailto:moscapaolo@gmail.com">nuova installazione di VirtueMart</a></span></div>
Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-18428197694559533202012-11-17T13:53:00.000+01:002012-11-17T13:59:13.554+01:00Posizione moduli Joomla 2.5Per definire una nuova <b>posizione</b> per i <b>moduli</b> di un <b>sito web</b> sviluppato con <b><a href="http://www.joomla.org/" target="_blank">Joomla 2.5</a></b> dobbiamo eseguire le seguenti operazioni:<br />
<br />
<h2>
Inserire posizione nel file di definizione del template</h2>
Nel file xml di definizione del <b>template</b>, solitamente <i>templateDetails.xml</i>, sono dichiarate le <b>posizioni modulo</b>:<br />
<br />
<pre class="de1" style="background-color: #f9f9f9; background-image: none; border: 0px none white; font-size: 12px; line-height: 1.2em; overflow: hidden; padding: 0px; vertical-align: top;"> <span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><positions<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span>debug<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span>position-0<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span>position-1<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span>position-2<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span>...<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span>position-14<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span>
<span class="sc3" style="color: #009900;"><span class="re1" style="color: black; font-weight: bold;"></positions<span class="re2">></span></span></span></pre>
<br />
I nomi delle <b>posizioni</b> non sono fissi ma possono variare da <b>template</b> a <b>template</b>. Inseriamo semplicemente un nuovo nome per la nostra <b>posizione</b>.<br />
<br />
<span class="sc3" style="color: #009900; font-family: monospace; font-size: 12px; line-height: 14.966666221618652px; white-space: pre;"><span class="re1" style="color: black; font-weight: bold;"><position<span class="re2">></span></span></span><span style="background-color: #ffffcc; font-family: monospace; font-size: 12px; line-height: 14.966666221618652px; white-space: pre;">myposition</span><span class="sc3" style="color: #009900; font-family: monospace; font-size: 12px; line-height: 14.966666221618652px; white-space: pre;"><span class="re1" style="color: black; font-weight: bold;"></position<span class="re2">></span></span></span><br />
<h2>
<br />Inserire il codice php per la nuova posizione</h2>
Aprire il file sorgente del <b>template</b> selezionato (di solito <i>index.php</i>). Aggiungere queste righe nella <b>posizione</b> desiderata:<br />
<br />
<pre class="de1" style="background-color: #f9f9f9; background-image: none; border: 0px none white; font-size: 12px; line-height: 1.2em; overflow: hidden; padding: 0px; vertical-align: top;"> <span class="kw2" style="font-weight: bold;"><?php</span> <span class="kw1" style="color: #b1b100;">if</span> <span class="br0" style="color: #009900;">(</span><span class="br0" style="color: #009900;">(</span>bool<span class="br0" style="color: #009900;">)</span><span class="re0" style="color: #000088;">$this</span><span class="sy0" style="color: #339933;">-></span><span class="me1" style="color: #004000;">countModules</span><span class="br0" style="color: #009900;">(</span><span class="st_h" style="color: blue;">'myposition'</span><span class="br0" style="color: #009900;">)</span><span class="br0" style="color: #009900;">)</span> <span class="sy0" style="color: #339933;">:</span> <span class="sy1" style="font-weight: bold;">?></span>
<div id="mydiv">
<span class="xtra ln-xtra" style="background-color: #ffffcc; display: block;"> <jdoc:include type="modules" name="myposition" style="xhtml" /></span> </div>
<span class="kw2" style="font-weight: bold;"><?php</span> <span class="kw1" style="color: #b1b100;">endif</span><span class="sy0" style="color: #339933;">;</span> <span class="sy1" style="font-weight: bold;">?></span></pre>
<br />
Consiglio sempre di mettere la verifica che ci sia almeno un <b>modulo</b> pubblicato nella nostra <b>posizione</b>. In questo modo evitiamo di inserire un <i>div</i> vuoto se non abbiamo <b>moduli</b> in quella <b>posizione</b>.<br />
La direttiva <i>jdoc:include</i> serve a definire il segnaposto che il motore di rendering di <b>Joomla</b> andrà a sostituire con i <b>moduli</b> associati alla <b>posizione</b> specifica (<i>myposition</i> in questo caso).
Il parametro <i>style</i> serve ad indicare le varianti al codice html di generazione del <b>modulo</b>. Esso può assumere i seguenti valori standard: none, table, horz, xhtml, rounded e outline, definiti in <i>templates/system/html/modules.php</i>, oppure valori arbitrari definiti con un <i>override</i> nel file <i>html/modules.php</i> specifico del <b>template</b>.<br />
<br />
<h2>
Definiamo lo stile del modulo</h2>
Modifichiamo il foglio di stile associato al <b>template</b>, solitamente <i>/templates/nome del template/css/position.css</i>, inserendo le regole necessarie:<br />
<br />
<pre class="de1" style="background-color: #f9f9f9; background-image: none; border: 0px none white; font-size: 12px; line-height: 1.2em; overflow: hidden; padding: 0px; vertical-align: top;"><span class="re0" style="color: #cc00cc;">#mydiv</span> <span class="br0" style="color: #00aa00;">{</span>
<span class="kw1" style="font-weight: bold;">color</span><span class="sy0" style="color: #00aa00;">:</span> <span class="re0" style="color: #cc00cc;">#000000</span><span class="sy0" style="color: #00aa00;">;</span>
<span class="kw1" style="font-weight: bold;">width</span><span class="sy0" style="color: #00aa00;">:</span> <span style="color: #993333;">90px</span><span class="sy0" style="color: #00aa00;">;</span>
<span class="br0" style="color: #00aa00;">}</span></pre>
<br />
Non resta che creare un nuovo <b>modulo</b> dal backend di <b>Joomla</b> ed assegnarlo alla <b>posizione</b> appena creata.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com1tag:blogger.com,1999:blog-5176571438133373975.post-28859181610026043082012-08-23T21:22:00.001+02:002012-08-23T21:28:21.873+02:00Call-time pass-by-reference is deprecated<b>Deprecated: Call-time pass-by-reference has been deprecated</b> in filename.php<br />
<br />
<div style="text-align: justify;">
A partire dalla versione 5.3.0 di <a href="http://www.php.net/" target="_blank">PHP</a> è stato <b>deprecato</b> il <b>passaggio per riferimento</b> quando si <b>chiama un metodo o una funzione</b>.</div>
<div style="text-align: justify;">
l'utilizzo dell'<b>operatore &</b> nelle chiamate dei vostri metodi - esempio: metodo(&$a) - genera il messaggio di <b>warning</b> mostrato all'inizio.</div>
<div style="text-align: justify;">
In <b>PHP 5</b> infatti gli oggetti vengono sempre passati per <b>reference</b> (per riferimento) e quindi in questo caso l'operatore & non serve. Per i tipi di dati primitivi basta indicarlo nella definizione del metodo.<br />
Ricordo infatti che dalla versione 5.3.0 di PHP è stato <b>deprecato</b> il <b>passaggio per riferimento</b> nella <b>chiamata di un metodo</b> ma non certo il <b>passaggio per riferimento</b>. Vediamo un esempio:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">function functionA(&$var) { </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;"> $var++; </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">} </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">functionB($var)
{</span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;"> $var++; </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">} </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">$n = 1;</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">// corretto </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">functionA($n); </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">// deprecated </span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">// functionB(&$n);</span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Courier New, Courier, monospace;">echo $n; // output 2 </span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In entrambi i casi si vuole che la variabile $n venga incrementata dal metodo ma il secondo modo (commentato per non far attivare il warning) è scorretto.</div>
<div style="text-align: justify;">
Se stai utilizzando codice di terze parti ti può capitare che venga ancora utilizzato il <b>passaggio per riferimento a tempo di chiamata</b>. Per far funzionare la tua applicazione puoi intervenire sul php.ini attraverso la seguente direttiva</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>allow_call_time_pass_reference = on</i>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Questa però deve essere presa come una soluzione temporanea in attesa della versione corretta.</div>
Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-21155322260070514672012-08-09T21:48:00.002+02:002012-08-09T21:56:56.306+02:00Le Costanti di Joomla<div style="text-align: justify;">
Le <b>costanti</b> che <b><a href="http://www.joomla.org/" target="_blank">Joomla</a></b> ci mette a disposizione possono risultare molto utili quando scriviamo i nostri <b>componenti</b>. </div>
<div style="text-align: justify;">
Di seguito riporto un elenco non esaustivo delle <b>costanti</b> che possiamo utilizzare nelle nostre <b>estensioni</b> di <b>Joomla</b>.</div>
<h2>
<br /> Costanti legate al percorso</h2>
<ul>
<li><b>DS</b>: il separatore di directory (/), garantisce la portabilità tra sistemi operativi diversi. Come ben sapete Windows utilizza il carattere \ a differenza di linux /</li>
<li><b>JPATH_ADMINISTRATOR</b>: il percorso base dell’applicazione JAdministrator (/joomla/administrator) </li>
<li><b>JPATH_BASE</b>: il percorso base dell'applicazione corrente: assume valori diversi a seconda dell’applicazione in uso (JSite, JAdministrator, JInstallation o altre personalizzate) </li>
<li><b>JPATH_COMPONENT</b>: il percorso verso la directory del componente in uso (/joomla/components/com_in_uso) </li>
<li><b>JPATH_COMPONENT_ADMINISTRATOR</b>: il percorso verso la directory lato admin del componente in uso (/joomla/administrator/components/com_in_uso) </li>
<li><b>JPATH_COMPONENT_SITE</b>: il percorso verso la directory lato sito del componente in uso (/joomla/components/com_in_uso) </li>
<li><b>JPATH_CONFIGURATION</b>: il percorso della directory che contiene il file di configurazione (/joomla) </li>
<li><b>JPATH_INSTALLATION</b>: il percorso della applicazione di installazione JInstallation (/joomla/installation) </li>
<li><b>JPATH_CACHE</b>: il percorso della directory cache (/joomla/cache)
</li>
<li><b>JPATH_LIBRARIES</b>: il percorso della cartella libraries (/joomla/libraries) </li>
<li><b>JPATH_PLUGINS</b>: il percorso della cartella plugins (/joomla/plugins) </li>
<li><b>JPATH_ROOT</b>: il percorso principale del framework Joomla (/joomla) </li>
<li><b>JPATH_SITE</b>: il percorso base dell'applicazione JSite (/joomla) </li>
<li><b>JPATH_THEMES</b>: il percorso della cartella templates (/joomla/templates)</li>
</ul>
<h2>
<br /> Costanti legate alla data</h2>
<ul>
<li><b>DATE_FORMAT_LC</b>: mostra la data nella forma Giovedì, 09 Agosto 2012 </li>
<li><b>DATE_FORMAT_LC2</b>: mostra la data e l’ora nella forma Giovedì, 09 Agosto 2012 10:00</li>
<li><b>DATE_FORMAT_LC3</b>: mostra la data nella forma 09 Agosto 2012</li>
<li><b>DATE_FORMAT_LC4</b>: mostra la data nella forma 09:08:12</li>
</ul>
<br />
<div style="text-align: justify;">
Il mio consiglio è di utilizzare nelle operazioni di include e require le <b>costanti</b> messe a disposizione dal <b>framework</b> di <b>Joomla</b> in modo da garantire la corretta portabilità dei vostri componenti.</div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-88903512017067025962012-04-21T17:38:00.004+02:002012-04-21T17:51:53.500+02:00Symfony 2: comandi del framework<a href="http://symfony.com/" target="_blank">Symfony 2</a> è un <b>framework MVC</b> (e non solo!) sviluppato in <b>PHP</b>. Riporto di seguito i <b>comandi</b> più utili per velocizzare lo <b>sviluppo </b>(per eseguire questi <b>comandi</b> spostarsi nella directory <b>app</b> della tua <b>applicazione</b> sviluppata con <b>Symfony 2</b>):<br />
<br />
<ul>
<li><i>php console generate:bundle</i> Genera la struttura delle directory di un nuovo <b>bundle</b></li>
<li><i>php console gen:doctrine:entity </i>Genera una nuova entità</li>
<li><i>php console doctrine:database:create</i> Crea il database per la tua applicazione</li>
<li><i>php console doctrine:schema:update --dump-sql</i> Genera le query per creare o aggiornare le tabelle corrispondenti alle entità di <b>Symfony</b></li>
<li><i>php console doctrine:schema:update --force</i> Aggiorna il database con le query ottenute con il <b>comando</b> precedente</li>
<li><i>php console doctrine:generate:crud</i> Data una entity, permette di generare il <b>controller</b> e le relative <b>viste</b> per effettuare le operazioni di creazione, lettura, aggiornamento e cancellazione di un elemento.</li>
<li><i>php console doctrine:generate:entities</i> <i>XXX</i> Genera i metodi <b>getter</b> e <b>setter</b> per le entità del namespace indicato (XXX). Notiamo che è possibile specificare anche una singola entità.</li>
</ul>
<div>
<br />
Questi sono solo alcuni dei <b>comandi</b> che <b>Symfony 2</b> mette a disposizione. Rimando alla <a href="http://symfony.com/doc/current/index.html" target="_blank">guida ufficiale</a> per una panoramica completa.</div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-73290519534356695602012-03-23T10:18:00.000+01:002012-03-23T10:18:23.240+01:00Joomla 2.5 Parametri del componente nel modelloLeggere i <b>parametri</b> di un <b>componente</b> dentro il <b>modello</b> è molto semplice con <b><a href="http://www.joomla.org/" target="_blank">Joomla 2.5</a></b>. Vediamo come fare:<br />
<br />
<h2>Importare l'helper</h2>Importiamo nel nostro <b>modello</b> la seguente <b>classe</b>:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">jimport('joomla.application.component.helper');</span><br />
<br />
<h2>Recuperiamo l'oggetto JRegistry</h2><span style="font-family: 'Courier New', Courier, monospace;">$params = JComponentHelper::getParams('nome_componente');</span><br />
<br />
Dove nome_componente è il nome del vostro <b>componente<br />
</b><br />
<h2>Chiediamo il nostro parametro</h2>$myParameter = $params->get('myParameter');Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-86082476704388334682012-01-06T12:27:00.002+01:002013-08-12T09:48:14.086+02:00Joomla: scegliere il gruppo utente durante la registrazione<div style="text-align: justify;">
Scegliere il proprio <b>gruppo utente</b> durante la <b>registrazione</b> ad un <b>sito web</b> può diventare una esigenza importante. <b><a href="http://www.joomla.org/" target="_blank">Joomla</a></b> dalla versione 1.6 in poi ha introdotto un'ottimo sistema per la gestione dei <b>gruppi utenti</b> e dei <b>permessi</b>, di cui abbiamo già parlato in <a href="http://paolomosca.blogspot.com/2011/02/joomla-16-permessi-e-utenti-acl.html" target="_blank">joomla 1.6: permessi e utenti (ACL)</a>.</div>
<div style="text-align: justify;">
Ricordiamo però che bisogna assegnare manualmente ogni utente al relativo gruppo dal backend di <b>Joomla</b>. In alcuni casi questo può risultare scomodo. Infatti in alcuni <b>siti web</b> è l'<b>utente</b> stesso che deve decidere a quale<b> gruppo</b> appartenere e questo fin dalla fase di <b>registrazione</b> al <b>sito web</b>.</div>
<br />
<h2>
Plugin jgroup</h2>
<div style="text-align: justify;">
Ho realizzato un semplice <b>plugin</b> che implementa questa funzionalità andando ad aggiungere un nuovo campo direttamente nel form di <b>registrazione </b>dove l'utente può selezionare il <b>gruppo</b> desiderato. Il <b>plugin</b>, attraverso un semplice parametro da configurare, permette di scegliere quali <b>gruppi</b> mostrare agli <b>utenti</b> semplicemente elencando gli id dei <b>gruppi</b> stessi.</div>
<br />
<b><a href="http://extensions.ventia.net/joomla/jgroup-plugin" target="_blank">plg_jgroup.zip</a></b>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com12tag:blogger.com,1999:blog-5176571438133373975.post-43238537351099149822011-10-22T18:27:00.000+02:002012-09-16T11:35:28.677+02:00VirtueMart: importare prodotti<b>Importare</b> i <b>prodotti</b> su <b><a href="http://virtuemart.net/" target="_blank">VirtueMart</a></b> da un <b>software gestionale</b> oppure da un qualsiasi sistema esterno a <b>VirtueMart</b> può diventare un'operazione complicata, soprattutto se in presenza di un elevato numero di <b>prodotti</b>.<br />
<br />
<h2>
Come importare allora i propri prodotti su VirtueMart?</h2>
<br />
La risposta è semplice: <b><a href="http://paolomosca.blogspot.com/p/shop-migrator-per-virtuemart.html">Shop Migrator</a></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-opGAoy6Np2M/TpsndPiKaHI/AAAAAAAAAEA/4-BeaFKY--c/s1600/Shop+Migrator.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="VirtueMart importare prodotti con Shop Migrator" border="0" src="http://4.bp.blogspot.com/-opGAoy6Np2M/TpsndPiKaHI/AAAAAAAAAEA/4-BeaFKY--c/s1600/Shop+Migrator.jpg" title="VirtueMart importare prodotti con Shop Migrator" /></a></div>
<br />
<b>Shop Migrator</b> <b>importa</b> i vostri <b>prodotti</b> su <b>VirtueMart</b> prendendo i dati dal vostro <b>gestionale</b> oppure da qualsiasi altra fonte scelta da voi.<br />
<b>Shop Migrator</b> importa già i <b>prodotti</b> da importanti <b>gestionali</b> ma se avete l'esigenza di utilizzare database sviluppati da voi oppure fogli di excel etc... possiamo <u>rapidamente</u> realizzare il codice per interfacciarci alla vostra sorgente dati.<br />
<div style="text-align: center;">
<br />
<span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif; font-size: large;"><span class="Apple-style-span" style="line-height: 25px;">Se sei interessato</span><span class="Apple-style-span" style="line-height: 25px;"> </span><span class="Apple-style-span" style="line-height: 25px;"><a href="mailto:moscapaolo@gmail.com" style="color: #092c59; text-decoration: none;">contattami</a></span><span class="Apple-style-span" style="line-height: 25px;"></span></span></div>
<br />
N.B. Per migrazioni da gestionali attualmente non previsti il prezzo sarà da concordarePaolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-89548608284265751942011-10-08T13:39:00.005+02:002011-10-08T13:53:55.657+02:00Le Breadcrumbs in Joomla 1.5<div style="text-align: justify;">Le <b>breadcrumbs</b> (letteralmente <b>briciole di pane</b>) sono dei link presenti nell'interfaccia utente che permettono di risalire alle <b>pagine web</b> visitate in precedenza. Infatti le <b>breadcrumbs</b> tengono traccia delle varie pagine che l'utente ha visualizzato durante la navigazione nel <b>sito</b> (ricordate Pollicino che lasciava una scia di briciole di pane lungo il suo cammino per poterlo ripercorrere all'indietro?)</div><br />
<h2>Le breadcrumbs in Joomla</h2>Ecco un'esempio di <b>breadcrumbs</b> in <b><a href="http://www.joomla.org/" target="_blank">Joomla</a></b>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-mYTusCBK4YA/TpAxNn2PDSI/AAAAAAAAAD8/x7T4io-vaBU/s1600/breadcrumbs++joomla.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="breadcrumbs joomla" border="0" height="155" src="http://4.bp.blogspot.com/-mYTusCBK4YA/TpAxNn2PDSI/AAAAAAAAAD8/x7T4io-vaBU/s400/breadcrumbs++joomla.jpg" title="breadcrumbs joomla" width="400" /></a></div><br />
<div style="text-align: justify;">La freccia indica le nostre <b>briciole di pane</b>. L'utente può così facilmente capire dove si trova all'interno del sito e come ci è arrivato.</div><div style="text-align: justify;"><b>Joomla</b> permette di realizzare questa funzione attraverso il suo <b>modulo Breadcrumbs</b> fornito in ogni installazione, ma può capitare che in qualche componente esterno non venga visualizzato correttamente il percorso. Vediamo come andare a rimediare:</div><div style="text-align: justify;">Dobbiamo innanzitutto recuperare il <b>pathway</b> corrente andandolo a chiedere all'oggetto globale <b>$mainframe</b>:</div><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$pathway = &$mainframe->getPathWay();<br />
</span><br />
$pathway è un oggetto della classe <u><a href="http://api.joomla.org/Joomla-Framework/Application/JPathway.html" target="_blank">JPathway</a></u><br />
Per aggiungere il nome della<b> pagina web</b> al percorso corrente basta scrivere:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$pathway->addItem($title);<br />
</span><br />
dove $title conterrà il nome della pagina corrente. Ecco come inserire anche il link della pagina:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$pathway->addItem($title, $link);<br />
</span><br />
dove $link è la variabile che conterrà il vostro link. Se volete cancellare tutte le<b> briciole di pane</b> e ripartire dalla home basta scrivere:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$pathway->setPathway(array());<br />
</span><br />
e poi inserirete con addItem i vostri nuovi titoli.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-33399776443149793842011-07-21T12:59:00.000+02:002011-07-21T12:59:14.259+02:00Joomla 1.7<b><a href="http://www.joomla.org/" target="_blank">Joomla 1.7</a>,</b> rilasciato il 19/07/2011 a sei mesi di distanza da <b>Joomla </b>1.6, propone una interessante novità per gli sviluppatori: la separazione della <b><a href="https://github.com/joomla/joomla-platform" target="_blank">Joomla Platform</a></b> dal resto del <b>CMS</b>. La <b>Joomla Platform </b>non è altro che un <b>PHP Application Framework</b> che potrà essere utilizzato indipendentemente dal Content Manager e dal suo core: ciò significa che anche applicazioni di terze parti potranno basarsi su <b>Joomla</b>.<br />
Nella versione <b>Joomla 1.7</b> è stata inoltre aggiunta la possibilità di tradurre in lingue diverse le varie voci di menù senza dover ricorrere a estensioni esterne.<br />
<b>Joomla 1.7,</b> al pari di <b>Joomla 1.6</b>, è una versione di passaggio verso <b>Joomla 1.8</b> che diventerà la prossima <b>versione a lungo termine</b> ed andrà a sostituire definitivamente la vecchia e collaudata versione 1.5.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-1208011852380720632011-07-12T10:17:00.016+02:002011-07-12T10:31:26.502+02:00Scrivere plugin per Joomla (II parte)Nell'articolo <a href="http://paolomosca.blogspot.com/2011/06/scrivere-plugin-per-joomla-i-parte.html" target="_blank"><b>Scrivere plugin per joomla (I parte)</b></a> abbiamo visto i vari tipi di <b>plugin</b> presenti in <a href="http://www.joomla.org/" target="_blank">Joomla</a> e i relativi eventi che possono essere utilizzati in ogni classe di <b>plugin</b>. Oggi andremo a scrivere un <b>plugin</b> di prova che chiameremo <i>MyString</i>.<br />
<br />
<h2>File necessari in un plugin</h2>Il <b>plugin</b> in questione appartiene alla tipologia "<i>content</i>" e ci permetterà di inserire una stringa a piacere ogni volta che inseriremo il segnaposto {mystring} in un contenuto di <b>Joomla</b>.<br />
Il numero di files minimi necessari per la creazione di un plugin sono due:<br />
<ol><li>mystring.php</li>
<li>mystring.xml</li>
</ol>Nel nostro caso ci limiteremo a questi due soli file. Ricordiamo che in caso di bisogno, possiamo creare una cartella (nel nostro esempio "<i>mystring</i>") in cui collocare altri file (php, immagini o javascript), specificando la cartella aggiuntiva nel file mystring.xml.<br />
<br />
<h2>Il cuore del Plugin mystring.php</h2>Nel file mystring.php inseriremo il codice che verrà eseguito all'evento "onPrepareContent", ossia prima che il contenuto di un articolo (o di un modulo) venga stampato. Questo ci permetterà di trovare eventuali occorrenze della stringa {mystring} e di sostiturila con del codice html.<br />
<br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><?php</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">// impediamo l'accesso diretto allo script</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">defined( '_JEXEC' ) or die( 'Restricted access' );</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">jimport( 'joomla.plugin.plugin' );<br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">class plgContentMystring extends JPlugin</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">{</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> /**</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * Costruttore</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * Chiamiamo il costruttore della classe genitrice per inizializzare il plugin</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> */</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> function plgContent</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Mystring</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">( &$subject, $params )</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> {</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> parent::__construct( $subject, $params );</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> }<br />
</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> /**</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * MyString prepare content method</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> *</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * Questo metodo viene chiamato da Joomla prima che il contenuto viene visualizzato</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> *</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * @param oggetto contenente l'articolo The article object. Note $article->text is also available</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * @param oggetto contenente i parametri del plugin</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> * @limitstart il numero di pagina, a noi questo non interessa qui</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> */</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> function onPrepareContent( &$article, &$params, $limitstart )</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> {</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> global $mainframe;</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Se il plugin è attivato e se viene trovata la stringa {mystring} all'interno del contenuto</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> if ($this->params->get( 'enabled', 1 ) && strripos($article->text, "{mystring}") !== false) </span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> {</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Recupero il testo da inserire</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $about_text = $this->params->get('about_text', NULL);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Controllo HTML</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> if(intval($this->params->get('htmlentities', NULL)) == 1) $about_text = htmlentities($about_text, ENT_QUOTES);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Recupero il tag selezionato</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $tag = $this->params->get('tag', 'blockquote');</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Recupero la classe css</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $class = $this->params->get('css_class', NULL);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Se la classe è vuota non ho bisogno di inserire l'attributo class</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $output = ($class != '') ? ' class="'. $class .'"' : "" ;</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Inserisco il testo dentro il tag con la relativa classe</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $about_text = '<' . $tag . $output .'>' . $about_text . '';</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Rimuovo eventuale tag inseriti automaticamente dall'editor</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $article->text = str_replace("{mystring}", "{</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">mystring</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">}", $article->text);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> // Effettuo la sostituzione finale</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> $article->text = str_replace("{</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">mystring</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">}", $about_text, $article->text);</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> return true;</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> }</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> else return false;</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> }</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">}</span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">?></span><br />
<br />
Anche se i commenti nel codice sono abbastanza espliciti, è necessario fare delle precisazioni:<br />
per convenzione il nome della classe deve essere: plg + Tipologia plugin (prima lettera maiuscola) + Nome plugin (prima lettera maiuscola), quindi nel nostro caso plgContentMystring.<br />
La prima funzione della classe è il costruttore che per retrocompatibilità con php4 deve avere lo stesso nome della classe. Se avessimo voluto scrivere un plugin non retrocompatibile e quindi disegnato per php 5 (o superiore) avremmo potuto semplicemente utilizzare "__constructor"<br />
In questo caso il costruttore è stato inserito solo come esempio teorico: noterete infatti che non esegue nessuna operazione e può essere cancellato.<br />
Se avessimo voluto effettuare alcune operazioni anche nel caso la stringa {mystring} non fosse stata trovata avremmo potuto inserire le istruzioni nella funzione costruttore ed in quel caso il codice sarebbe stato eseguito ad ogni caricamento della pagina.<br />
Avremmo potuto utilizzare anche un tipo di programmazione procedurale evitando di scrivere una classe, ma dato che gli sviluppatori del framework di Joomla raccomandano di seguire questo paradigma è bene seguire il loro consiglio. Inoltre giocare con questo tipo di codice ci abitua al design strutturato a oggetti di tutte le moderne applicazioni web (e non solo web).<br />
<h2><br />
Il file mystring.xml</h2>Il file mystring.xml è necessario per l'installazione del plugin e per la gestione dei parametri.<br />
<br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><install group="content" type="plugin" version="1.5"></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><name>My String</name></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><author>Autore</author></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><creationdate>....</creationdate></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><authoremail>...</authoremail></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><authorurl>....</authorurl></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><version>1</version></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><description>Visualizza dele informazioni ad ogni occorrenza della stringa {mystring}</description></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><files></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><filename plugin="mystring">mystring.php</filename></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"></files></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"></install></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br />
</span>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-43754574905815568522011-06-11T17:42:00.004+02:002011-06-11T19:26:46.964+02:00Scrivere plugin per Joomla (I parte)<div style="text-align: justify;">E' necessario <b>sviluppare</b> un <b>plugin</b> per <b><a href="http://www.joomla.org/" target="_blank">Joomla</a></b> ogni volta che si vuole cambiare il comportamento di <b>Joomla</b> al verificarsi di un determinato <b>evento</b>: i <b>plugin</b> di <b>Joomla </b>infatti, sono <u>parti di codice che vengono eseguite in un dato momento</u> del caricamento della pagina o <u>ad una determinata azione dell'utente</u>.</div><div style="text-align: justify;">La possibilità di <b>eseguire del codice</b> a seconda che certe condizioni si verifichino o meno, ci da la possibilità di <b>estendere le funzionalità di Joomla </b>con semplicità ed eleganza rendendo il comportamento del nostro sito personalizzabile.</div><br />
<h2>Tipologie di plugin in Joomla</h2><b>Joomla</b> possiede di <i>default </i>un certo numero di tipologie di <b>plugin </b>definite <b>core</b>.<br />
Queste tipologie sono presenti nella cartella /<i>plugins</i>/ di ogni installazione <b>Joomla</b> e sono:<br />
<br />
<ol><li><b>authentication</b>: per estendere l'autenticazione</li>
<li><b>content</b>: per effettuare controlli o inserire funzionalità nei contenuti</li>
<li><b>editors</b>: per realizzare editor</li>
<li><b>editors-xtd</b>: per le estensioni degli editor</li>
<li><b>search</b>: per estendere le funzionalità di ricerca</li>
<li><b>system</b>: per far eseguire codice in vari momenti del caricamento del <i>framework</i></li>
<li><b>user</b>: per estendere le funzionalità degli utenti</li>
<li><b>xmlrpc</b>: per estendere l'interattività con altri servizi web (ad es: Desktop remoti)</li>
</ol><br />
<div style="text-align: justify;">Ogni tipologia di <b>plugin </b>serve quindi a svolgere delle <u>funzionalità diverse</u>: per permettere ciò <b>Joomla </b>mette a disposizione per ogni tipo di <b>plugin </b>una serie di <b>eventi</b>. Gli <b>eventi </b>non sono altro che diversi momenti (appunto eventi) che si susseguono nel caricamento del <b>framework </b>di <b>Joomla</b>. È possibile quindi eseguire del codice in ognuno degli eventi che <b>Joomla </b>mette a disposizione per una determinata tipologia di <b>plugin</b>.</div><div style="text-align: justify;">Prima di vedere i tipi di eventi a disposizione, osserviamo che qualora se ne presentasse la necessità è possibile creare una nuova tipologia di <b>plugin</b>. Solitamente questo accade quando si sviluppa un <b>componente </b>che ha degli eventi personalizzati e che ha bisogno di effettuare certe operazioni all'esecuzione di questi eventi.</div><br />
<h2>Eventi per ogni tipo di plugin</h2>Authentication:<br />
<ol><li>onAuthenticate</li>
</ol>Content:<br />
<ol><li>onPrepareContent</li>
<li>onAfterDisplayTitle</li>
<li>onBeforeDisplayContent</li>
<li>onBeforeContentSave (aggiunto nella versione 1.5.4)</li>
<li>onAfterContentSave (aggiunto nella versione 1.5.4)</li>
</ol>Editors:<br />
<ol><li>onInit</li>
<li>onGetContent</li>
<li>onSetContent</li>
<li>onSave</li>
<li>onDisplay</li>
<li>onGetInsertMethod</li>
</ol>Editors XTD (Extended):<br />
<ol><li>onDisplay</li>
</ol>Search:<br />
<ol><li>onSearch</li>
<li>onSearchAreas</li>
</ol>System:<br />
<ol><li>onAfterInitialise</li>
<li>onAfterRoute</li>
<li>onAfterDispatch</li>
<li>onAfterRender</li>
</ol>User:<br />
<ol><li>onLoginUser</li>
<li>onLoginFailure</li>
<li>onLogoutUser</li>
<li>onLogoutFailure</li>
<li>onBeforeStoreUser</li>
<li>onAfterStoreUser</li>
<li>onBeforeDeleteUser</li>
<li>onAfterDeleteUser</li>
</ol>XML-RPC:<br />
<ol><li>onGetWebServices</li>
</ol><br />
Nel prossimo articolo vedremo il codice di esempio di un <b>plugin</b>.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-61013375185088291562011-05-14T12:29:00.000+02:002011-05-14T12:29:55.746+02:00Il pattern MVC<div style="text-align: justify;"><b><a href="http://it.wikipedia.org/wiki/Model-View-Controller" target="_blank">Il pattern MVC</a></b> è un <b>architectural pattern</b> il cui scopo è quello di <b>separare </b>la rappresentazione del modello di dominio (<b>model</b>) dall'interfaccia utente (<b>view</b>) e dal controllo dell'interazione uomo-macchina (<b>controller</b>). Il <b>pattern MVC</b> è utilizzato ad esempio da <b>Joomla </b>e da molti altri <b>framework </b>come <a href="http://it.wikipedia.org/wiki/Ruby_on_Rails" target="_blank" title="Ruby on Rails">Ruby on Rails</a>, <a href="http://it.wikipedia.org/wiki/Apache_Struts" target="_blank">Apache Struts</a> etc...</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-Iud_xdgl-EE/TcrrmnsmAQI/AAAAAAAAADE/ytnAHAd9rZQ/s1600/Il+pattern+MVC.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Il pattern MVC" border="0" src="http://3.bp.blogspot.com/-Iud_xdgl-EE/TcrrmnsmAQI/AAAAAAAAADE/ytnAHAd9rZQ/s1600/Il+pattern+MVC.png" title="Il pattern MVC" /></a></div><br />
<div style="text-align: justify;">Il <b>pattern MVC</b> è basato sulla suddivisione dei compiti fra i componenti che interpretano i tre ruoli principali:</div><br />
<ol><li style="text-align: justify;">il <b>model </b>fornisce i metodi per accedere ai dati utili dell'applicazione e agli algoritmi del programma.</li>
<li style="text-align: justify;">la <b>view </b>visualizza i dati elaborati dal <b>model </b>e li mostra agli utenti.</li>
<li style="text-align: justify;">il <b>controller</b> riceve i comandi dell'utente (in genere attraverso la <b>view</b>) e li attua modificando lo stato degli altri due componenti: in particolare recupera i dati dal <b>model </b>e li restituisce alla <b>view </b>stessa.</li>
</ol><br />
<div style="text-align: justify;">Questo schema, fra l'altro, implica anche la tradizionale separazione fra la logica applicativa (in questo contesto spesso chiamata "<b>logica di business</b>"), a carico del <b>model</b>, e l'interfaccia utente a carico della <b>view</b>.</div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-25914623022098455462011-04-24T21:05:00.004+02:002011-04-29T12:43:39.114+02:00Promozione siti web<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-oHtVgFkdsfo/TbRrUAWRFbI/AAAAAAAAAC8/r8Wqlr7_73c/s1600/promozione+siti+web.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="promozione siti web" border="0" src="http://4.bp.blogspot.com/-oHtVgFkdsfo/TbRrUAWRFbI/AAAAAAAAAC8/r8Wqlr7_73c/s1600/promozione+siti+web.gif" title="promozione siti web" /></a></div>Nuova <b>promozione siti web</b> valida per tutto l'anno: al prezzo di<br />
<br />
<div style="text-align: center;"><span class="Apple-style-span" style="font-size: large;">300 € </span>(tutto incluso)</div><br />
<div style="text-align: justify;"><b>offriamo siti web</b> completi sviluppati con <b><a href="http://www.joomla.org/" target="_blank">Joomla</a></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-rwrNH3g3t1g/TbRuIssK22I/AAAAAAAAADA/RoIuI_PcmrI/s1600/Joomla+promozione+siti+web.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="joomla promozione siti web" border="0" height="136" src="http://1.bp.blogspot.com/-rwrNH3g3t1g/TbRuIssK22I/AAAAAAAAADA/RoIuI_PcmrI/s200/Joomla+promozione+siti+web.png" title="joomla promozione siti web" width="200" /></a></div></div><br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">La nostra <b>promozione</b> comprende per un <b>sito web</b>:</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"></div><ol><li>registrazione dominio e hosting per un anno </li>
<li>installazione di <a href="http://www.joomla.org/" style="font-weight: bold;" target="_blank">Joomla</a> e configurazione iniziale</li>
<li>creazione di un <b>template</b> personalizzato</li>
<li>home page più pagina dei contatti</li>
<li>pagina descrizione (dell'azienda, associazione, persona ...)</li>
</ol><br />
<div style="text-align: center;"><span class="Apple-style-span" style="font-size: large;">Se sei interessato <a href="mailto:moscapaolo@gmail.com">contattami</a> per il tuo nuovo <b>sito web</b></span><br />
<span class="Apple-style-span" style="font-size: large;"><br />
</span></div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com2tag:blogger.com,1999:blog-5176571438133373975.post-74852053046004566112011-04-22T23:47:00.004+02:002011-04-23T00:05:25.174+02:00Joomla 1.6: creare un modulo (III parte)Nel post <a href="http://paolomosca.blogspot.com/2011/04/joomla-16-creare-un-modulo-ii-parte.html" target="_blank"><b>joomla 1.6: creare un modulo (II parte)</b></a> abbiamo analizzato il codice necessario per <b>creare un modulo</b> in <b>Joomla 1.6</b>: in quest'ultimo articolo vedremo come leggere i <b>parametri</b> dei <b>moduli</b> in modo da rendere più interessanti le nostre applicazioni.<br />
<br />
<h2>Inserire i parametri nel file xml del modulo</h2>Per prima cosa dobbiamo dire a <a href="http://www.joomla.org/" target="_blank"><b>Joomla</b></a> quali <b>parametri</b> vogliamo usare nel nostro <b>modulo</b>: prendiamo il nostro <a href="http://paolomosca.blogspot.com/2011/04/joomla-16-creare-un-modulo-ii-parte.html" target="_blank">mod_ciao_mondo.xml</a> e aggiungiamo subito dopo il tag <i><files</i>> i nostri <b>parametri</b>:<br />
<br />
<span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"><config></span><span style="font-family: "Courier New",Courier,monospace;"> </span></span><br />
<span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"> <fields name="params"></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> <fieldset name="basic"></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> <field</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> name="par1"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> type="text"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> default="ciao mondo"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> label="Scrivi il tuo saluto"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> description="Questo è il saluto che comparirà nel modulo" /></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> <field</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> name="par2"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> type="radio"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> default="1"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> label="Mostra il saluto"</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> description="Decidi se mostrare il saluto oppure no"></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> <option</span><span style="font-family: "Courier New",Courier,monospace;"> value="1">JSHOW</option></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> <option</span><span style="font-family: "Courier New",Courier,monospace;"> value="0">JHIDE</option></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </field></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </fieldset></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </fields></span><span style="font-family: "Courier New",Courier,monospace;"> </span></span><br />
<span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"></config></span></span> <br />
<br />
In pratica abbiamo due <b>parametri</b>: uno conterrà il nostro saluto (<i>par1</i>) e l'altro ci permetterà di disabilitare oppure no il nostro messaggio attraverso una radio button (<i>par2</i>).<b> </b><br />
<b>Joomla</b> mette automaticamente a disposizione nell'entry point del <b>modulo</b> la variabile <i>$params</i> che conterrà i valori che l'utente ha salvato nel backend del sito. Come forse avrete notato, la variabile <i>$params</i> veniva passata come argomento al metodo <i>getSaluto</i> dell'helper proprio per poter utilizzare i parametri del <b>modulo</b>.<br />
<br />
<h2>Passare i parametri all'helper del modulo</h2><span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"><?php</span><span style="font-family: "Courier New",Courier,monospace;"></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">class modCiaoMondoHelper</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">{</span><span style="font-family: "Courier New",Courier,monospace;"></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> public static function getSaluto(&$params)</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> {</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> if ($params->get("par2") == 1)</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> {</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> return $params->get("par1");</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> }</span><span style="font-family: "Courier New",Courier,monospace;"></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> return false;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> }</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">}</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">?></span></span> <br />
<br />
Il codice è molto semplice: se il secondo <b>parametro</b> è uguale a 1 (equivale a selezionare '<i>Mostra</i>' nella radio button) viene usato come saluto il valore del primo <b>parametro</b>.<br />
<br />
<h2>Modifichiamo il template</h2><span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"><?php</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">defined('_JEXEC') or die;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">if ($saluto)</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">{</span><span style="font-family: "Courier New",Courier,monospace;"> </span></span><br />
<span style="font-size: small;"><span style="font-family: "Courier New",Courier,monospace;"> echo $saluto;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">}</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">?></span></span><br />
<br />
Dopo aver generato lo zip dei file siamo pronti ad utilizzare il <b>modulo</b> nel nostro <b>sito web</b>.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com3tag:blogger.com,1999:blog-5176571438133373975.post-58949605474976451902011-04-16T16:44:00.008+02:002011-04-23T00:07:07.758+02:00Joomla 1.6: creare un modulo (II parte)Nell'articolo <a href="http://paolomosca.blogspot.com/2011/04/joomla-16-creare-un-modulo-i-parte.html" target="_blank">joomla 1.6: creare un modulo (I parte)</a> abbiamo indicato quali sono i file necessari per <b>creare un modulo</b> in <b>Joomla 1.6</b> e dove devono essere posizionati. In questo secondo articolo vedremo il codice necessario per realizzare il nostro <b>modulo</b> "Ciao mondo".<br />
<br />
<h2>Punto di entrata del modulo</h2>In mod_ciao_mondo.php si trova l'entry point del <b>modulo</b> ciao_mondo (il nome del file deve essere lo stesso della cartella che lo contiene):<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><?php </span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">// impediamo l'accesso diretto alla pagina</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">defined('_JEXEC') or die;</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">// richiesta del file helper.php</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">require_once dirname(__FILE__).'/helper.php'; </span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">// chiamata al metodo statico getSaluto presente nell'helper</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">$saluto = modCiaoMondoHelper::getSaluto($params);</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">require JModuleHelper::getLayoutPath('mod_ciao_mondo', $params->get('layout', 'default'));</span></div><span style="font-size: small;"><span style="font-family: 'Courier New',Courier,monospace;">?> </span></span><br />
<br />
Il codice è molto semplice ed i commenti dovrebbero essere sufficienti per capirne il funzionamento.<br />
<br />
<h2>Il file helper del modulo</h2>Nel nostro esempio il file helper.php sarà molto semplice:<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><?php</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">// classe del modulo</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">class modCiaoMondoHelper</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">{</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> // metodo statico</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> public static function getSaluto(&$params)</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> {</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> // valore di ritorno</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> return 'Ciao Mondo!';</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> }</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">}</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">?> </span></div><br />
Osserviamo soltanto che il nome della classe è composto da mod + CiaoMondo (nome del <b>modulo</b> senza underscore) + Helper.<br />
<br />
<h2>Template del Modulo</h2>Il file del template "tmpl/default.php" si limita semplicemente a visualizzare il contenuto della variabile $saluto:<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><?php</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">defined('_JEXEC') or die;</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">echo $saluto;</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">?></span></div><br />
Notiamo come la variabile $saluto creata nello script mod_ciao_mondo.php sia automaticamente presente nel template grazie al <b>framework di Joomla</b>.<br />
<br />
<h2>File xml del modulo</h2>Infine vediamo il file mod_ciao_mondo.xml: esso servirà a <b>Joomla</b> per poter caricare correttamente il <b>modulo</b>:<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><extension client="site" method="upgrade" type="module" version="1.6.2"></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <name>Ciao Mondo!</name></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <author>Paolo Mosca</author></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <version>1.6.2</version></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <description>Modulo Ciao Mondo</description></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <files></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <filename module="mod_ciao_mondo">mod_ciao_mondo.php</filename></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <filename>mod_ciao_mondo.xml</filename></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <filename>index.html</filename></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <filename>helper.php</filename></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <filename>tmpl/default.php</filename></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> <filename>tmpl/index.html</filename></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> </files></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"></extension></span></div><br />
Per poter utilizzare questo semplice <b>modulo</b> basterà creare uno zip (mod_ciao_mondo.zip) di tutti i file visti nei due tutorial e utilizzare la procedura di installazione di <b>Joomla</b>.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-8407116336959016932011-04-07T10:59:00.010+02:002011-04-23T00:07:34.934+02:00Joomla 1.6: creare un modulo (I parte)<b><a href="http://www.joomla.org/" target="_blank">Joomla 1.6</a></b> permette di <b>creare un modulo</b> personalizzato in maniera molto semplice sfruttando le caratteristiche del <b>framework</b> stesso: un <b>modulo </b>di <b>Joomla 1.6</b> è infatti essenzialmente composto da un insieme di file posizionati in determinate directory di <b>Joomla</b>.<br />
<br />
<h2>File che compongono un modulo di Joomla 1.6</h2>Come esempio classico creiamo il <b>modulo</b> "ciao mondo"<br />
<ol><li>andate nella directory “<b>modules</b>” di <b>Joomla </b>e create una cartella chiamata “mod_ciao_mondo”</li>
<li>entrate nella directory “mod_ciao_mondo”</li>
<li>create un file denominato “mod_ciao_mondo.php” (il nome deve essere uguale a quello scelto nel punto numero 1)</li>
<li>create un secondo file, denominato “mod_ciao_mondo.xml”</li>
<li>create un file denominato “helper.php”</li>
<li>create la cartella tmpl</li>
<li>create un file di template “tmpl/default.php”</li>
</ol>Per motivi di sicurezza, ricordatevi inoltre di creare in ogni nuova cartella il file index.html con il seguente contenuto: "<html><body></body></html>". <br />
<br />
In conclusione i file principali di ogni <b>modulo</b> di <b>Joomla</b> sono quindi contenuti nella cartella "mod_nome_modulo" e sono ad esempio:<br />
<ol><li>“mod_ciao_mondo.php” (rappresenta l'entry point)</li>
<li>“helper.php”</li>
<li>“tmpl/default.php” (il file del template)</li>
</ol>Nel prossimo articolo <a href="http://paolomosca.blogspot.com/2011/04/joomla-16-creare-un-modulo-ii-parte.html" target="_blank">joomla 1.6: creare un modulo (II parte)</a> andremo ad analizzare in dettaglio il codice di cui è composto ogni singolo file.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-22675685295848115402011-03-22T15:10:00.002+01:002011-04-23T00:08:40.143+02:00Joomla 1.6: le categorie<div style="text-align: justify;">Dopo aver visto il nuovo sistema di gestione dei <a href="http://paolomosca.blogspot.com/2011/02/joomla-16-permessi-e-utenti-acl.html" target="_blank">permessi e degli utenti</a> di <b>Joomla 1.6</b> introduciamo un'altra importante novità: la gestione delle <b>categorie</b>. Mentre in <b>Joomla 1.5</b> eravamo obbligati a legare le <b>categorie</b> alle sezioni non potendo annidare una <b>categoria </b>dentro l'altra, in <b>Joomla 1.6</b> questa limitazione è stata tolta: esistono solo le <b>categorie</b> (non troverete più le sezioni) ed inoltre possiamo formare una gerarchia ad albero profonda quanto vogliamo assegnando ad ogni <b>categoria</b> il proprio padre. Vediamo con un esempio come è possibile nidificare le <b>categorie</b> in <b>Joomla 1.6</b>: andiamo in <b>Contenuti </b>-> <b>Gestione Categorie</b> -> <b>Nuovo</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://lh6.googleusercontent.com/-bWzR0H52Ws4/TYiq37kmZdI/AAAAAAAAAC4/9mHQEPFMC44/s1600/Joomla+1.6+categorie.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Joomla 1.6 categorie" border="0" src="https://lh6.googleusercontent.com/-bWzR0H52Ws4/TYiq37kmZdI/AAAAAAAAAC4/9mHQEPFMC44/s1600/Joomla+1.6+categorie.jpg" title="Joomla 1.6 categorie" /></a></div></div><br />
<div style="text-align: justify;">Come possiamo vedere per ogni <b>categoria </b>abbiamo la possibilità di specificare la <b>categoria </b>padre (Parent): in questa maniera riusciamo a creare la nostra gerarchia ad albero.<br />
Gli articoli che andremo a scrivere verrano legati alla <b>categoria</b> rendendo la gestione dei contenuti più semplice e completa senza dover essere obbligati per forza a creare le sezioni.</div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-5558068560873195712011-03-14T14:51:00.002+01:002011-03-14T15:51:30.546+01:00PHP DEBUG con Eclipse (PDT)Per chi sviluppa in <a href="http://www.php.net/" target="_blank"><b>PHP</b></a> è semplice effettuare il <b>DEBUG</b> delle proprie applicazioni utilizzando <a href="http://www.eclipse.org/" target="_blank"><b>Eclipse</b></a>: in particolare <a href="http://www.eclipse.org/pdt/" target="_blank"><b>Eclipse PHP (PDT)</b></a> è l'<b>IDE </b>che fa per voi. Vediamo come dotarsi velocemente di un <b>ambiente professionale</b> per creare le vostre applicazioni in <b>PHP</b> utilizzando un PC che abbia come sistema operativo Windows 7:<br />
<br />
<h2>Installiamo XAMPP</h2><div style="text-align: justify;">Per prima cosa ci dobbiamo dotare di un <b>web server</b>, dell'interprete <b>PHP</b> e di tutto il necessario per sviluppare applicazioni web dinamiche: a questo provvede <a href="http://www.apachefriends.org/it/xampp-windows.html" target="_blank"><b>XAMPP</b></a>, che ci fa risparmiare un bel pò di lavoro. Chiaramente questa soluzione deve essere utilizzata solo per gli <b>ambienti di sviluppo</b> (mai in produzione). </div><div style="text-align: justify;">Un problema che può sorgere in questa fase riguarda la porta utilizzata da <b>Apache</b>. Di default è la 80 ma ci potrebbero essere altri programmi che la utilizzano (ad esempio <b>Skype</b>) rendendo impossibile l'avvio del <b>web server</b>. Se così fosse fermiamo XAMPP e apriamo con un editor di testo il file: </div><div style="text-align: left;"><code>[Cartella dove è stato installato XAMPP]/apache/conf/httpd.conf</code></div><div style="text-align: justify;">Cerchiamo la proprietà <b>Listen</b> e mettiamo un numero di porta diverso (ad esempio 81). Ricordiamoci di sostituire il numero della porta anche sulla proprietà <b>ServerName</b>.</div><br />
<h2>Attivare XDEBUG</h2><div style="text-align: justify;">Per effettuare il <b>DEBUG</b> delle nostre applicazioni <b>PHP</b> utilizzeremo la libreria <a href="http://www.xdebug.org/download.php" target="_blank"><b>Xdebug</b></a>. Andate a verificare che nel seguente percorso:</div><div style="text-align: justify;"><code>[Cartella dove è stato installato XAMPP]/php/ext/</code></div><div style="text-align: justify;">sia presente il file <i>php_xdebug.dll</i>. Se non trovate questa dll andate nella pagina di download di <a href="http://www.xdebug.org/download.php" target="_blank"><b>Xdebug</b></a> e scegliete il link corretto a seconda della vostra versione di <b>PHP </b>(per saperlo visualizzate il phpinfo). Una volta completato il download mettete la dll che avete scaricato nel percorso in questione.</div><div style="text-align: justify;">Adesso apriamo con un editor di testo il seguente file:</div><div style="text-align: justify;"><code>[Cartella dove è stato installato XAMPP]/php/php.ini</code></div><div style="text-align: justify;">Per prima cosa cerchiamo la proprietà <i>zend_extension </i>e rimuoviamo il punto e virgola (commento). Controlliamo poi che il percorso specificato punti proprio alla dll di cui parlavo sopra. Togliamo il commento alle seguenti proprietà e impostiamole come segue:</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><code>xdebug.remote_enable=On</code></div><div style="text-align: justify;"><code>xdebug.remote_host="localhost"</code></div><div style="text-align: justify;"><code>xdebug.remote_port=9000</code></div><div style="text-align: justify;"><code>xdebug.remote_handler="dbgp"</code></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Riavviamo <b>XAMPP </b>e <b>Apache </b>e verifichiamo dal phpinfo() che <b>Xdebug </b>sia correttamente abilitato.</div><br />
<h2>Eclipse e il DEBUG delle applicazioni in PHP</h2><div style="text-align: justify;">Scarichiamo la versione di <b>Eclipse </b>ottimizzata per <b>PHP</b>: <a href="http://www.eclipse.org/pdt/downloads/" target="_blank"><b>PDT</b></a>. Facciamo il download del file <i>All-In-One Windows 32-bit</i>. Dopo aver lanciato <b>Eclipse</b> andiamo in window -> preferences -> PHP -> PHP Executables. Facciamo add (aggiungi)</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://lh6.googleusercontent.com/-C8EA6Qf0AGk/TX4WkCCrNLI/AAAAAAAAACw/-m8Swjf472M/s1600/php_debug_eclipse_pdt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="php debug eclipse pdt" border="0" src="https://lh6.googleusercontent.com/-C8EA6Qf0AGk/TX4WkCCrNLI/AAAAAAAAACw/-m8Swjf472M/s1600/php_debug_eclipse_pdt.jpg" title="php debug eclipse pdt" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: justify;">Nel name mettiamo PHP, nell'executable path mettiamo il percorso del file <i>php-cgi.exe</i> presente dentro la cartella php che si trova nella cartella di installazione di XAMPP. Lo stesso discorso per il file <i>php.ini</i>. Come debugger scegliamo XDebug. Vedi sopra per un esempio.</div><div style="text-align: justify;">Salviamo e andiamo infine in window -> preferences -> PHP -> Debug e impostiamo i valori come nella immagine sottostante dove andiamo a impostare il debugger e l'eseguibile <b>PHP</b>.</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://lh5.googleusercontent.com/-dKK3yLwRCys/TX4aSaj1aEI/AAAAAAAAAC0/Su9wl3zPlwA/s1600/php+debug+eclipse.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="php debug eclipse" border="0" src="https://lh5.googleusercontent.com/-dKK3yLwRCys/TX4aSaj1aEI/AAAAAAAAAC0/Su9wl3zPlwA/s1600/php+debug+eclipse.jpg" title="php debug eclipse" /></a></div><br />
A questo punto possiamo effettuare il <b>Debug </b>delle nostre applicazioni <b>PHP </b>utilizzando <b>eclipse</b>.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com3tag:blogger.com,1999:blog-5176571438133373975.post-20517188885062162112011-03-07T14:04:00.001+01:002011-03-07T14:18:34.586+01:00jQuery Ajax: utilizzare il framework jQuery per le richieste Ajax<b><a href="http://jquery.com/" target="_blank">jQuery</a></b> consente di effettuare richieste <b>Ajax</b> in maniera molto semplice: vediamo con un esempio come sfruttare la potenza del <b>framework jQuery</b> per effettuare chiamate <b>Ajax</b>: <br />
<br />
<h2>Scarichiamo la libreria <b>jQuery</b></h2>Andiamo nel sito ufficiale del porgetto e facciamo il download della versione Minified. A questo punto includiamola nel nostro script lato client<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><script type="text/javascript" src="jquery-1.5.1.min.js"></script></span></div><br />
<h2>Prepariamo lo script lato server (esempio in PHP)</h2><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><?php</span></div><div style="font-family: "Courier New",Courier,monospace;"><br />
</div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> (int)$id = $_GET["id"];</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> if ($id==1) echo "Rosso";</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> if ($id==2) echo "Giallo";</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> if ($id==3) echo "Verde";</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> if ($id!=1 && $id!=2 && $id!=3) </span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> echo "id non valido!";</span></div><div style="font-family: "Courier New",Courier,monospace;"><br />
</div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">?></span></div><br />
Salviamo il file con il nome <b>test_ajax.php</b><br />
<br />
<h2>jQuery Ajax</h2>Nel nostro script lato client avremo:<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><script type="text/javascript"></span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> $.ajax({</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> type: "GET",</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> url: "test_ajax.php",</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> data: "id=1",</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> success: function(response){</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> $("#output").html(response);</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> }</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"> });</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"></script></span></div><br />
Il valore dell'id passato allo script <b>PHP </b>si trova in <i>data</i>. La risposta testuale fornita dal file <b>PHP </b>è contenuta nel parametro <i>response </i>e la visualizziamo nel div <i>output</i> tramite la riga:<br />
<div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;"><br />
</span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-size: small;">$("#output").html(response);</span></div><br />
Nel nostro esempio otteremo ovviamente come risposta "Rosso". Modificando il valore dell'id in <i>data</i> avremo le altre risposte.<br />
Chiaramente sarebbe più utile passare il valore dell'id tramite un form o altro ma per far capire il funzionamento di base questo non era necessario. Quello che risulta evidente è la semplicità con cui si possono effettuare chiamate <b>ajax</b> attraverso <b>jQuery</b> e le potenzialità di questo <b>framework</b>.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-9540301373017613232011-03-04T10:31:00.003+01:002011-04-23T00:09:04.822+02:00Joomla 1.6: gestione permessi<div style="text-align: justify;">Nel precedente post <a href="http://paolomosca.blogspot.com/2011/02/joomla-16-permessi-e-utenti-acl.html" target="_blank">Joomla 1.6: permessi e utenti</a> abbiamo introdotto la<b> gestione dei permessi (ACL)</b> presenti nel nuovo core di <b>Joomla 1.6</b> rimandando ad un successivo articolo per un esempio concreto. Supponiamo quindi di avere la necessità di applicare dei <b>permessi</b> diversi a seconda del tipo di <b>utente</b> che effettua il login al nostro <b>sito web</b>.</div><br />
<h2>Esempio di gestione dei permessi</h2><div style="text-align: justify;">Nel nostro sito aziendale vogliamo che ci siano tre tipi di <b>utenti</b>:</div><ol style="text-align: justify;"><li>Utente normale</li>
<li>Cliente</li>
<li>Cliente affezionato</li>
</ol><div style="text-align: justify;">In pratica vogliamo che i clienti, oltre ai contenuti degli utenti normali, possano visualizzare degli articoli particolari; inoltre vogliamo premiare i clienti affezionati (quelli che non ci lasceranno mai) con dei contenuti pensati esclusivamente per loro. Chiaramente i clienti affezionati potranno vedere anche quello che vedono gli utenti normali e i clienti.</div><div style="text-align: justify;">Con <b>la gestione dei permessi</b> di <b>Joomla 1.6</b> è molto semplice soddisfare questa esigenza. Vediamo come:</div><br />
<h2>Creare i gruppi</h2>Per creare un gruppo, accediamo nel back end del nostro sito in <b>Joomla 1.6</b>. Nel menù superiore andiamo su Utenti - Aggiungi nuovo gruppo.<br />
<ol><li>Nel campo Titolo Gruppo inseriamo <b>Gruppo Clienti</b></li>
<li>Nel campo Gruppo Principale scegliamo <b>Registered</b>. I gruppi Registered e Clienti avranno le stesse autorizzazioni (cioè, potranno accedere al <b>front end</b> del sito). I Clienti saranno un sotto gruppo degli utenti Registered.</li>
<li>Clicchiamo su <b>Salva e Nuovo</b> in alto a destra per salvare il gruppo Clienti e creare un nuovo gruppo.</li>
<li>Inseriamo <b>Gruppo Clienti affezionati</b> nel campo Titolo Gruppo.</li>
<li>Nel campo Gruppo Principale scegliamo <b>Registered</b>. In questo modo Clienti e Clienti affezionati avranno lo stesso livello di accesso.</li>
<li>Clicchiamo su <b>Salva e Chiudi</b> per tornare nella schermata User Manager: Gruppi.</li>
</ol>Notiamo che il gruppo <b>public </b>è già esistente di default.<br />
<br />
<h2>Assegnare i permessi di base</h2><div style="text-align: justify;">I gruppi Clienti e Clienti affezionati, hanno ereditato i <b>permessi</b> di base del Gruppo padre. Il gruppo Registered ha infatti impostato per default l'autorizzazione per accedere al front end del sito, quindi, in questo caso, non abbiamo bisogno di assegnare altri permessi ai gruppi.</div><div style="text-align: justify;">Notiamo che stiamo parlando solo dei contenuti che possono o non possono essere visti e non abbiamo parlato di modifica, creazione e gestione dei contenuti: per questo motivo abbiamo scelto come gruppo padre il gruppo Registered che ha come <b>permesso</b> solo il <b>Site Login</b> mentre tutti gli altri sono disabilitati.</div><br />
<h2>Creare utenti e assegnarli ai gruppi</h2>Ora che abbiamo creato i gruppi e assegnato i <b>permessi di base</b> andiamo su Utenti -> Aggiungi nuovo utente e cominciamo ad inserire i dati dei nostri clienti. Scegliamo ovviamente come gruppo quello relativo ai clienti. Ripetiamo la stessa operazione per i Clienti affezionati.<br />
<br />
<h2>Creare i livelli di accesso<br />
</h2><div style="text-align: justify;">Ora che abbiamo gli utenti, i <b>permessi di base</b> e i gruppi, non ci resta che creare due livelli di accesso, uno per i clienti e uno per i clienti affezionati.</div><div style="text-align: justify;">Andiamo su Utenti - Aggiungi Nuovo Livello di Accesso</div><div style="text-align: justify;">Nel campo Titolo del Livello, inseriamo Accesso Clienti affezionati. Selezioniamo la casella vicino al Gruppo Clienti affezionati. <u>In questo modo solo il gruppo selezionato potrà vedere i contenuti del Gruppo Clienti affezionati</u>.</div><div style="text-align: justify;">Clicchiamo su Salva e Nuovo, e inseriamo Accesso Clienti come Titolo Livello e selezioniamo le caselle Gruppo Clienti e Gruppo Clienti affezionati. <u>Ciò consentirà ai Clienti affezionati di visualizzare entrambi i contenuti</u>.</div><div style="text-align: justify;">Ricordiamo che quando creiamo un nuovo livello di accesso specifichiamo quali gruppi possono vedere i contenuti associati a quel livello.</div><br />
<h2>Inserire i contenuti</h2><div style="text-align: justify;">Creiamo le categorie una per i "clienti" ed un'altra per i "clienti affezionati" impostando i relativi livelli di accesso.</div><div style="text-align: justify;">Prepariamo un articolo per i clienti affezionati nella categoria clienti affezionati. Per creare un nuovo articolo andiamo su Contenuto - Nuovo Articolo.</div><div style="text-align: justify;">Compiliamo i campi in questo modo:</div><ul><li>Titolo: Questo articolo è per i Clienti affezionati</li>
<li>Categoria: Categoria clienti affezionati</li>
<li>Stato: Pubblicato</li>
<li>Accesso: Accesso clienti affezionati</li>
<li>Testo Articolo: inserire un testo fittizio.</li>
</ul>Clicchiamo su Salva e Nuovo e ripetiamo l'operazione per i clienti:<br />
<ul><li>Titolo: Questo articolo è per i Clienti</li>
<li>Categoria: Categoria clienti</li>
<li>Stato: Pubblicato</li>
<li>Accesso: Accesso clienti</li>
<li>Testo Articolo: inserire un testo fittizio.</li>
</ul><div style="text-align: justify;">Clicchiamo su Salva e Chiudi appena finito.</div><div style="text-align: justify;">Organizziamo le voci di menù. Nel menù principale (Menù - Menù Principale), aggiungiamo due voci.</div><div style="text-align: justify;">Per creare il collegamento, clicchiamo su Nuovo (in alto a destra), scegliamo Lista Categorie come tipo di menù e inseriamo le informazioni:</div><ul><li>Titolo: Informazioni Clienti affezionati</li>
<li>Tipo di menù: clicchiamo su Selezione, quindi Lista Categoria</li>
<li>Stato: Pubblicato</li>
<li>Accesso: Accesso clienti affezionati</li>
<li>Scegli una Categoria: Categoria clienti affezionati</li>
</ul>Clicchiamo su Salva e Nuovo e ripetiamo il procedimento per i clienti:<br />
<ul><li>Titolo: Informazioni Clienti</li>
<li>Tipo di menù: clicchiamo su Selezione, quindi Lista Categoria</li>
<li>Accesso: Accesso clienti</li>
<li>Scegli una Categoria: Categoria clienti</li>
</ul><div style="text-align: justify;">Clicchiamo su Salva e Chiudi. Adesso possiamo testare il nostro sistema andando ad usare le username e password inserite quando abbiamo creato i nostri <b>utenti</b>. Se entriamo come cliente affezionato dovremmo vedere due collegamenti nel menù principale, "Informazioni Clienti" e "Informazioni Clienti affezionati" mentre se entriamo con un username associato al gruppo clienti dovremmo vedere solo il collegamento "Informazioni Clienti".</div>Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0tag:blogger.com,1999:blog-5176571438133373975.post-59428579233995401612011-02-28T14:09:00.009+01:002011-04-23T00:09:28.166+02:00Joomla 1.6: permessi e utenti (ACL)Fra le novità più importanti di <b><a href="http://www.joomla.org/" target="_blank">Joomla 1.6</a> </b>abbiamo la <b>nuova gestione dei permessi e degli utenti</b>, in gergo tecnico <b>ACL (Access Control Levels)</b>; in pratica in <b>Joomla</b> è possibile dare <b>permessi</b> per leggere, creare, modificare e cancellare determinate pagine a <b>utenti o gruppi di utenti</b>, a seconda del ruolo che essi hanno all'interno del <b>sito web</b>.<br />
<br />
<h2>ACL in Joomla 1.6: Panoramica</h2><div style="text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://lh5.googleusercontent.com/-DDyLcgaS7-c/TWuJ870G8qI/AAAAAAAAACo/VRt_LMOLmgc/s1600/Joomla+1.6+permessi+e+utenti+ACL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Joomla 1.6: permessi e utenti ACL" border="0" height="320" src="https://lh5.googleusercontent.com/-DDyLcgaS7-c/TWuJ870G8qI/AAAAAAAAACo/VRt_LMOLmgc/s320/Joomla+1.6+permessi+e+utenti+ACL.png" title="Joomla 1.6: permessi e utenti ACL" width="262" /></a></div></div><h2><b>Utenti</b></h2><div style="text-align: left;">Lo User rappresenta evidentemente <b>l'utente</b> del sito web. Notiamo che <b> un utente</b> non deve essere necessariamente registrato in quanto potrebbe essere un <b>utente pubblico</b> (semplice navigatore). Ogni utente può essere assegnato a uno o più <b>gruppi</b>.<u><br />
</u></div><br />
<h2><b>Permessi di base</b></h2><b>I permessi di base </b>rappresentano le operazioni che possono essere effettuate e<b> sono assegnati al gruppo, non ai singoli utenti</b>. (Se volete assegnarli a un singolo utente, dovrete creare un gruppo per quel determinato utente).<br />
Le autorizzazioni di base includono:<br />
<ul><li><b>Login al sito</b>: la possibilità di accedere al front end del sito.</li>
<li><b>Admin login</b>: la possibilità di accedere al back end del sito.</li>
<li><b>Admin</b>: privilegi amministrativi, come la possibilità di cambiare la configurazione globale.</li>
<li><b>Gestione</b>: la possibilità di cambiare le impostazioni delle estensioni.</li>
<li><b>Creare</b>: la possibilità di creare un nuovo contenuto.</li>
<li><b>Cancellare</b>: la possibilità di eliminare un contenuto.</li>
<li><b>Modifica</b>: la possibilità di modificare tutti i contenuti esistenti.</li>
<li><b>Modifica stato</b>: la possibilità di cambiare stato tra pubblicato, non pubblicato, cestino.</li>
</ul>Le autorizzazioni di base si impostano da <b>Configurazione Globale</b> cliccando nella tabella Permessi.<br />
<br />
<h2><b>Gruppi</b></h2><b>Un gruppo è un insieme di utenti</b> che hanno gli stessi <b>permessi</b>. Prendendo per esempio i gruppi di Joomla 1.5, un utente del gruppo publisher si può loggare nel front end del sito, creare nuovi articoli, modificare quelli già esistenti, renderli pubblici o annullare la pubblicazione. Tutti gli utenti del gruppo publisher hanno gli stessi permessi.<br />
In <b>Joomla 1.6, un utente può essere assegnato a più gruppi</b>, per esempio nel gruppo publisher e nel gruppo administrator.<br />
Ogni gruppo può avere dei sotto-gruppi che a loro volta si possono suddividere ancora andando a creare una gerarchia ad albero ben precisa. In pratica ogni gruppo ha il suo padre ad eccezione del Gruppo <b>Public</b> che è il livello più generale da cui discendono tutti gli altri.<br />
E' possibile assegnare le autorizzazioni di base ai gruppi creati. Osserviamo che le autorizzazioni di base vengono <b>ereditate</b> tra i gruppi nel senso che i figli avranno di default i permessi dei gruppi padri. Chiaramente sarà possibile modificare il comportamento andando in Configurazione Globale -> Permessi. Notiamo però che non potrete ad esempio attivare un permesso che è stato espressamente disabilitato nel gruppo padre perchè questo andrebbe contro la relazione di dipendenza creata.<br />
<b>Un utente non registrato sul sito viene considerato appartenente al gruppo Public </b>che avrà i permessi più leggeri.<br />
Il gruppo Public e il gruppo Registered non possono essere eliminati al contrario di tutti gli altri gruppi. (Comunque, vi consiglio di tenerli, perchè danno un buon modello su come funziona l'ereditarietà delle autorizzazioni).<br />
<br />
<h2><b>Livelli d'accesso</b></h2>I livelli d'accesso sono relativi a che cosa uno o più gruppi di utenti possono vedere, nel front end del sito web. In sostanza, sono le <b>autorizzazioni di lettura sul front end del sito</b>.<br />
Storicamente ci sono stati tre livelli di accesso: public (tutti possono vedere i contenuti), registered (si deve accedere sul sito per vedere i contenuti), special (bisogna avere un livello author o superiore per vedere il contenuto).<br />
Questi livelli di accesso sono ancora presenti in Joomla 1.6 come default, ma si possono creare dei livelli d'accesso personalizzati.<br />
<b>I livelli di accesso non ereditano i permessi</b>. Se si imposta un articolo visibile solo dai publishers, anche i super admin non potranno vederlo. (Comunque, con i permessi di super admin, si potrà modificare l'articolo dal back end).<br />
<br />
In un prossimo articolo cercheremo di mettere in pratica questi concetti in un esempio reale.Paolo Moscahttp://www.blogger.com/profile/17911845098852389118noreply@blogger.com0