<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
<title>RSS Categoria: OpenSource - davidonzo's blog :)</title>
<link>http://www.davidonzo.com/</link>
<description>RSS Categoria: OpenSource - davidonzo's blog :)</description>
<language>IT-it</language>
<generator>davidonzo coding</generator>
<pubDate>Sat, 17 May 2008 10:14:28 +0100</pubDate>
<ttl>60</ttl>
<item>
<title>Riflesso 2.0 con The Gimp</title>
<link>http://www.davidonzo.com/post/819/riflesso-20-con-the-gimp/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/819/riflesso-20-con-the-gimp/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/819/how-to-make-reflection-using-the-gimp/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p><img width="150" height="150" align="left" src="http://www.davidonzo.com/public/image/gimpreflection/gimpreflection.jpg" alt="Gimp Reflection at davidonzo.com" />Adorate l'effetto riflesso stile 2.0 che tanto si vede in giro? Qualcuno vi ha detto che serve il costosissimo photoshop per ottenere un risultato del genere? Niente di pi&ugrave; falso! Basta il potentissimo quanto gratuito <a href="http://www.gimp.org/" target="_blank">The Gimp</a> per ottenere lo stesso risultato ad un costo sostanzialmente pi&ugrave; contenuto.</p>
<p>&nbsp;</p>
<h3>Ecco come procedere.</h3>
<p>Create una nuova immagine applicando lo sfondo che preferite. Incollate su questa l'elemento che volete riflettere, ma createlo come nuovo livello, o se preferite usate lo strumento testo per scrivere la frase desiderata. Ogni nuovo elemento di testo, per Gimp &egrave; un nuovo livello.</p>
<p>&nbsp;</p>
<p>Dal menu finestre, non dimenticate di visualizzare quella dei livelli, se non si apre in automatico all'avvio di The Gimp.</p>
<p>&nbsp;</p>
<p>Selezionate il livello target e cliccate su &quot;Copia Livello&quot; <img width="40" height="28" align="absmiddle" src="http://www.davidonzo.com/public/image/gimpreflection/copialivello.jpg" alt="Copia livello at davidonzo.com" />. Selezionate il livello copiato (rinominatelo se volete facilitare le cose) e andare sul menu Livello &gt;&gt; Trasforma &gt;&gt; Rifletti Verticalmente.</p>
<p>&nbsp;</p>
<p align="center"><img width="490" height="313" src="http://www.davidonzo.com/public/image/gimpreflection/riflettilivello.jpg" alt="rifletti at davidonzo.com" /></p>
<p>&nbsp;</p>
<p>Usare lo strumento &quot;Sposta&quot; e far si che la base alta del livello trasformato sia tangente alla parte bassa del livello padre. Come nell'esempio sotto:</p>
<p>&nbsp;</p>
<p align="center"><img width="150" height="150" src="http://www.davidonzo.com/public/image/gimpreflection/livelli.jpg" alt="livelli at davidonzo.com" /></p>
<p>A questo punto, avendo cura di tener selezionato il livello trasformato, applicate a questo una nuova maschera. Tipologia della maschera: Bianco (totale opacit&agrave;).</p>
<p>&nbsp;</p>
<p align="center"><img width="331" height="333" src="http://www.davidonzo.com/public/image/gimpreflection/mascheradilivello.jpg" alt="maschera di livello at davidonzo.com" /></p>
<p>&nbsp;</p>
<p>Selezionate come colori principali della tavolozza:</p>
<ul>
    <li>Il nero come colore di primo piano (#000000)</li>
    <li>Il bianco come colore di sfondo (#ffffff)</li>
</ul>
<p>Selezionate lo strumento &quot;Gradiente&quot; <img width="23" height="22" align="absmiddle" src="http://www.davidonzo.com/public/image/gimpreflection/gradiente.jpg" alt="gradiente at davidonzo.com" />ed applicatelo sul livello con un movimento <strong>del mouse dal basso verso l'alto</strong>.</p>
<p>&nbsp;</p>
<p>Fate diverse prove, fino a trovare l'ottimo desiderato. Il risultato lo vedete all'inizio di questo post.</p>
<p>&nbsp;</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/819/riflesso-20-con-the-gimp/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-05-14 20:38:25</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/819/riflesso-20-con-the-gimp/</guid>
</item>
<item>
<title>[WordPress] Plugin MyFeed</title>
<link>http://www.davidonzo.com/post/816/wordpress-plugin-myfeed/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/816/wordpress-plugin-myfeed/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/816/wordpress-myfeed-plugin/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p><img width="150" height="150" align="left" alt="WordPress Plugin MyFeed at davidonzo.com" src="http://www.davidonzo.com/public/image/loghi/wordpress-logo.png" />Mi &egrave; stato chiesto, l'ho fatto ed ora &egrave; disponibile per tutti voi. MyFeed &egrave; un plugin per <a target="_blank" href="http://wordpress.org">WordPress</a> che vi permette di personalizzare il contenuto del vostro feed.</p>
<p>&nbsp;</p>
<h3>Cosa si pu&ograve; fare?</h3>
<p>- Scegliere il numero di paragrafi da visualizzare nel contenuto del feed. Per cui, se non volete usare il tag MORE, non volete visualizzare l'excerpt nel feed e nello stesso tempo volete distribuire il feed NON completo, potete decidere quanto post visualizzare senza perdere la formattazione data dall'uso dell'excerpt nel feed.</p>
<p>&nbsp;</p>
<p>- Scegliere un testo come ancora per il link al post che verr&agrave; visualizzato alla fine del content del post.</p>
<p>&nbsp;</p>
<p>- Scegliere un testo arbitrario che si visualizzer&agrave; all'inizio di ogni post nel feed.</p>
<p>&nbsp;</p>
<p>- Scegliere un testo arbitrario che si visualizzer&agrave; alla fine di ogni post nel feed.</p>
<p>&nbsp;</p>
<p>Queste ultime due opzioni sono utili per promuovere attivit&agrave; correlate nel feed. Inserire advertising. I campi supportano bene html, per cui oltre al testo potrete inserire immagini e tutto quanto &egrave; supportato in tal senso.</p>
<p>&nbsp;</p>
<h3>Come si installa?</h3>
<p><a target="_blank" href="http://www.davidonzo.com/public/file/myfeed.zip"><strong>Scaricate l'archivio compresso</strong></a>, decompattatelo e copiate il file myfeed.php nella directory wp-content/plugins. Aprite il pannello di controllo del blog, attivate il plugin con la solita procedura e configuratelo adeguatamente.</p>
<p>&nbsp;</p>
<h3>Nota Bene</h3>
<p>Il plugin ha un'opzione di attivazione / disattivazione interna ed indipendente dall'attivazione data nel pannello di gestione dei plugin di WP.</p>
<p>&nbsp;</p>
<p>Ogni opzione &egrave; totalmente indipendente dalle altre, in modo da offrire la maggiore flessibilit&agrave; all'utente.</p>
<p>&nbsp;</p>
<p>Non so quanto possa essere utile, ma se serve &egrave; vostro e ricordate che il plugin &egrave; distribuito sotto licenza <a target="_blank" href="http://www.gnu.org/licenses/lgpl.html">GNU/LGPL</a>.</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/816/wordpress-plugin-myfeed/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-05-12 00:34:39</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/816/wordpress-plugin-myfeed/</guid>
</item>
<item>
<title>[JavaScript] Un costruttore facilita la vita</title>
<link>http://www.davidonzo.com/post/815/javascript-un-costruttore-facilita-la-vita/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/815/javascript-un-costruttore-facilita-la-vita/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/815/javascript-a-constructor-make-it-easy/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p>Capita spesso di usare JavaScript per eseguire funzioni routinarie e contemporanee nella stessa pagina. A volte tali operazioni sono rese difficili da fatto che le funzioni, scritte nel loro modo regolare, possono essere istanziate una sola volta.</p>
<p>&nbsp;</p>
<p>Per evitare questo limite naturale - che non &egrave; del linguaggio di programmazione, ma della tipologia di scrittura adottata dal programmatore - si rende spesso necessario costruire un oggetto tramite il quale istanziare una sessione che potr&agrave; chiamare simultaneamente la stessa funzione senza intercorrere in conflitti con variabili esistenti.</p>
<p>&nbsp;</p>
<p>Di fatto andremo a definire le funzioni che utilizzeremo per arrivare al nostro risultato all'interno di un oggetto, che poi verr&agrave; evocato con una propria istanza. Di un oggetto possiamo creare pi&ugrave; istanze, ed ogni istanza pu&ograve; richiamare autonomamente ogni metodo dell'oggetto.</p>
<p>&nbsp;</p>
<p>Facciamo un esempio pratico. Un semplice innerHTML.</p>
<p>&nbsp;</p>
<p><span class="Code">function showText('text', 'id'){<br />
&nbsp; this.text = text;<br />
&nbsp; this.id&nbsp;&nbsp; = id;<br />
&nbsp; <br />
&nbsp; this.g = function(){<br />
&nbsp;&nbsp;&nbsp; return document.getElementById(this.id);<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; this.show = function(){<br />
&nbsp;&nbsp;&nbsp; this.g.innerHTML = this.text;<br />
&nbsp; }<br />
}<br />
<br />
first = new showText('Hello World!','myId');<br />
first.show();<br />
<br />
second = new showText('Hello Web!','myOtherId');<br />
second.show();</span></p>
<p>&nbsp;</p>
<p>Sembra poco, ma pu&ograve; risultare molto potente ;)</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/815/javascript-un-costruttore-facilita-la-vita/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-05-09 23:41:21</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/815/javascript-un-costruttore-facilita-la-vita/</guid>
</item>
<item>
<title>Come creare un plugin per WordPress</title>
<link>http://www.davidonzo.com/post/810/come-creare-un-plugin-per-wordpress/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/810/come-creare-un-plugin-per-wordpress/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/810/how-to-create-a-wordpress-plugin/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p><img width="150" height="150" align="left" src="http://www.davidonzo.com/public/image/loghi/wordpress-logo.png" alt="wordpress logo at davidonzo.com" />Oggi vediamo un po' come creare un plugin per <a href="http://wordpress.org" target="_blank">WordPress</a>. Succede spesso che mi si chiede di apportare modifiche e personalizzazioni a plugin esistenti e d'altra parte capita anche ce ci sia gente che usa un plugin molto articolato e pesante per modifiche del tutto banali e che non giustificherebbero un appesantimento del software.</p>
<p>&nbsp;</p>
<p>L'utilizzo dei plugin aiuta ad astrarre determinate funzioni dal core di wordpress e permette di non dover modificare intensivamente il template per attivare / disattivare certe funzionalit&agrave;.</p>
<p>&nbsp;</p>
<p>Sono sempre stato contrario ad un utilizzo intensivo dei plugin. In parole povere, chi si va vantando di usare 50 e oltre plugin per wordpress, secondo me ha semplicemente sbagliato piattaforma :) . Ma proprio per evitare queste eventualit&agrave;, vediamo ora come si progetta un plugin per la pi&ugrave; famosa piattaforma di blogging aiutandoci con un esempio passo passo. Alla fine otterremo un plugin che permette di aggiungere un testo arbitrario all'inizio di ogni post (un plugin inutile, ma con chiaro scopo didattico).</p>
<p>&nbsp;</p>
<h3>Fasi Preliminari</h3>
<p>Come prima cosa, bisogna avere una conoscenza capillare delle funzioni messe a disposizione da WordPress. Per cui leggetevi per bene la <a target="_blank" href="http://codex.wordpress.org/Main_Page">documentazione</a> ed avrete appreso pi&ugrave; della met&agrave; di quello ce c'&egrave; bisogno di sapere.</p>
<p>Altra cosa fondamentale da sapere &egrave; come WordPress decide quali sono i plugin attivi. Le informazioni a tal proposito sono salvate nel database, ed esattamente nella tabella wp_opstions (dove wp_ &egrave; il table prefix) in corrispondenza della option_name = 'active_plugins'.</p>
<p>Tutti i plugin sono contenuti nella directory /wp-content/plugins/.</p>
<p>&nbsp;</p>
<h3>Cominciamo a Scrivere</h3>
<p>Con il nostro editor di testo preferito creiamo un nuovo file, chiamato myplugin.php. Nelle primissime righe del file dobbiamo inserire delle linee di commento che verranno poi lette da wordpress al fine di identificare il plugin come tale e poterne importare le info relative alla versione, descrizione e autore.</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;?php<br />
/*<br />
Plugin Name: Just a test plugin<br />
Plugin URI: http://www.davidonzo.com/<br />
Description: Just a simple plugin to show how wordpress plugins work and can be create.<br />
Author: davidonzo<br />
Version: 0.1<br />
Author URI: http://www.davidonzo.com/<br />
*/</span></p>
<ul>
    <li>Plugin Name: il nome del plugin.</li>
    <li>Plugin URI: il link all'articolo che spiaga il funzionamento del plugin.</li>
    <li>Description: una descrizione breve, scritta tutta su una riga.</li>
    <li>Author: nome dell'autore.</li>
    <li>Version: il numero di versione.</li>
    <li>Author URI: il link dell'autore del plugin.</li>
</ul>
<p>Tutte queste informazioni verranno poi mostrate nella pagina di gestione plugins del pannello di controllo di wordpress.</p>
<p>&nbsp;</p>
<h3>Le funzioni necessarie</h3>
<p>Adesso dobbiamo pensare a cosa ci serve per far funzionare il plugin. Ripeto, stiamo pensando ad un plugin che mostrer&agrave; un testo arbitrario, scelto dall'utente, ad inizio di ogni post. Quindi ci serve un'opzione in cui salveremo la frase da mostrare, ed anche un'opzione per attivare / disattivare la visualizzazione.</p>
<p>&nbsp;</p>
<p>Per semplificarci la vita sceglieremo di usare un solo recordi in cui includeremo le due informazioni necessarie. Le divideremo da simboli arbitrari (nell'esempio <em>%%%</em>) che ci permetteranno un explode sulla stringa.</p>
<p>&nbsp;</p>
<p>A questo punto dobbiamo conoscere la struttura del database di wordpress. Le opzioni dei plugin vengono salvate sempre nella tabella wp_options. Possiamo creare una nuova opzione con la funziona <strong>add_option</strong>. Il valore attribuito verr&agrave; sempre salvato in un campo di tipo longtext.</p>
<p>&nbsp;</p>
<p>In fase di installo aggiungeremo l'opzione necessaria dandogli dei valori di default. Vediamo come.</p>
<p>&nbsp;</p>
<p><span class="Code">function myplugin_install(){<br />
&nbsp; if(get_option('opt_myplugin' == '') || !get_option('opt_myplugin')){<br />
&nbsp;&nbsp;&nbsp; add_option('opt_myplugin', '0%%%Write some text');<br />
&nbsp; }<br />
}<br />
<br />
if (isset($_GET['activate']) &amp;&amp; $_GET['activate'] == 'true') {<br />
&nbsp;&nbsp;&nbsp; myplugin_install();<br />
}</span></p>
<p>&nbsp;</p>
<p>All'attivazione del plugin, se l'opzione opt_myplugin (nome che abbiamo scelto noi di dare) non esiste o se esiste, ma vuota allora viene aggiunta l'opzione al database. Questa funzione viene eseguita al momento dell'installazione del plugin.</p>
<p>Per come &egrave; scritta la funzione di installo, questa si eseguir&agrave; solo alla prima attivazione. Disattivando il plugin infatto le opzioni resteranno inalterate.</p>
<p>&nbsp;</p>
<p>Pensiamo subito alla funzione per leggere le opzioni dal database, e nel nostro caso, estrarre le informazioni sensibili.</p>
<p>&nbsp;</p>
<p><span class="Code">function myplugin_option($opt){<br />
&nbsp; $opt_myplugin = get_option('opt_myplugin');<br />
&nbsp; $opt_myplugin = explode('%%%', $opt_myplugin);<br />
&nbsp; <br />
&nbsp; switch($opt){<br />
&nbsp;&nbsp;&nbsp; case 'active':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $opt_myplugin[0];<br />
&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; case 'text':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $opt_myplugin[1];<br />
&nbsp;&nbsp;&nbsp; break;<br />
&nbsp; }<br />
}</span></p>
<p>&nbsp;</p>
<p>La funzione get_option() fornita da wordpress ci fa estrarre in modo facile i dati dalla tabella wp_options. Tutto il resto &egrave; in funzione della nostra modalit&agrave; di storing delle informazioni. Avremmo anche potuto pensare a due record per gestire separatamente i dati, ma in questo modo risparmiamo spazio di database, facendo fede ad una delle prime frasi scritte nel manuale di mysql: &quot;<em>make your data smaller as possibile</em>&quot;.</p>
<p>&nbsp;</p>
<p>Adesso ci serve una pagina all'interno del pannello di controllo per gestire le opzioni. Per prima cosa aggiungiamo un link alla finestra settings nel pannello di controllo. Anche in questo caso ci aiuta una funzione del core di wordpress.</p>
<p>&nbsp;</p>
<p><span class="Code">function myplugin_config_page(){<br />
&nbsp; if (function_exists('add_options_page')){<br />
&nbsp;&nbsp;&nbsp; add_options_page('MyPlugin Menu Title', <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'MyPlugin Option',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; basename(__FILE__),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'myplugin_config'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />
&nbsp; }<br />
}</span></p>
<p>&nbsp;</p>
<p>La funzione add_options_page necessita di alcune opzioni:</p>
<ul>
    <li>Il titolo della pagina di destinazione.</li>
    <li>L'ancora del link che apparir&agrave; nella pagina dei settings.</li>
    <li>Il livello necessario per accedervi.</li>
    <li>Il file da caricare.</li>
    <li>La funzione, inserita all'interno del file da caricare, da eseguire.</li>
</ul>
<p>Ed ora vediamo la funzione che si occupa di visualizzare il pannello di controllo.</p>
<p>&nbsp;</p>
<p><span class="Code">function myplugin_config(){<br />
&nbsp; $active&nbsp;&nbsp; = (myplugin_option('active') == 1) ? 'checked' : '';<br />
&nbsp; $deactive = (myplugin_option('active') == 0) ? 'checked' : '';<br />
&nbsp; print('&lt;div class=&quot;wrap&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h2&gt;MyPlugin Options Tab&lt;/h2&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form id=&quot;ak_sharethis&quot; name=&quot;myplugin_cnf&quot; action=&quot;'.get_bloginfo('wpurl').'/wp-admin/index.php&quot; method=&quot;post&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;By this page it\'s possibile configure the plugin. Setup the following options to start testing how a wordpress plugin works!&lt;/p&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset class=&quot;options&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;Show some content before any post?&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;radio&quot; name=&quot;c_before_post&quot; value=&quot;1&quot; id=&quot;c_before_post_yes&quot; '.$active.' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for=&quot;c_before_post_yes&quot;&gt;Yes&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;radio&quot; name=&quot;c_before_post&quot; value=&quot;0&quot; id=&quot;c_before_post_no&quot; '.$deactive.' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for=&quot;c_before_post_no&quot;&gt;No&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;Type the contet text to show:&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type=&quot;text&quot; name=&quot;c_text_myplugin&quot; value=&quot;'.myplugin_option('text').'&quot; /&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p class=&quot;submit&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;input type=&quot;submit&quot; name=&quot;myplugin_submit_button&quot; value=&quot;Update Settings&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;/p&gt; <br />
&nbsp;&nbsp;&nbsp; &nbsp; &lt;/form&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;');<br />
}</span></p>
<p>&nbsp;</p>
<p>Ne pi&ugrave; ne meno che tanto html. Un form con cui gestiamo le poche opzioni di questo plugin. Ma non &egrave; tutto. Perch&egrave; se possiamo modificare le opzioni dalla pagina costruita dalla funzione precedente, &egrave; anche necessario avere una funzione che ci permetta di aggiornare le opzioni. Eccola:</p>
<p>&nbsp;</p>
<p><span class="Code">function update_myplugin_settings(){<br />
&nbsp; if($_POST['myplugin_submit_button'] == 'Update Settings'){<br />
&nbsp;&nbsp;&nbsp; $newsetting = $_POST['c_before_post'] . '%%%' . $_POST['c_text_myplugin'];<br />
&nbsp;&nbsp;&nbsp; update_option('opt_myplugin',$newsetting);<br />
&nbsp;&nbsp;&nbsp; header('Location: '.get_bloginfo('wpurl').'/wp-admin/options-general.php?page=myplugin.php&amp;updated=true');&nbsp; <br />
&nbsp; }<br />
}</span></p>
<p>&nbsp;</p>
<p>Si noti l'uso di update_option, che ci permette di aggiornare facilmente una particolare opzione inclusa nella tabella wp_options del database di wordpress.</p>
<p>Per fare eseguire tale funzione usiamo add_action(). Altro strumento messo a disposizione dal core di wordpress.</p>
<p>&nbsp;</p>
<p><span class="Code">add_action('init', 'update_myplugin_settings', 9999);</span></p>
<p>&nbsp;</p>
<p>Aggiunta in questo modo, con il tag init ed una priorit&agrave; (9999) molto alta, l'azione verr&agrave; eseguita ad ogni caricamento del plugin. Ma questo non vuol dire che ad ogni caricamento del file myplugin.php le opzioni verranno aggiornate. Guardate la funzione update_myplugin_settings(). Invia la query al database solo se riceve i dati in post.</p>
<p>&nbsp;</p>
<p>Ora abbiamo tutto. Pannello di controllo, possibilit&agrave; di aggiornare le opzioni, pagina di configurazione. Ma ci siamo dimenticati di pensare all'output di front end? Ma ovviamente no :)</p>
<p>Questa &egrave; sicuramente la parte pi&ugrave; facile. Si pensi solo ad una funzione che riscriva la variabile $content.</p>
<p>&nbsp;</p>
<p><span class="Code">function add_myplugin_text_to_content($content){<br />
&nbsp; if(myplugin_option('active') == 1){<br />
&nbsp;&nbsp; $content = '&lt;p&gt;'.myplugin_option('text').'&lt;/p&gt;' . $content;<br />
&nbsp; }<br />
&nbsp; return $content;<br />
}<br />
<br />
add_action('the_content', 'add_myplugin_text_to_content');</span></p>
<p>&nbsp;</p>
<p>Facile no? E da ora, tutte le volte che volete aggiungere una riga o un'immagine da qualche parte, non andate a caricare quei pesantissimi plugin che saranno ottimi per chi li usa almeno all'80%, ma sono semplicemente un peso per chi non li sfrutta, ed una tortura per chi naviga i vostri blog.</p>
<p>&nbsp;</p>
<p>Volete scaricare il plugin di esempio? <strong><a target="_blank" href="http://www.davidonzo.com/public/file/myplugin.zip">E qui per voi!</a></strong></p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/810/come-creare-un-plugin-per-wordpress/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-04-27 19:59:07</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/810/come-creare-un-plugin-per-wordpress/</guid>
</item>
<item>
<title>[JavaScript] Leggere le informazioni contenute nei Cookies</title>
<link>http://www.davidonzo.com/post/808/javascript-leggere-le-informazioni-contenute-nei-cookies/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/808/javascript-leggere-le-informazioni-contenute-nei-cookies/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/808/javascript-how-to-read-cookies-informations/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p>Una semplice funzione per leggere il valore di un cookie.</p>
<p>&nbsp;</p>
<p><span class="Code">function CookieValue (offset) {<br />
&nbsp; var stringend = document.cookie.indexOf (&quot;;&quot;, offset);<br />
&nbsp; if (stringend == -1)<br />
&nbsp;&nbsp; stringend = document.cookie.length;<br />
&nbsp; return unescape(document.cookie.substring(offset, stringend)).replace(&quot;+&quot;,&quot; &quot;);<br />
}<br />
<br />
&nbsp; function GetCookie (name) {<br />
&nbsp;&nbsp; var argu = name + &quot;=&quot;;<br />
&nbsp;&nbsp; var alen = arg.length;<br />
&nbsp;&nbsp; var clen = document.cookie.length;<br />
&nbsp;&nbsp; var none = '';<br />
&nbsp;&nbsp; var i = 0;<br />
&nbsp;&nbsp; while (i &lt; clen) {<br />
&nbsp;&nbsp;&nbsp; var a = i + alen;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (document.cookie.substring(i, a) == arg)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CookieValue(a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = document.cookie.indexOf(&quot; &quot;, i) + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i == 0) break;<br />
&nbsp; }<br />
&nbsp;return none;<br />
}</span></p>
<p>&nbsp;</p>
<h3>Come usarla?</h3>
<p>Un esempio &egrave; sempre un buon modo per spiegare le cose. Si immagini di avere un cookie con nome &quot;MyCookie&quot; e valore &quot;MyCookie+Value&quot;.</p>
<p>La funzione:</p>
<p>&nbsp;</p>
<p><span class="Code">GetCookie('MyCookie')</span></p>
<p>&nbsp;</p>
<p>Ritorner&agrave;: &quot;MyCookie Value&quot;.</p>
<p>&nbsp;</p>
<p>Non ho molto tempo per aggiornare il blog in questo periodo. Spero quanto prima di tornare a pieno regime :)</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/808/javascript-leggere-le-informazioni-contenute-nei-cookies/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-04-24 14:51:10</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/808/javascript-leggere-le-informazioni-contenute-nei-cookies/</guid>
</item>
<item>
<title>[JavaScript] Calcolo coordinate del mouse</title>
<link>http://www.davidonzo.com/post/804/javascript-calcolo-coordinate-del-mouse/</link>
<description><![CDATA[<p></p><p>Pu&ograve; risultare utile calcolare le coordinate del mouse rispetto allo screen video dell'utente. Le utilizzazioni di tali dati possono essere innumerevoli. Una &egrave; quella di poter simulare via JavaScript l'effetto <code>title</code> con elementi di stile molto pi&ugrave; particolari, che magari segua il mouse durante il suo <code>move</code> sull'elemento prescelto.</p>
<p>&nbsp;</p>
<h3>Vediamo come procedere</h3>
<p>Per prima cosa dobbiamo distinguere Internet Explorer dal resto del mondo, quindi creiamo una funzione che ci permetta di avvistare il browser di casa Redmond all'orizzonte.</p>
<p>&nbsp;</p>
<p><span class="Code">function isIE(){<br />
&nbsp; if(document.all){<br />
&nbsp;&nbsp;&nbsp; return true;<br />
&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp; }<br />
}</span></p>
<p>&nbsp;</p>
<p>Dopo di che scriviamo la funzione che ci permette di determinare in valore assoluto le coordinate x:y del mouse.</p>
<p>&nbsp;</p>
<p><span class="Code">
<p>&nbsp;</p>
<p>function getMousePosition(e){<br />
&nbsp;&nbsp; if (isIE()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; var e = window.event;<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; posx = e.clientX;<br />
&nbsp;&nbsp;&nbsp;&nbsp; posy = e.clientY;<br />
}</p>
</span></p>
<p>&nbsp;</p>
<p>Notate il diverso comportamento della funzione nel caso in cui il client utilizzi Internet Explorer. Per calcolare le coordinate del mouse &egrave; necessario usare <code>window.event</code>.</p>
<p>Ma le coordinate del mouse cambiano continuamente al movimento. Quindi dobbiamo fare in modo che la funzione si attivi ogni volta che il mouse si muove. Per far questo basta usare l'evento <code>onmousemove</code>.</p>
<p>All'interno del documento scriveremo quanto segue (preferibilmente nei tag del head):</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;script type=&quot;text/javascript&quot;&gt;<br />
document.onmousemove=getMousePosition<br />
&lt;/script&gt;</span></p>
<p>&nbsp;</p>
<p>Con qualche piccola modifica possiamo <a href="http://www.davidonzo.com/ajaxstudy/mouseposition/mouse.html" target="_blank">ottenere un risultato di questo genere</a>. Aprite il link e passate col mouse sulla pagina. Le coordinate del mouse si aggiorneranno automaticamente :-)</p>
<p>&nbsp;</p>
<p>Ma si pu&ograve; andare oltre, ed applicare la metodologia ad un elemento specifico, fissando a quello output del tutto particolareggiato. <strong><a href="http://www.davidonzo.com/ajaxstudy/mouseposition/" target="_blank">Ecco come simulare un title che segue il mouse quando passa sopra ad un elemento</a></strong>.</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/804/javascript-calcolo-coordinate-del-mouse/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-04-16 15:34:01</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/804/javascript-calcolo-coordinate-del-mouse/</guid>
</item>
<item>
<title>[JavaScript] TextScroller 1.1</title>
<link>http://www.davidonzo.com/post/803/javascript-textscroller-11/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/803/javascript-textscroller-11/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/803/javascript-textscroller-11/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p>Nuova versione di TextScroller. Ho sistemato diversi bug presenti nella versione 1.0 ed implementato qualche improve per facilitarne l'uso. Ora funziona bene anche con Internet Explorer ed il <a href="http://www.davidonzo.com/post/801/ie7-bug-overflowhidden-e-positionrelative/" target="_blank">bug di overflow di cui &egrave; affetto</a>.</p>
<p>&nbsp;</p>
<h3>Nota Importante</h3>
<p>Da questa versione non &egrave; pi&ugrave; necessaria la presenza di due elementi uno dentro l'altro. Baster&agrave; un solo elemento identificato da un id univoco e penser&agrave; lo script a creare automaticamente un elemento child all'interno del quale far scrollare il testo contenuto nel id padre.</p>
<p>&nbsp;</p>
<p>Di conseguenza la gestione dello stile degli elementi, opzionale nella precedente versione, qui &egrave; obbligatoria. Si avr&agrave; un parametro di controllo in meno lato utente.</p>
<p>&nbsp;</p>
<h3>Impostare lo script</h3>
<p>Con il vostro editor di testo preferito aprite il file e modificate le preferenze seguenti:</p>
<p>&nbsp;</p>
<p><span class="Code">&nbsp; var orientamento = '';<br />
&nbsp; var parent = '';<br />
&nbsp; var duration = ; <br />
&nbsp; var h = ;<br />
&nbsp; var w = ;<br />
</span></p>
<h4>&nbsp;</h4>
<h4>var orientamento (array)</h4>
<p>Pu&ograve; assumere i valori seguenti:</p>
<ul>
    <li>TD: scorrimento dall'alto al basso;</li>
    <li>DT: scorrimento dal basso in alto;</li>
    <li>RL: scorrimento da destra a sinistra;</li>
    <li>LR: scorrimento da sinistra a destra;</li>
</ul>
<p>&nbsp;</p>
<h4>var parent (string)</h4>
<p>L'id dell'elemento che contiene il testo da scrollare.</p>
<p>&nbsp;</p>
<h4>var duration (integer)</h4>
<p>Valore di durata in millisencondi di ogni spostamento. Pi&ugrave; basso &egrave; il valore, pi&ugrave; veloce risulter&agrave; l'effetto movimento del testo.</p>
<p>&nbsp;</p>
<h4>var h (integer)</h4>
<p>Fissa l'altezza dell'elemento parent. In questo modo decidete quanto deve essere alto lo scrolling.</p>
<p>&nbsp;</p>
<h4>var w (integer)</h4>
<p>Fissa la larghezza dell'elemento parent. In questo modo decidete quanto deve essere largo lo scrolling.</p>
<p>&nbsp;</p>
<h3>Impostare il codice HTML</h3>
<p>Nei tag del head della pagina in cui volete usare la libreria, inserite:</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;script type=&quot;text/javascript&quot; src=&quot;textScroller.js&quot;&gt;&lt;/script&gt;</span></p>
<p>&nbsp;</p>
<p>Tenendo a mente di dare le giuste coordinate del file js.</p>
<p>&nbsp;</p>
<p>All'interno del tag body</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;body onload=&quot;letsGo()&quot;&gt;</span></p>
<p>&nbsp;</p>
<p>All'interno della pagina dovr&agrave; esserci un elemento contraddistinto dall'ID che si vuole far scrollare.</p>
<p>&nbsp;</p>
<p><span class="Code"> &lt;div id=&quot;parent&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; Testo da scrollare<br />
&nbsp;&nbsp;&nbsp; Testo da scrollare<br />
&nbsp;&nbsp;&nbsp; Testo da scrollare<br />
&lt;/div&gt;</span></p>
<p>&nbsp;</p>
<h3>Degradabilit&agrave;</h3>
<p>Il codice &egrave; adeguatamente degradato. Nel caso in cui il client non abbia JavaScript abilitato verranno seguite le indicazioni di css date nel foglio di stile. Nella maggior parte dei casi, la dimensione dell'elemento contenente il testo si adeguer&agrave; a questo mostrandolo statico e per intero.</p>
<p>&nbsp;</p>
<h3>Extra Style</h3>
<p>Oltre agli elementi di stile inclusi nella libreria, l'utente potr&agrave; definire proprie direttive aggiuntive. L'id dell'elemento creato dallo script avr&agrave; lo stesso nome dell'id padre, ma con suffisso <em>child-</em>. Se la variabile parent dello script &egrave; l'id Testo, il nome dell'elemento creato dallo script sar&agrave; child-Testo.</p>
<p>Facile capire che baster&agrave; definire delle direttive di stile pre #child-Testo al fine di ottenere un aspetto ancora pi&ugrave; personalizzato ed adeguato alle esigenze del web in cui viene inclusa la libreria.</p>
<p>&nbsp;</p>
<h3>Licenza</h3>
<p>Questo software &egrave; realizzato e distribuito con licenza <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU/GPL v.3</a>. E' possibile utilizzarlo per qualsiasi proposito. E' possibile modificarlo ed &egrave; possibile redistribuirlo a patto che venga rilasciato sotto le stesse condizioni di licenza.</p>
<p>&nbsp;</p>
<h3>Un esempio volante?</h3>
<p><a href="../../../ajaxstudy/textscroller/example.html" target="_blank">Anche questa volta immancabile :)</a></p>
<p>&nbsp;</p>
<div align="center"><a target="_blank" href="http://www.davidonzo.com/public/file/textScroller.tar.gz"><img width="420" height="80" alt="download textScroller at davidonzo.com" src="http://www.davidonzo.com/public/image/browser/downloadtextscroller.jpg" /></a></div>
<p>&nbsp;</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/803/javascript-textscroller-11/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-04-15 09:35:48</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/803/javascript-textscroller-11/</guid>
</item>
<item>
<title>IE7 Bug - overflow:hidden e position:relative</title>
<link>http://www.davidonzo.com/post/801/ie7-bug-overflowhidden-e-positionrelative/</link>
<description><![CDATA[<p></p><p><img width="120" height="120" align="left" alt="IE7 at davidonzo.com" src="http://www.davidonzo.com/public/image/browser/ie7.png" />Qualche tempo fa avevo elogiato IE7 per la buona compatibilit&agrave; con gli standard ed eccoci oggi di fronte ad un bug veramente grave se pensiamo a come questo viene fuori.</p>
<p>&nbsp;</p>
<p>La dichiarazione <code>overflow:hidden</code> di un elemento parent viene ignorata se in un elemento child (interno a quello parent) viene dichiarato il <code>position:relative</code>.</p>
<p>Ma la cosa davvero bella &egrave; che il bug si manifesta solo se nel documento &egrave; specificato un corretto <a target="_blank" href="http://www.w3.org/QA/Tips/Doctype"><code>DOCTYPE</code></a>.</p>
<p>&nbsp;</p>
<p>Vediamo il tutto tramite un esempio minimizzato.</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br />
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;IT-it&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;<br />
&lt;title&gt;IE7 Bug - Overflow:hidden e position:relative&lt;/title&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
.parent{<br />
&nbsp; width:300px;<br />
&nbsp; height:60px;<br />
&nbsp; border: 1px solid #ccc;<br />
&nbsp; overflow:hidden;<br />
}<br />
<br />
.child{<br />
&nbsp;&nbsp; position:relative;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div class=&quot;parent&quot;&gt;<br />
&nbsp;&lt;div class=&quot;child&quot;&gt;<br />
&nbsp; Questo &amp;egrave; un po' di testo.&lt;br /&gt;<br />
&nbsp; Questo &amp;egrave; un po' di testo.&lt;br /&gt;<br />
&nbsp; Questo &amp;egrave; un po' di testo.&lt;br /&gt;<br />
&nbsp; Questo &amp;egrave; un po' di testo.&lt;br /&gt;<br />
&nbsp; Questo &amp;egrave; un po' di testo.&lt;br /&gt;<br />
&nbsp; Questo &amp;egrave; un po' di testo.&lt;br /&gt;<br />
&nbsp;&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></p>
<p>&nbsp;</p>
<p>Notate che dentro il div con classe parent &egrave; annidato il div con classe child. Nonostante il parent sia settato per nascondere tutto il contenuto che eccede i 60px di altezza ed i 300px di larghezza, Internet Explorer 7 ignorer&agrave; la direttiva a causa del position:relative; della classe .child.</p>
<p>&nbsp;</p>
<p>Eliminando le prime due righe del documento a beneficio di un laconico e poco corretto <code>&lt;html&gt;</code> tutto funzioner&agrave; a dovere. Ma ci ritroveremo immediatamente con una pagina impossibile da validare ed il cui comportamento sar&agrave; poco chiaro da browser a browser. Questo perch&egrave;, nonostante qualcuno pensi che la dichiarazione di DOCTYPE sia una sfigataggine dei nerd, questa &egrave; realmente utilizzata dai browser per determinare l'output da visualizzare all'utente.</p>
<p>&nbsp;</p>
<h3>Soluzione</h3>
<p>Per far si che overflow sia rispettato anche su Internet Explorer si abbia l'accortezza di definire nello stile dell'elemento parent lo stesso tipo di position dell'elemento child. Nel nostro caso:</p>
<p>&nbsp;</p>
<p><span class="Code">.parent{<br />
&nbsp; width:300px;<br />
&nbsp; height:60px;<br />
&nbsp; border: 1px solid #ccc;<br />
&nbsp; overflow:hidden;<br />
&nbsp; position:relative;<br />
}</span></p>
<p>&nbsp;</p>
<p><strong><a target="_blank" href="http://www.davidonzo.com/ajaxstudy/iebugov/">A voi un esempio con spiegazione estesa.</a></strong></p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/801/ie7-bug-overflowhidden-e-positionrelative/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-04-09 16:33:18</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/801/ie7-bug-overflowhidden-e-positionrelative/</guid>
</item>
<item>
<title>[JavaScript] TextScroller 1.0</title>
<link>http://www.davidonzo.com/post/798/javascript-textscroller-10/</link>
<description><![CDATA[<p></p><p>Text Scroller &egrave; una semplice libreria JavaScript che permette di effettuare lo scrolling del testo di un elemento di una magina web. E' possibile in questo modo creare un effetto &quot;titoli di coda&quot; o mostrare le ultime news in successione, senza dover usare troppo spazio di pagina.</p>
<p>&nbsp;</p>
<p>Il contenuto dell'elemento prescelto verr&agrave; fatto scrollare in maniera ripetuta. Lo scrolling si arresta all'evento onmouseover, ovvero quando l'utente passa con il mouse sul testo. Questo permette di inserire permalink ed evitare che l'utente debba rincorrersi.</p>
<p>&nbsp;</p>
<h3>Come usare TextScroller?</h3>
<p>E' semplicissimo. Scaricate il file textScroller.js contenuto in <strong><a href="http://www.davidonzo.com/public/file/textScroller.tar.gz">questo archivio</a></strong>. All'interno troverete anche un esempio live.</p>
<p>&nbsp;</p>
<h3>Impostare lo script</h3>
<p>Con il vostro editor di testo preferito aprite il file e modificate le preferenze seguenti:</p>
<p>&nbsp;</p>
<p><span class="Code">&nbsp; var orientamento = '';<br />
&nbsp; var id = '';<br />
&nbsp; var parent = '';<br />
&nbsp; var duration = ; <br />
&nbsp; var l = ;<br />
&nbsp; var h = ;<br />
&nbsp; var w = ;<br />
</span></p>
<h4>&nbsp;</h4>
<h4>var orientamento (array)</h4>
<p>Pu&ograve; assumere i valori seguenti:</p>
<ul>
    <li>TD: scorrimento dall'alto al basso;</li>
    <li>DT: scorrimento dal basso in alto;</li>
    <li>RL: scorrimento da destra a sinistra;</li>
    <li>LR: scorrimento da sinistra a destra;</li>
</ul>
<h4>var id (string)</h4>
<p>L'id dell'elemento che contiene il testo da scrollare.</p>
<p>&nbsp;</p>
<h4>var parent (string)</h4>
<p>L'id dell'elemento padre del precedente. Ovvero l'elemento all'interno del quale id scroller&agrave;.</p>
<p>&nbsp;</p>
<h4>var duration (integer)</h4>
<p>Valore di durata in millisencondi di ogni spostamento. Pi&ugrave; basso &egrave; il valore, pi&ugrave; veloce risulter&agrave; l'effetto movimento del testo.</p>
<p>&nbsp;</p>
<h4>var l (boolean)</h4>
<p>Se &egrave; impostato uguale ad uno attiva dei controlli automatici di stile per coordinare al meglio i due elementi della pagina interessati ed il tipo di scorrimento prescelto.</p>
<p>&nbsp;</p>
<h4>var h (integer)</h4>
<p>Fissa l'altezza dell'elemento parent. In questo modo decidete quanto deve essere alto lo scrolling.</p>
<p>&nbsp;</p>
<h4>var w (integer)</h4>
<p>Fissa la larghezza dell'elemento parent. In questo modo decidete quanto deve essere largo lo scrolling.</p>
<p>&nbsp;</p>
<h3>Impostare il codice HTML</h3>
<p>Nei tag del head della pagina in cui volete usare la libreria, inserite:</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;script type=&quot;text/javascript&quot; src=&quot;textScroller.js&quot;&gt;&lt;/script&gt;</span></p>
<p>&nbsp;</p>
<p>Tenendo a mente di dare le giuste coordinate del file js.</p>
<p>&nbsp;</p>
<p>All'interno del tag body</p>
<p>&nbsp;</p>
<p><span class="Code">&lt;body onload=&quot;letsGo()&quot;&gt;</span></p>
<p>&nbsp;</p>
<p>All'interno della pagina dovranno esserci due elementi contraddistinti dagli id di id e parent della funzione, l'uno dentro l'altro, come nell'esempio.</p>
<p>&nbsp;</p>
<p><span class="Code"> &lt;div id=&quot;parent&quot;&gt;<br />
&nbsp; &lt;div id=&quot;id&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; Testo da scrollare<br />
&nbsp;&nbsp;&nbsp; Testo da scrollare<br />
&nbsp;&nbsp;&nbsp; Testo da scrollare<br />
&nbsp; &lt;/div&gt;<br />
&lt;/div&gt;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Un esempio volante?</h3>
<p><a target="_blank" href="http://www.davidonzo.com/ajaxstudy/textscroller/example.html">Ovviamente :)</a></p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/798/javascript-textscroller-10/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-04-05 00:34:13</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/798/javascript-textscroller-10/</guid>
</item>
<item>
<title>WordPress Mobile Edition by Alex King in italiano</title>
<link>http://www.davidonzo.com/post/793/wordpress-mobile-edition-by-alex-king-in-italiano/</link>
<description><![CDATA[<p></p><p>Mentre il popolo blogsferico del bel paese discute... dai sappiamo tutti di cosa discute... grazie ad un articolo scritto dai ragazzi di <a href="http://www.unanuovaprospettiva.it/2008/03/23/una-nuova-prospettiva-sul-palmare/" target="_blank">UnaNuovaProspettiva</a> scopro l'ennesimo plugin per WordPress di <a href="http://alexking.org" target="_blank">Alex King</a>: <strong><a href="http://alexking.org/projects/wordpress/readme?project=wordpress-mobile-edition" target="_blank">WordPress Mobile Edition</a></strong>.</p>
<p>&nbsp;</p>
<p>Questo plugin controlla lo user-agent del browser del client e, se questo corrisponde ad uno di quelli racchiusi in un elenco (un array) debitamente compilato, viene mandato in loading un template alternativo, totalmente compatibile con dispositivi <em>mobile</em>.</p>
<p>&nbsp;</p>
<p>Nei fatti il template incluso &egrave; una versione extralight di un qualsiasi altro template. Escludendo immagini di sfondo, fogli di stile pesanti e tutto il JavaScript incluso nelle pagine tradizionali, la navigazione risulta molto pi&ugrave; veloce e soprattutto poco dispendiosa per chi paga la connessione mobile in funzione della quantit&agrave; di dati scaricati.</p>
<p>&nbsp;</p>
<p>Come sempre, nell'attesa che la piattaforma di blogging pi&ugrave; famosa del mondo si decida a diventare realmente multilinguage, mi sono preso la briga di tradurre in italiano le parti del template mobile scritte in inglese.</p>
<p>&nbsp;</p>
<p align="center"><a href="http://www.davidonzo.com/public/file/wp-mobile-ITA.zip" target="_blank"><strong>Scarica WordPress Mobile Edition in Italiano</strong></a></p>
<p>&nbsp;</p>
<p>L'installazione &egrave; molto semplice. Scompattate l'archivio e copiate il file wp-mobile.php nella directory /wp-content/plugins/. Dopo di che copiate la directory la directory /wp-mobile/ in /wp-content/themes/ ed attivate il plugin dall'apposita pagina del pannello di controllo del blog.</p>
<p>&nbsp;</p>
<p>Se qualcuno acceder&agrave; al vostro blog da cellulare o palmare, senza bisogno di alcuna interazione, verr&agrave; direttamente mandato in loading il template mobile.</p>
<p>&nbsp;</p>
<p>Per provare il plugin evitando di doversi connettere realmente da cellulare, con Firefox, installate l'addon <a href="https://addons.mozilla.org/it/firefox/addon/59" target="_blank">User Agent Switcher</a> ed usare come User Agent &quot;Mozilla/3.0 (compatible; AvantGo 3.2)&quot; o qualsiasi altro user agent di browser usati in dispositivi mobili.</p><script src="http://feeds.feedburner.com/~s/davidonzo?i=http://www.davidonzo.com/post/793/wordpress-mobile-edition-by-alex-king-in-italiano/" type="text/javascript" charset="utf-8"></script>]]></description>
<pubDate>2008-03-26 14:10:47</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/793/wordpress-mobile-edition-by-alex-king-in-italiano/</guid>
</item>
</channel>
</rss>
