<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2italianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Quello che non scrivo su Facebook - Il blog di Francesco Terenzani</title>
	
	<link>http://www.terenzani.it</link>
	<description>Un po' di PHP, anche applicato a WordPress, con qualche off topic su CSS ed altri protocolli e specifiche web.</description>
	<lastBuildDate>Thu, 03 Dec 2009 22:54:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/t-lab" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="t-lab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">t-lab</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Tracciare link esterni e download con Google Analytics Asincrono</title>
		<link>http://www.terenzani.it/127/tracciare-link-esterni-e-download-con-ga-asincrono/</link>
		<comments>http://www.terenzani.it/127/tracciare-link-esterni-e-download-con-ga-asincrono/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 22:49:12 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Web-Analytics]]></category>
<category>google</category><category>Google Analytics</category><category>Javascript</category><category>performance</category><category>Web Analytics</category>
		<guid isPermaLink="false">http://www.terenzani.it/127/tracciare-link-esterni-e-download-con-ga-asincrono/</guid>
		<description><![CDATA[Come utilizzare la libreria per <a href="http://www.terenzani.it/113/tracciare-link-esterni-e-download-con-google-analytics/">tracciare link esterni e download</a> con il nuovo codice di tracciamento asincrono di Google Analytics.]]></description>
			<content:encoded><![CDATA[<p>Scrivo un piccolo aggiornamento sulla libreria per <a href="http://www.terenzani.it/113/tracciare-link-esterni-e-download-con-google-analytics/">tracciare link esterni e download</a> con Google Analytics pubblicata in collaborazione con <a href="http://www.goanalytics.info/">GoAnalytics</a>.</p>
<p>Da <a href="http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html">qualche giorno</a>, infatti, è possibile sostituire il classico codice di tracciamento, con una nuova versione che permette il <a href="http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html">caricamento asincrono</a> del file ga.js, portando benefici ai tempi di caricamento delle pagine che utilizzano Google Analytics.<br />
<span id="more-127"></span><br />
La libreria, utilizzando il codice originale di GA, si utilizza in questo modo:</p>
<pre>&lt;script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script>

&lt;script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-XXXXXXX-1");
pageTracker._trackPageview();
<strong>_ftTrack(pageTracker,"link|pdf|jpg|zip|rar");</strong>
} catch(err) {}
&lt;/script></pre>
<p>Utilizzando invece il nuovo codice, il richiamo della funzione _ftTrack va modificato in questo modo:</p>
<pre>&lt;script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);
  _gaq.push(function(){
    <strong>_ftTrack(_gaq._getAsyncTracker(), "link|pdf|jpg|zip|rar");</strong>
  });

  (function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    ga.setAttribute('async', 'true');
    document.documentElement.firstChild.appendChild(ga);
  })();

&lt;/script></pre>
<p>Allo stesso modo, per tracciare informazioni distinte in due account, con il codice ufficiale la libreria si utilizza così:</p>
<pre>&lt;script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script>

&lt;script type="text/javascript">
try {
var pageTrackerA = _gat._getTracker("UA-XXXXXXX-1");
pageTrackerA._trackPageview();

var pageTrackerB = _gat._getTracker("UA-XXXXXXX-2");
pageTrackerB._trackPageview();

<strong>_ftTrack(pageTrackerA,"pdf|jpg|zip|rar");</strong>
<strong>_ftTrack(pageTrackerB,"link");</strong>
} catch(err) {}
&lt;/script></pre>
<p>Utilizzando invece il codice di tracciamento asincrono, avremo qualcosa del genere:</p>
<pre>&lt;script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-1']);
  _gaq.push(['_trackPageview']);
  _gaq.push(function(){
    <strong>_ftTrack(_gaq._getAsyncTracker(), "pdf|jpg|zip|rar");</strong>
  });

  _gaq.push(['b._setAccount', 'UA-XXXXX-2']);
  _gaq.push(['b._trackPageview']);
  _gaq.push(function(){
    <strong>_ftTrack(_gaq._getAsyncTracker('b'), "link");</strong>
  });

  (function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    ga.setAttribute('async', 'true');
    document.documentElement.firstChild.appendChild(ga);
  })();

&lt;/script></pre>
<a href="http://www.terenzani.it/tag/google" rel="tag">google</a>, <a href="http://www.terenzani.it/tag/google-analytics" rel="tag">Google Analytics</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a>, <a href="http://www.terenzani.it/tag/performance" rel="tag">performance</a>, <a href="http://www.terenzani.it/tag/web-analytics" rel="tag">Web Analytics</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=Jh__hJ4LNPU:Rabh6ThRORk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=Jh__hJ4LNPU:Rabh6ThRORk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=Jh__hJ4LNPU:Rabh6ThRORk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=Jh__hJ4LNPU:Rabh6ThRORk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=Jh__hJ4LNPU:Rabh6ThRORk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=Jh__hJ4LNPU:Rabh6ThRORk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=Jh__hJ4LNPU:Rabh6ThRORk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=Jh__hJ4LNPU:Rabh6ThRORk:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=Jh__hJ4LNPU:Rabh6ThRORk:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/127/tracciare-link-esterni-e-download-con-ga-asincrono/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trovare la definizione di una funzione in PHP</title>
		<link>http://www.terenzani.it/126/trovare-la-definizione-di-una-funzione-in-php/</link>
		<comments>http://www.terenzani.it/126/trovare-la-definizione-di-una-funzione-in-php/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 22:00:30 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[reflection]]></category>
<category>PHP</category><category>reflection</category>
		<guid isPermaLink="false">http://www.terenzani.it/126/trovare-la-definizione-di-una-funzione-in-php/</guid>
		<description><![CDATA[ Quando si deve lavorare sul codice scritto da altri o quando si ritorna sul proprio codice dopo un po&#8217; di tempo, capita spesso una funzione o un oggetto di cui non ci è ben chiara la responsabilità.
A questo punto potrebbe essere utile sapere in quale file una funzione o una classe è stata definita. [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" style="margin: 0 10px 10px 0" src='http://www.terenzani.it/wp-content/uploads/2009/10/php-reflection.jpeg' alt='PHP Reflection' /> Quando si deve lavorare sul codice scritto da altri o quando si ritorna sul proprio codice dopo un po&#8217; di tempo, capita spesso <strong>una funzione</strong> o <strong>un oggetto</strong> di cui non ci è ben chiara la responsabilità.</p>
<p>A questo punto potrebbe essere utile sapere in quale file una funzione o <strong>una classe</strong> è stata definita. Oppure sapere da quale classe un oggetto è stato istanziato.</p>
<p>Fortunatamente a partire da PHP5 abbiamo a disposizione una serie di <a href="http://www.php.net/manual/en/book.reflection.php">API per la Reflection</a> che rendono questo compito molto semplice.</p>
<p><span id="more-126"></span></p>
<p>Per ottenere informazioni su una funzione:<br />
<code>&lt;?php ReflectionFunction::export('nomeDellaFunzione') ?></code></p>
<p>Per ottenere informazioni su una classe:<br />
<code>&lt;?php ReflectionClass::export('nomeDellaClasse') ?></code></p>
<p>Per ottenere informazioni su un oggetto:<br />
<code>&lt;?php ReflectionObject::export($object) ?></code></p>
<p>Un rapido esempio in un file &#8220;reflection.php&#8221;:</p>
<pre>
&lt;?php

class Test
{

}

function Test() {
    return new Test;
}

$test = Test();

echo "&lt;pre>";

ReflectionFunction::export('Test');
ReflectionClass::export('Test');
ReflectionObject::export($test);
</pre>
<p>L&#8217;output è:</p>
<pre>
Function [  function Test ] {
  @@ /var/www/reflection.php 8 - 10
}

Class [  class Test ] {
  @@ /var/www/reflection.php 3-6

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [0] {
  }
}

Object of class [  class Test ] {
  @@ /var/www/reflection.php 3-6

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Dynamic properties [0] {
  }

  - Methods [0] {
  }
}</pre>
<a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a>, <a href="http://www.terenzani.it/tag/reflection" rel="tag">reflection</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=t9BZderCpAc:nSyaZmvtH-E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=t9BZderCpAc:nSyaZmvtH-E:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=t9BZderCpAc:nSyaZmvtH-E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=t9BZderCpAc:nSyaZmvtH-E:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=t9BZderCpAc:nSyaZmvtH-E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=t9BZderCpAc:nSyaZmvtH-E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=t9BZderCpAc:nSyaZmvtH-E:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=t9BZderCpAc:nSyaZmvtH-E:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=t9BZderCpAc:nSyaZmvtH-E:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/126/trovare-la-definizione-di-una-funzione-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Una API per Google Maps in stile jQuery</title>
		<link>http://www.terenzani.it/124/una-api-per-google-maps-in-stile-jquery/</link>
		<comments>http://www.terenzani.it/124/una-api-per-google-maps-in-stile-jquery/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 23:01:10 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google-Maps]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
<category>API</category><category>Google Maps</category><category>Javascript</category><category>jQuery</category>
		<guid isPermaLink="false">http://www.terenzani.it/124/una-api-per-google-maps-in-stile-jquery/</guid>
		<description><![CDATA[Un'occhiata alla nuova versione 3 delle API di Google Maps e qualche esperimento per avere una interfaccia più user friendly sulla falsa riga di jQuery.]]></description>
			<content:encoded><![CDATA[<p>Stasera ho dato un&#8217;occhiata alla nuova <a href="http://code.google.com/intl/it/apis/maps/documentation/v3/">versione 3 delle API di Google Maps,</a> uscite qualche mese fa. I punti salienti evidenziati dalla homepage del progetto sono un <strong>miglioramento delle performance</strong>, soprattutto per i dispositivi mobile, una implementazione di una variante del <strong>pattern MVC</strong> (ma non ho ancora ben capito in cosa consista) ed il fatto che con questa versione non sia più necessario richiedere una <strong>API key</strong>.<br />
<span id="more-124"></span><br />
Per ora non sono andato molto oltre nella lettura della documentazioni, ma ho già iniziato a giocherellare un po&#8217; con le API. Il risultato è una mini libreria che sostanzialmente può solo creare una mappa e posizionare dei marcatori. Permette però di farlo con una sintassi divenuta ormai molto famigliare :P</p>
<pre>new GMap.Map("Milano, Italy", "map_canvas")
    .mark("Via Pomponio 4")
    .mark("Corso di Porta Ticinese");</pre>
<p><a href="http://www.terenzani.it/gmap/play.html" target="_blank">Una demo qui</a>. Da notare che in mark non è necessario specificare una città, dato che verrà cercata la Via Pomponio e il Corso di Porta Ticinese più vicino al centro della mappa (Milano nell&#8217;esempio) :-)</p>
<p>Sarebbe bello avere un&#8217;interfaccia completa in stile jQuery per lavorare con le API di Google Maps, penso che aprirebbe la strada ad un&#8217;infinità di Web Application basate sulle mappe di Google :P</p>
<p>Chissà che <a href="http://ejohn.org/">John Resig</a> non abbia un po&#8217; di tempo libero :D</p>
<a href="http://www.terenzani.it/tag/api" rel="tag">API</a>, <a href="http://www.terenzani.it/tag/google-maps" rel="tag">Google Maps</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a>, <a href="http://www.terenzani.it/tag/jquery" rel="tag">jQuery</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=qTU5I7h-0q4:cr6a7xb53f0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=qTU5I7h-0q4:cr6a7xb53f0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=qTU5I7h-0q4:cr6a7xb53f0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=qTU5I7h-0q4:cr6a7xb53f0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=qTU5I7h-0q4:cr6a7xb53f0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=qTU5I7h-0q4:cr6a7xb53f0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=qTU5I7h-0q4:cr6a7xb53f0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=qTU5I7h-0q4:cr6a7xb53f0:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=qTU5I7h-0q4:cr6a7xb53f0:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/124/una-api-per-google-maps-in-stile-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problemi con i funnel di navigazione di Google Analytics</title>
		<link>http://www.terenzani.it/118/problemi-con-i-funnel-di-navigazione-di-google-analytics/</link>
		<comments>http://www.terenzani.it/118/problemi-con-i-funnel-di-navigazione-di-google-analytics/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 23:09:06 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[funnel-di-navigazione]]></category>
<category>funnel di navigazione</category><category>Google Analytics</category>
		<guid isPermaLink="false">http://www.terenzani.it/118/problemi-con-i-funnel-di-navigazione-di-google-analytics/</guid>
		<description><![CDATA[Problemi con il tracciamento dei funnel di navigazione con Google Analytics? In questo post potresti trovare la soluzione che stai cercando!]]></description>
			<content:encoded><![CDATA[<p>Grazie a <a href="http://www.lunametrics.com/blog/2008/06/25/funnel-problems-google-analytics/">questo post</a> di Lunametrics sono riuscito a risolvere un problema con il tracciamento dei funnel di navigazione con Google Analytics che avevo ormai rinunciato di risolvere.</p>
<p><strong>Il problema si presenta in questo modo</strong>: gli obbiettivi vengono tracciati correttamente, ma il tasso di abbandono tra gli step intermedi è dello 0%.</p>
<div style="text-align:center"><img src='http://www.terenzani.it/wp-content/uploads/2009/01/funnel-2.png' alt='Esempio di funnel errato 1' /></div>
<p>Un problema simile nelle cause, sempre segnalato dal post di Lunametrics, si presenta in questo modo: dai report risulta che ci sono state conversioni, ma il report dei funnel mostra un tasso di abbandono del 100% tra il primo ed il secondo step.</p>
<div style="text-align:center"><img src='http://www.terenzani.it/wp-content/uploads/2009/01/funnel-1.png' alt='Esempio di funnel errato 2' /></div>
<p><span id="more-118"></span></p>
<p>Entrambi i problemi si verificano quando il tipo di corrispondenza dell&#8217;obbiettivo è settato a <em>Corrispondenza principale</em> o <em>Corrispondenza espressione regolare</em> ed è causato dal fatto che uno step cattura anche i successivi.</p>
<p>L&#8217;unico modo per risolvere è ricorrere ad espressioni regolari (o intervenire sul sito web al fine di modificare gli URL degli step :P), Lunametrics suggerisce di ricorrere ad espressioni regolari avanzate con <em>asserzioni negative che &#8220;guardano avanti&#8221;</em>, proponendo anche un <a href="http://www.lunametrics.com/blog/2007/08/08/regular-expressions-for-ga-bonus-iii-lookahead/">link di approfondimento</a>. In realtà penso che nella maggior parte dei casi si possa ricorrere ad espressioni meno avanzate e forse anche più precise.</p>
<p>Immaginiamo un caso del genere:</p>
<p>Step 1: /sottoscrizione/<br />
Step 2: /sottoscrizione/step2.php<br />
Obiettivo: /sottoscrizione/grazie.php</p>
<p>Il problema è catturare al primo step, senza catturare gli step successivi, tutti gli URL del tipo:</p>
<p>/sottoscrizione/<br />
/sottoscrizione/<strong>?</strong><em>query_string</em><br />
/sottoscrizione/index.php<br />
/sottoscrizione/index.php<strong>?</strong><em>query_string</em></p>
<p>L&#8217;espressione che ho pensato per questo specifico problema, ma che può essere facilmente riadattata anche alla maggior parte dei problemi simili, è la seguente:</p>
<p><del datetime="2009-01-09T21:28:18+00:00">^/sottoscrizione(/|/\?.+|/index.php.+)$</del><br />
<code>^/sottoscrizione(/|/\?.*|/index.php.*)$</code></p>
<p>In pratica con questa espressione definiamo una regola che cattura gli URL esattamente uguali a &#8220;/sottoscrizione/&#8221; OPPURE &#8220;/sottoscrizione/?&#8221; + qualsiasi o nessun carattere OPPURE &#8220;/sottoscrizione/index.php&#8221; + qualsiasi o nessun carattere.</p>
<p>Per capire meglio il report sui funnel di Google Analytics, rimando al <a href="http://www.lunametrics.com/blog/2008/06/25/funnel-problems-google-analytics/">post di Lunametrics</a>.</p>
<p><em>[Ne approfitto per segnalare con qualche mese di ritardo il </em>guest post<em> che ho avuto il piacere di pubblicare su GoAnalytics di Marco Cilia, un blog e leggo sempre con molto interesse. Il post è giusto una raccolta di qualche nota su <a href="http://www.goanalytics.info/cambio-nel-codice-da-includere-trycatch/">il codice di Google Analytics da includere nelle pagine</a>]</em></p>
<a href="http://www.terenzani.it/tag/funnel-di-navigazione" rel="tag">funnel di navigazione</a>, <a href="http://www.terenzani.it/tag/google-analytics" rel="tag">Google Analytics</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=LeXwkzvJakg:3z4FpovM8N8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=LeXwkzvJakg:3z4FpovM8N8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=LeXwkzvJakg:3z4FpovM8N8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=LeXwkzvJakg:3z4FpovM8N8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=LeXwkzvJakg:3z4FpovM8N8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=LeXwkzvJakg:3z4FpovM8N8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=LeXwkzvJakg:3z4FpovM8N8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=LeXwkzvJakg:3z4FpovM8N8:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=LeXwkzvJakg:3z4FpovM8N8:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/118/problemi-con-i-funnel-di-navigazione-di-google-analytics/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tracciare link esterni e download con Google Analytics</title>
		<link>http://www.terenzani.it/113/tracciare-link-esterni-e-download-con-google-analytics/</link>
		<comments>http://www.terenzani.it/113/tracciare-link-esterni-e-download-con-google-analytics/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 00:34:43 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web-Analytics]]></category>
<category>google</category><category>Google Analytics</category><category>Javascript</category><category>Web Analytics</category>
		<guid isPermaLink="false">http://www.terenzani.it/113/tracciare-link-esterni-e-download-con-google-analytics/</guid>
		<description><![CDATA[Una utility Javascript per tracciare automaticamente link esterni e download con la nuova libreria di Google Analytics.]]></description>
			<content:encoded><![CDATA[<p>In collaborazione con Marco Cilia di <a href="http://www.goanalytics.info/">Google Analytics in 30 secondi</a> ho scritto una libreria in Javascript per tracciare in modo semplice, e soprattutto senza dover modificare ogni singolo link, i click verso link esterni e verso risorse che non possono contenere il codice di tracciamento di Google Analytics (come ad esempio file PDF, immagini e qualsiasi altro file).</p>
<p><strong>Aggiornamento:</strong><br />
<em>Vuoi utilizzare questa libreria con il nuovo codice di tracciamento asincrono di Google Analytics? <a href="http://www.terenzani.it/127/tracciare-link-esterni-e-download-con-ga-asincrono/">Scopri come</a>.</em></p>
<p><span id="more-113"></span></p>
<p>L&#8217;utilizzo è davvero semplice, per prima cosa dobbiamo <a href="http://www.terenzani.it/wp-content/lab/javascript/_ftTrack/_ftTrack.js">scaricarla</a> ed includerla nelle nostre pagine:</p>
<p><code>&lt;script type="text/javascript" src="_ftTrack.js">&lt;/script></code></p>
<p>Dopo di che ci basta aggiungere il richiamo di una funzione dopo il normale codice di Google Analytics (è evidenziato in grassetto nel seguente esempio):</p>
<pre>&lt;script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script>

&lt;script type="text/javascript">
var pageTracker = _gat._getTracker("UA-XXXXXXX-1");
pageTracker._initData();
pageTracker._trackPageview();
<strong>_ftTrack(pageTracker,"link|pdf|jpg|zip|rar");</strong>
&lt;/script></pre>
<p>La funzione <code>_ftTrack</code> accetta due argomenti, il primo, quello che rende la <strong>libreria multi account</strong>, è l&#8217;oggetto di Google Analytics creato con <code>_gat._getTracker("UA-XXXXXXX-1")</code> (<code>pageTracker</code>, nell&#8217;esempio), il secondo è l&#8217;elenco delle estensioni dei file da tracciare separate da un | (pipe).</p>
<p>Per <strong>tracciare i link esterni</strong>, basta aggiungere all&#8217;elenco di estensioni (nell&#8217;esempio pdf|jpg|zip|rar), la parola chiave &#8220;link&#8221;:</p>
<p><code>_ftTrack(pageTracker,"<strong>link</strong>|pdf|jpg|zip|rar");</code></p>
<p>Non dovete fare altro :-)</p>
<p>La libreria _ftTrack incorpora la libreria <a href="http://www.3site.eu/jstests/onContent/final.html">onContent</a> scritta da <a href="http://webreflection.blogspot.com/">Andrea Giammarchi</a>.</p>
<h2>Dove ritrovo i dati tracciati?</h2>
<p>La libreria traccia i click su link in uscita ed i link verso file non HTML come <strong>pagine visualizzate</strong>. Questo significa che li ritroverete in ogni report sulle pagine visualizzati di Google Analytics.</p>
<p>Tutte le &#8220;finte&#8221; pagine viste hanno un prefisso predefinito: <strong>&#8220;/OUTGOING/&#8221;</strong> per i link in uscita e <strong>&#8220;/MEDIA/&#8221;</strong> per gli altri file.</p>
<h2>Ci sono problemi con piÃ¹ account di Google Analytics?</h2>
<p>No, la libreria gestisce ogni account di Google Analytics in modo separato. Quindi inserendo piÃ¹ codici in una pagina possiamo scegliere cosa tracciare per ognuno. Nel seguente esempio il primo account traccia SOLO link esterni ed il secondo SOLO file PDF:</p>
<pre>&lt;script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script>

&lt;script type="text/javascript">
var <strong>primoTracker</strong> = _gat._getTracker("UA-XXXXXXX-1");
primoTracker._initData();
primoTracker._trackPageview();

var secondoTracker = _gat._getTracker("UA-XXXXXXX-2");
<strong>secondoTracker</strong>._initData();
secondoTracker._trackPageview();

_ftTrack(<strong>primoTracker</strong>,"link");
_ftTrack(<strong>secondoTracker</strong>,"pdf");
&lt;/script></pre>
<p>Nel <a href="http://www.goanalytics.info/tracciare-automaticamente-link-e-download-the-italian-way/">post di Marco</a> trovate un altro esempio molto interessante, in cui non si utilizza il richiamo alla funzione <code>_trackPageview()</code>. Questo permette di fatto di dedicare un account al solo tracking di download e link in uscita.</p>
<h2>Tips</h2>
<p>Per testare la libreria, dopo averla scaricata ed inclusa in un documento, potete sostituire il codice di Google Analytics con questo:</p>
<pre>&lt;script type="text/javascript">
function testObj(){
	this._trackPageview=function(msg){
		window.alert(msg);
	}
}
<strong>pageTracker</strong> = new testObj();

<strong>_ftTrack(pageTracker,'link|pdf');</strong>
&lt;/script></pre>
<p>Con questo codice, per ogni link esterno e link a file PDF cliccato, otterrete un <code>alert</code> con la pagina che la libreria salverebbe in Google Analytics, ho messo anche un <a href="http://www.terenzani.it/wp-content/lab/javascript/_ftTrack/demo-it.html">esempio on line</a>. Molto utile in fase di debug :-)</p>
<p>Se state ancora utilizzando il vecchio codice di GA, potete far riferimento a questo <a href="http://www.terenzani.it/54/urchintrack-utility-tracciare-link-esterni-e-download-con-google-analytics/">vecchio post</a>.</p>
<a href="http://www.terenzani.it/tag/google" rel="tag">google</a>, <a href="http://www.terenzani.it/tag/google-analytics" rel="tag">Google Analytics</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a>, <a href="http://www.terenzani.it/tag/web-analytics" rel="tag">Web Analytics</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=2JqAHuUCPZo:iPTnVea0740:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=2JqAHuUCPZo:iPTnVea0740:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=2JqAHuUCPZo:iPTnVea0740:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=2JqAHuUCPZo:iPTnVea0740:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=2JqAHuUCPZo:iPTnVea0740:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=2JqAHuUCPZo:iPTnVea0740:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=2JqAHuUCPZo:iPTnVea0740:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=2JqAHuUCPZo:iPTnVea0740:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=2JqAHuUCPZo:iPTnVea0740:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/113/tracciare-link-esterni-e-download-con-google-analytics/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Conversione di una stringa da ASCII a binario e da binaro a ASCII con Javascript</title>
		<link>http://www.terenzani.it/111/conversione-di-una-stringa-ascii-a-binario-e-da-binaro-a-ascii-con-javascript/</link>
		<comments>http://www.terenzani.it/111/conversione-di-una-stringa-ascii-a-binario-e-da-binaro-a-ascii-con-javascript/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 20:28:59 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[ASCII-Table]]></category>
		<category><![CDATA[codice-binario]]></category>
		<category><![CDATA[Javascript]]></category>
<category>ASCII Table</category><category>codice binario</category><category>Javascript</category>
		<guid isPermaLink="false">http://www.terenzani.it/111/conversione-di-una-stringa-ascii-a-binario-e-da-binaro-a-ascii-con-javascript/</guid>
		<description><![CDATA[Si ricava il codice decimale del carattere nella tabella ASCII, gli si cambia base (da base 2 a base 10) e quello che otteniamo è un numero binario.]]></description>
			<content:encoded><![CDATA[<p>Questo post potrebbe essere la seconda parte del post <a href="http://www.terenzani.it/108/escape-conversione-decimale-esadecimale-javascript-php/">escape completo di una stringa</a>, infatti la teoria è praticamente la stessa:</p>
<p>Si ricava il codice decimale del carattere nella tabella ASCII, gli si cambia base (da base 2 a base 10) e quello che otteniamo è un numero binario. Ecco un esempio in Javascript:<br />
<span id="more-111"></span></p>
<pre><code>// binaries and ascii
function asciiToBin(string){
	var bin='';
	for(i=0;i&lt;string.length;i++){
		bin+=strPadLeft(string.charCodeAt(i).toString(2),8);
	}
	return bin;
}

function strPadLeft(n,l){
	while(n.length&lt;l){
		n='0'+n;
	}
	return n;
}</code></pre>
<p>Anche in questo caso utilizziamo <code>toString</code> per cambiare base ad un numero, e la funzione <code>strPadLeft</code> per &#8220;riempire&#8221; di zeri i numeri piÃ¹ corti di otto caratteri.</p>
<p>Per la riconversione in ASCII le cose si complicano un po&#8217;, infatti in questo caso non abbiamo una funzione simile a <code>unescape</code> che fa ritornare tutto come prima.</p>
<p>Per la riconversione potremmo quindi utilizzare la funzione di Javascript parseInt per ogni ottavina (serie di otto bit) ottenuta. </p>
<p>Infatti utilizzata in queso modo, la funzione parseInt converte il numero binario 00000011 in numero decimale:</p>
<p><code>parseInt('00000011', 2);</code></p>
<p>Il risultato sarebbe 3.</p>
<p>Ecco di seguito una funzione di conversione ASCII binario che utilizza la funzione <code>parseInt</code>:</p>
<pre><code>function binToAscii(bin){
	var ascii='';
	for(var i=0;i&lt;bin.length;i+=8){
		ascii += String.fromCharCode(parseInt(bin.substr(i,8),2));
	}
	return ascii;
}</code></pre>
<p>In alternativa potremmo utilizzare una funzione piÃ¹ teorica. Per convertire un numero da qualsiasi base numerica in basa decimale, si prende il numero di minor peso (quello piÃ¹ a sinistra) e lo si moltiplica per la sua base elevata alla zero. Il risultato viene sommato al secondo numero moltiplicato per la sua base elevata alla prima e cosÃ¬ via.</p>
<p>Quindi un numero in base 2 (binario) come il seguente, potrebbe essere trasformato in numero decimale nel seguente modo: </p>
<p>101 = (1*2^0)+(0*2^1)+(1*2^2) = 1+0+4 = 5;</p>
<p>Possiamo riprodurre la stessa logica con una funzione:</p>
<pre><code>function byteToDecimal(by){
	var dec = 0;
	for(var i=0;i&lt;by.length;i++){
		dec += Math.pow(2,i)*by.substr(by.length-(i+1),1);
	}
	return dec;
}</code></pre>
<p>Per chi fosse interessato rimando a questo articolo sui <a href="http://www.ddattica.net/argomenti/fondamenti_di_informatica/sistemi_di_numerazione/">sistemi di numerazione</a> per approfondimenti.</p>
<a href="http://www.terenzani.it/tag/ascii-table" rel="tag">ASCII Table</a>, <a href="http://www.terenzani.it/tag/codice-binario" rel="tag">codice binario</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=yXM8l5WeZX8:vucf4IUswTU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=yXM8l5WeZX8:vucf4IUswTU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=yXM8l5WeZX8:vucf4IUswTU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=yXM8l5WeZX8:vucf4IUswTU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=yXM8l5WeZX8:vucf4IUswTU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=yXM8l5WeZX8:vucf4IUswTU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=yXM8l5WeZX8:vucf4IUswTU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=yXM8l5WeZX8:vucf4IUswTU:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=yXM8l5WeZX8:vucf4IUswTU:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/111/conversione-di-una-stringa-ascii-a-binario-e-da-binaro-a-ascii-con-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Escape completo di una stringa ASCII con Javascript o PHP</title>
		<link>http://www.terenzani.it/108/escape-conversione-decimale-esadecimale-javascript-php/</link>
		<comments>http://www.terenzani.it/108/escape-conversione-decimale-esadecimale-javascript-php/#comments</comments>
		<pubDate>Sun, 25 May 2008 22:28:19 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[ASCII-Table]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
<category>ASCII Table</category><category>Javascript</category><category>PHP</category>
		<guid isPermaLink="false">http://www.terenzani.it/108/escape-conversione-decimale-esadecimale-javascript-php/</guid>
		<description><![CDATA[... ovvero come convertire caratteri ASCII in codici esadecimali con Javascript o PHP]]></description>
			<content:encoded><![CDATA[<p>Le funzioni <code>escape</code> o <code>encodeURIcomponent</code> di Javascript e le funzioni <code>urlencode</code> o <code>rawurlencode</code> di PHP fanno un <em>escape</em> di alcuni caratteri speciali. </p>
<p>Ad esempio la stringa <em>http://www.asciitable.com</em> passata in una di queste funzioni diventerebbe qualcosa tipo <em>http%3A%2F%2Fwww.asciitable.com</em>.</p>
<p><span id="more-108"></span></p>
<p>L&#8217;escape di un carattere non è altro che il suo corrispondente esadecimale preceduto da un &#8220;%&#8221;. Per i 255 caratteri ASCII si fa quindi riferimento a questa tabella (che contiene solo i primi 127, per gli altri potete seguire il link dopo l&#8217;immagine):</p>
<p><a href='http://www.terenzani.it/wp-content/uploads/2008/05/ascii-table-completa.jpg' title='ascii-table-completa.jpg'><img style="width:100%" src='http://www.terenzani.it/wp-content/uploads/2008/05/ascii-table-completa.jpg' alt='Tabelle ASCII' /></a><br />
<small>Tabella ASCII: <a href="http://www.asciitable.com/">www.asciitable.com</a></small></p>
<p>Se il carattere slash &#8220;/&#8221;, nella tabella ASCII, corrisponde al numero decimale 47 ed al numero esadecimale 2F, il suo escape sarà %2F.</p>
<p>Anche se le succitate funzioni convertono solo alcuni caratteri, non significa che tutti gli altri non possano essere convertiti.</p>
<p>Per fare l&#8217;escape completo di una stringa, quindi, non ci resta che individuare il valore decimale di ogni carattere, convertirlo in numero esadecimale (a larghezza fissa di due cifre) e farlo precedere da un &#8220;%&#8221;. </p>
<p>Per le stringhe di caratteri ASCII sia Javascript che PHP ci vengono in aiuto con alcune funzioni per la conversione dei caratteri nel loro valore decimale all&#8217;interno della tabella ASCII, quindi una volta ottenuto il valore decimale, ci basta convertirlo in esadecimale trasformandolo da numero in base dieci a numero in base 16.</p>
<p>Di seguito il codice pronto per il copia e incolla <strong>in Javascript</strong>:</p>
<pre><code>function escapeAll(string){
	var hex='';
	for(i=0;i&lt;string.length;i++){
		hex+='%'+strPadLeft(string.charCodeAt(i).toString(16),2);
	}
	return hex.toUpperCase();
}
function strPadLeft(n,l){
	while(n.length&lt;l){
		n='0'+n;
	}
	return n;
}
</code></pre>
<p>Nella funzione <code>escapeAll</code>, per ottenere il codice ASCI di ogni carattere, si utilizza <code>charCodeAt</code>. Di seguito un esempio per chiarirne l&#8217;utilizzo:</p>
<pre><code>var string = "Hello World";
string.charCodeAt(0); // Ritorna il codice ASCII (decimale) di "H"
string.charCodeAt(1); // Ritorna il codice ASCII (decimale) di "e"
string.charCodeAt(2); // Ritorna il codice ASCII (decimale) di "l"
string.charCodeAt(3); // Ritorna il codice ASCII (decimale) di "l"
string.charCodeAt(3); // Ritorna il codice ASCII (decimale) di "o"
...</code></pre>
<p>Una volta ottenuto il codice ASCII (un numero decimale) dobbiamo quindi trasformarlo in numero esadecimale (che è un numero in base 16). Per cambiare base ad un numero decimale viene utilizzata la funzione <code>toString</code>. Di seguito un esempio:</p>
<pre><code>var num = 16;
while(num--){
	document.write(num.toString(16));
}
</code></pre>
<p>Lo script stamperà i numeri compresi dal 15 allo zero in base 16 (esadecimali):</p>
<pre>f
e
d
c
b
a
9
8
7
6
5
4
3
2
1
0</pre>
<p>Per il resto niente da dire, c&#8217;è solo in piÃ¹ una funzione <code>strPadLeft</code> che viene utilizzata per assicurarsi che il codice esadecimale del carattere sia lungo 2 cifre, nel caso sia piÃ¹ corto aggiunge uno zero di riempimento a sinistra del numero (in pratica se gli passiamo F, ritorna 0F).</p>
<p>Di seguito il codice <strong>in PHP</strong> per ottenere lo stesso risultato (l&#8217;escape di una stringa):</p>
<pre><code>function rawstringencode($string){
   $hex = '';

   for($i = 0, $j = strlen($string); $i &lt; $j; $i++)
      $hex .= '%'.str_pad(base_convert(ord($string[$i]), 10, 16), 2, '0', STR_PAD_LEFT);

   return strtoupper($hex);
}</code></pre>
<p>Lo script PHP fa la stessa identica cosa di quello in Javascript, le uniche differenze sono i nomi delle funzioni ed il fatto che si usano in modo leggermente diverso.</p>
<h2>Applicazioni</h2>
<p>Alcune possibili applicazioni potrebbero essere l&#8217;offuscamento di codice Javascript oppure la criptazione di stringhe. Ecco due semplici esempi:</p>
<p>Un alert in Javascript:</p>
<pre><code>&lt;script>eval(unescape('%61%6C%65%72%74%28%22%68%65%6C%6C%6F%20%77%6F%72%6C%64%22%29'));&lt;/script></code></pre>
<p>Una criptazione in Javascript che esegue una semplice operazione aritmetica con il codice ASCII del carattere:</p>
<pre><code>function simpleEncrypt(string){
	var new_string='';
	for(var i=0;i&lt;string.length;i++){
		new_string += String.fromCharCode(255-string.charCodeAt(i));
	}
	return new_string;
}
function simpleDecrypt(string){
	return simpleEncrypt(string);
}</code></pre>
<p>In un prossimo post le funzioni per la conversione ASCII binario, binario ASCII, ma piÃ¹ o meno è la stessa cosa :-)</p>
<h2>Per approfondire:</h2>
<p>Alcuni link piÃ¹ o meno a tema:</p>
<ul>
<li><a href="http://www.ddattica.net/argomenti/fondamenti_di_informatica/sistemi_di_numerazione/">Fondamenti di Informatica Â» Sistemi di numerazione</a></li>
<li><a href="http://webreflection.blogspot.com/2006/11/php-and-javascript-encoding-comparison.html">PHP and JavaScript encoding comparison table</a></li>
<li><a href="http://www.w3schools.com/jsref/jsref_obj_string.asp">JavaScript String Object Reference</a></li>
<li><a href="http://it2.php.net/manual/it/ref.strings.php">String Funcions di PHP</a></li>
<li><a href="http://edetools.blogspot.com/2007/08/la-decodifica-automatica-di-javascript_23.html">La decodifica automatica di semplici javascript offuscati e criptati</a>
</li>
<li><a href="http://javascript.html.it/articoli/leggi/2069/errori-comuni-con-ajax/3/">Invio e ricezione di caratteri</a> (Ajax)</li>
</ul>
<a href="http://www.terenzani.it/tag/ascii-table" rel="tag">ASCII Table</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a>, <a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=w4pWXSbGcWw:H03SejcHgGc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=w4pWXSbGcWw:H03SejcHgGc:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=w4pWXSbGcWw:H03SejcHgGc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=w4pWXSbGcWw:H03SejcHgGc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=w4pWXSbGcWw:H03SejcHgGc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=w4pWXSbGcWw:H03SejcHgGc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=w4pWXSbGcWw:H03SejcHgGc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=w4pWXSbGcWw:H03SejcHgGc:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=w4pWXSbGcWw:H03SejcHgGc:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/108/escape-conversione-decimale-esadecimale-javascript-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migrare da Splinder: un nuovo importer per WordPress</title>
		<link>http://www.terenzani.it/105/migrare-da-splinder-un-nuovo-importer-per-wordpress/</link>
		<comments>http://www.terenzani.it/105/migrare-da-splinder-un-nuovo-importer-per-wordpress/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 23:14:22 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Plugin (WP)]]></category>
		<category><![CDATA[Sponsor & Segnalazioni]]></category>
		<category><![CDATA[Varie]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[francesco-fullone]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[splinder]]></category>
		<category><![CDATA[Splinder-Motime-Importer]]></category>
<category>francesco fullone</category><category>plugin</category><category>segnalazioni</category><category>splinder</category><category>Splinder Motime Importer</category><category>WordPress</category>
		<guid isPermaLink="false">http://www.terenzani.it/105/migrare-da-splinder-un-nuovo-importer-per-wordpress/</guid>
		<description><![CDATA[Nuovo plugin per migrare da Splinder a WordPress]]></description>
			<content:encoded><![CDATA[<p>Citazione d&#8217;obbligo anche se un po&#8217; in ritardo: Francesco <a href="http://www.fullo.net/blog/">Fullo</a>ne si è preso la briga di riscrivere il mio <a href="http://www.terenzani.it/38/importare-i-post-di-splinder-in-wordpress/">vecchio plugin</a>, ora non più funzionante, per migrare da Splinder a WordPress.</p>
<p><span id="more-105"></span>Sulla pagina del nuovo <a href="http://www.fullo.net/blog/archives/2008/01/02/migrare-il-proprio-blog-da-splinder-a-wordpress-23x/">Splinder Importer per Wordpress</a> tutte le informazioni ed il link per il download.</p>
<p>Oltre che alla riconoscenza nei confronti di Fullo per il suo gentilissimo lavoro non retribuito, credo sia d&#8217;obbligo un ringraziamento anche all&#8217;insistenza di <a href="http://www.andreabeggi.net/">Beggi</a> :D</p>
<a href="http://www.terenzani.it/tag/francesco-fullone" rel="tag">francesco fullone</a>, <a href="http://www.terenzani.it/tag/plugin" rel="tag">plugin</a>, <a href="http://www.terenzani.it/tag/segnalazioni" rel="tag">segnalazioni</a>, <a href="http://www.terenzani.it/tag/splinder" rel="tag">splinder</a>, <a href="http://www.terenzani.it/tag/splinder-motime-importer" rel="tag">Splinder Motime Importer</a>, <a href="http://www.terenzani.it/tag/wordpress" rel="tag">WordPress</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=4TR3vyoBkb0:K6RRw3U6caY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=4TR3vyoBkb0:K6RRw3U6caY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=4TR3vyoBkb0:K6RRw3U6caY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=4TR3vyoBkb0:K6RRw3U6caY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=4TR3vyoBkb0:K6RRw3U6caY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=4TR3vyoBkb0:K6RRw3U6caY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=4TR3vyoBkb0:K6RRw3U6caY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=4TR3vyoBkb0:K6RRw3U6caY:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=4TR3vyoBkb0:K6RRw3U6caY:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/105/migrare-da-splinder-un-nuovo-importer-per-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integrare video nel proprio sito con le API di YouTube</title>
		<link>http://www.terenzani.it/103/integrare-video-nel-proprio-sito-con-le-api-di-youtube/</link>
		<comments>http://www.terenzani.it/103/integrare-video-nel-proprio-sito-con-le-api-di-youtube/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 17:29:47 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[YouTube]]></category>
<category>API</category><category>google</category><category>YouTube</category>
		<guid isPermaLink="false">http://www.terenzani.it/103/integrare-video-nel-proprio-sito-con-le-api-di-youtube/</guid>
		<description><![CDATA[Alcuni esempi e un po' di link sulle nuove API di YouTube introdotte da Google, che permettono, con estrema facilitÃ?Â , di accedere a tutte le informazioni sui video presenti in YouTube.]]></description>
			<content:encoded><![CDATA[<p>Le API di YouTube permetto di accedere praticamente a tutte le informazioni sui video presenti in YouTube.</p>
<p>Si possono creare facilmente gadget, integrare video nei propri siti web o nelle proprie applicazioni (web e non), fino a, potenzialmente, creare una copia di YouTube con una nuova interfaccia creata a nostro piacimento.</p>
<p><span id="more-103"></span></p>
<p>Si puÃ?Â² partire da <a href="http://gdata.youtube.com/feeds/videos?vq=dipsetmuthafucka+loli+OR+dipsetmuthafucka">una semplice richiesta</a>, che esegue una ricerca in YouTube e ritorna un feed Atom con tutte le informazioni su ogni video dei risultati: categorie, tag, autore, lunghezza del filmato, feed con altre informazioni sull&#8217;autore, feed dei commenti al video, feed ai video correlati&#8230; praticamente ogni informazione relativa alla ricerca e ad ogni singolo video nei risultati.</p>
<p>Con questi dati possiamo facilmente ricreare una pagina dei risultati a nostro piacimento, ma se non abbiamo particolari esigenze, ancora più facilmente, riutilizzare una versione preformattata fornita direttamente nel feed. Questo è il risultato:</p>
<div style="border:1px solid #ccc;padding:5px">
<div style="color: #000000;font-family: Arial, Helvetica, sans-serif;     font-size:12px; font-size: 12px; width: 555px;">
<table cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td width="140" valign="top" rowspan="2">
<div style="border: 1px solid #999999; margin: 0px 10px 5px 0px;"><a href="http://www.youtube.com/watch?v=VOKVJ6p-ncE"><img alt="" src="http://img.youtube.com/vi/VOKVJ6p-ncE/2.jpg"></a></div>
</td>
<td width="256" valign="top">
<div style="font-size: 12px; font-weight: bold;"><a style="font-size: 15px; font-weight: bold;                  font-decoration: none;" href="http://www.youtube.com/watch?v=VOKVJ6p-ncE">Loli &amp; the Chones -- &quot;You&#39;re So Cool&quot;</a><br />
</div>
<div style="font-size: 12px; margin: 3px 0px;"><span>I quit drinking.</span></div>
</td>
<td style="font-size: 11px; line-height: 1.4em; padding-left: 20px;             padding-top: 1px;" width="146" valign="top">
<div><span style="color: #666666; font-size: 11px;">From:</span><br />
<a href="http://www.youtube.com/profile?user=dipsetmuthafucka">dipsetmuthafucka</a></div>
<div><span style="color: #666666; font-size: 11px;">Views:</span> 370</div>
<div style="white-space: nowrap;text-align: left"><img style="border: 0px none; margin: 0px; padding: 0px;                    vertical-align: middle; font-size: 11px;" align="top" alt="" src="http://gdata.youtube.com/static/images/icn_star_full_11x11.gif"> <img style="border: 0px none; margin: 0px; padding: 0px;vertical-align: middle; font-size: 11px;" align="top" alt="" src="http://gdata.youtube.com/static/images/icn_star_full_11x11.gif"> <img style="border: 0px none; margin: 0px; padding: 0px;                    vertical-align: middle; font-size: 11px;" align="top" alt="" src="http://gdata.youtube.com/static/images/icn_star_full_11x11.gif"> <img style="border: 0px none; margin: 0px; padding: 0px; vertical-align: middle; font-size: 11px;" align="top" alt="" src="http://gdata.youtube.com/static/images/icn_star_full_11x11.gif"> <img style="border: 0px none; margin: 0px; padding: 0px;                    vertical-align: middle; font-size: 11px;" align="top" alt="" src="http://gdata.youtube.com/static/images/icn_star_half_11x11.gif"></div>
<div style="font-size: 11px;">8 <span style="color: #666666; font-size: 11px;">ratings</span></div>
</td>
</tr>
<tr>
<td><span style="color: #666666; font-size: 11px;">Time:</span><br />
<span style="color: #000000; font-size: 11px; font-weight: bold;">01:10</span></td>
<td style="font-size: 11px; padding-left: 20px;"><span style="color: #666666; font-size: 11px;">More in</span><br />
<a href="http://www.youtube.com/categories_portal?c=10">Music</a></td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Da qui a fare un <a href="http://www.terenzani.it/wp-content/lab/youtube/search.html">semplice motore di ricerca video</a> bastano davvero poche righe di codice.</p>
<p>Ecco due esempi interessanti di utilizzo delle API di YouTube:</p>
<ol>
<li><a href="http://flashandburn.net/youtubeBadge/">YouTube Badge</a>, un&#8217;idea semplice e carina per linkare il proprio profilo di YouTube sul nostro sito web o nelle pagine dei nostri profili sparsi per la rete. Ecco come appare:
<div style="text-align:center; width: 165px;"><a href="http://flashandburn.net/youtubeBadge/ripoffecords/goto"><img border="0" src="http://flashandburn.net/youtubeBadge/ripoffecords/logo:1-color:000000/recent.png"></a><br /><a href="http://www.flashandburn.net/youtubeBadge/ripoffecords/refer" style="color: #666; font-size: 10px;">Get your own youTube badge</a></div>
</li>
<li>Personalmente sono rimasto molto colpito dall&#8217;idea di <a href="http://www.virtualvideomap.com/">Virtual Video Map</a>, un integrazione delle API di YouTube con quelle di Google Maps. Suggestivo quanto inutile :D</li>
</ol>
<p><a href="http://groups.google.com/group/youtube-api/web/share-your-project">Altri esempi nell&#8217;apposito forum</a>.</p>
<p>Per chi è interessato ad approfondire l&#8217;argomento delle API di YouTube, ecco qualche link:</p>
<ul>
<li><a href="http://www.youtube.com/dev">La Developer Area su YouTube</a>, con i link alle principali risorse dedicate agli sviluppatori.</li>
<li><a href="http://code.google.com/apis/youtube/developers_guide_protocol.html">YouTube Data API Protocol</a>, la documentazione principale per interagire con YouTube utilizzando le nuove API introdotte da Google.</li>
</ul>
<p>Partendo da queste pagine potete facilmente trovare esempi, documentazione, forum di discussione per confrontarsi con altri sviluppatori, librerie e classi in diversi linguaggi. Buon divertimento! :D</p>
<a href="http://www.terenzani.it/tag/api" rel="tag">API</a>, <a href="http://www.terenzani.it/tag/google" rel="tag">google</a>, <a href="http://www.terenzani.it/tag/youtube" rel="tag">YouTube</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=jQOUYSSU2rY:_CSkWaO7p4U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=jQOUYSSU2rY:_CSkWaO7p4U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=jQOUYSSU2rY:_CSkWaO7p4U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=jQOUYSSU2rY:_CSkWaO7p4U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=jQOUYSSU2rY:_CSkWaO7p4U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=jQOUYSSU2rY:_CSkWaO7p4U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=jQOUYSSU2rY:_CSkWaO7p4U:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=jQOUYSSU2rY:_CSkWaO7p4U:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=jQOUYSSU2rY:_CSkWaO7p4U:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/103/integrare-video-nel-proprio-sito-con-le-api-di-youtube/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cambio Hosting</title>
		<link>http://www.terenzani.it/98/cambio-hosting/</link>
		<comments>http://www.terenzani.it/98/cambio-hosting/#comments</comments>
		<pubDate>Mon, 24 Sep 2007 16:39:45 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Sponsor & Segnalazioni]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[character-encoding]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[trasferimento-dominio]]></category>
<category>backup</category><category>character encoding</category><category>MySQL</category><category>trasferimento dominio</category>
		<guid isPermaLink="false">http://www.terenzani.it/98/cambio-hosting/</guid>
		<description><![CDATA[<strong>Cambio hosting</strong>. Alcuni problemi con i <strong>caratteri speciali</strong> nel <strong>trasferimento dominio</strong> su TopHost, <strong>risolti</strong> con un piccolo script PHP.]]></description>
			<content:encoded><![CDATA[<p>Qualche giorno fa <strong>ho trasferito il mio dominio</strong> dal mio vecchio provider al controverso TopHost (spero di non pentirmene :P). </p>
<p>Per <strong>trasferire i dati da un vecchio database</strong> MySQL 4 verso un nuovo e fiammante MySQL 5, esiste sicuramente un metodo per <strong>non <em>incasinare</em> le lettere accentate</strong> ed i caratteri speciali, ma io al primo tentativo non l&#8217;ho imbroccato :D</p>
<p>CosÃ?Â¬, piuttosto di cancellare, esportare, reimportare&#8230; insomma: andare a tentativi, ho scritto <strong>un mini script in PHP per riconvertire in UTF-8 il character encoding di post e commenti</strong>.<span id="more-98"></span> Se qualcuno lo vuole riutilizzare <strong><a href="http://www.terenzani.it/wp-content/lab/php/utf8_encode_from_select.phps">il codice è on line</a></strong>.</p>
<p>Lo script è da mettere nella root dell&#8217;installazione di WordPress e da lanciare via browser (non serve nessuna personalizzazione).</p>
<p>Volendo è facilmente <strong>riutilizzabile anche al di fuori di WordPress</strong>. Basta sostituire:</p>
<p><code>require('wp-blog-header.php');</code></p>
<p>Con il codice di connessione e selezione del database, e personalizzare la variabile <code>$select</code>, che è un&#8217;array multidimensionale con questa struttura:</p>
<pre><code>$select = array(
	$nome_tabella => array(
		'$id_record',
		"SELECT $id_record, $campi_testuali_da_convertire_in_utf8 FROM $nome_tabella"
	),
	...
);</code></pre>
<p>Ma ora mi viene anche un dubbio&#8230; <strong>non esiste una query SQL che possa sostituire questo script?</strong></p>
<a href="http://www.terenzani.it/tag/backup" rel="tag">backup</a>, <a href="http://www.terenzani.it/tag/character-encoding" rel="tag">character encoding</a>, <a href="http://www.terenzani.it/tag/mysql" rel="tag">MySQL</a>, <a href="http://www.terenzani.it/tag/trasferimento-dominio" rel="tag">trasferimento dominio</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=7q89Q9irm3k:b0hwey7z2oc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=7q89Q9irm3k:b0hwey7z2oc:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=7q89Q9irm3k:b0hwey7z2oc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=7q89Q9irm3k:b0hwey7z2oc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=7q89Q9irm3k:b0hwey7z2oc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=7q89Q9irm3k:b0hwey7z2oc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=7q89Q9irm3k:b0hwey7z2oc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=7q89Q9irm3k:b0hwey7z2oc:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=7q89Q9irm3k:b0hwey7z2oc:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/98/cambio-hosting/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Google Analytics in italiano. Non va</title>
		<link>http://www.terenzani.it/91/google-analytics-in-italiano-non-va/</link>
		<comments>http://www.terenzani.it/91/google-analytics-in-italiano-non-va/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 15:02:30 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google Analytics]]></category>
<category>google</category><category>Google Analytics</category>
		<guid isPermaLink="false">http://www.terenzani.it/91/google-analytics-in-italiano-non-va/</guid>
		<description><![CDATA[22 Agosto 2007. Da qualche giorno la versione in lingua italiana di Google Analytics non funziona completamente.]]></description>
			<content:encoded><![CDATA[<p>Da qualche giorno la versione di Google Analytics in lingua italiana ha qualche problema: <strong>non si riescono a vedere i dettagli dei diversi rapporti, nÃ?Â© ad eseguire filtri sui dati</strong>.</p>
<p><strong>Colpa di un escape</strong>. La causa sembra un apostrofo senza escape in una variabile Javascript.</p>
<p><img src='http://www.terenzani.it/wp-content/uploads/2007/08/errore-js-google-analytics.PNG' alt='Errore Javascript in Google Analytics' /><span id="more-91"></span></p>
<p>Chi non riesce a dormire sereno senza prima controllare le proprie statistiche, nell&#8217;attesa di un <code>\</code> da parte del team tecnico di Google Analytics, puÃ?Â² modificare la lingua nel proprio profilo utente e continuare ad usufruire a pieno di Google Analytics.</p>
<a href="http://www.terenzani.it/tag/google" rel="tag">google</a>, <a href="http://www.terenzani.it/tag/google-analytics" rel="tag">Google Analytics</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=JUrNL0Y29ZM:HwyIL3y2Lkw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=JUrNL0Y29ZM:HwyIL3y2Lkw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=JUrNL0Y29ZM:HwyIL3y2Lkw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=JUrNL0Y29ZM:HwyIL3y2Lkw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=JUrNL0Y29ZM:HwyIL3y2Lkw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=JUrNL0Y29ZM:HwyIL3y2Lkw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=JUrNL0Y29ZM:HwyIL3y2Lkw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=JUrNL0Y29ZM:HwyIL3y2Lkw:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=JUrNL0Y29ZM:HwyIL3y2Lkw:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/91/google-analytics-in-italiano-non-va/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Sui feed RSS e le date</title>
		<link>http://www.terenzani.it/89/sui-feed-rss-e-le-date/</link>
		<comments>http://www.terenzani.it/89/sui-feed-rss-e-le-date/#comments</comments>
		<pubDate>Tue, 21 Aug 2007 10:24:55 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[SQL]]></category>
<category>feed</category><category>MySQL</category><category>PHP</category><category>RSS</category><category>SQL</category>
		<guid isPermaLink="false">http://www.terenzani.it/89/sui-feed-rss-e-le-date/</guid>
		<description><![CDATA[Stai creando un feed RSS ed hai qualche problema con la gestione delle date? Se stai usando PHP e MySQL questo post potrebbe esserti utile. ]]></description>
			<content:encoded><![CDATA[<p>Una data, in un feed RSS, dovrebbe essere in questo formato:</p>
<p><code>Thu, 29 Jul 2010 18:05:01 GMT</code></p>
<p>In PHP, una data formattata secondo <a href="http://asg.web.cmu.edu/rfc/rfc822.html#sec-5">questa convenzione</a>, si ottiene nel seguente modo:<span id="more-89"></span></p>
<pre><code>&lt;?php echo date('D, d M Y H:i:s') ?> GMT</code></pre>
<h2>MySQL + date_format()</h2>
<p>Comunque, nella creazione di un feed RSS con dati estratti da un database MySQL, puÃ?Â² essere più comodo utilizzare la funzione di MySQL <code><a href="http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format">date_format</a></code> per ottenere una data formattata direttamente dal database:</p>
<pre><code>SELECT
   date_format(data, '%a, %d %b %Y %H:%i:%s GMT') AS pubDate
   FROM items;</code></pre>
<p>Naturalmente il campo &#8220;data&#8221; deve essere di tipo DATE, DATETIME o TIMESTAMP.</p>
<h2>Creare un feed RSS</h2>
<p>Ecco quindi uno snippet per stampare gli item di un ipotetico feed RSS:</p>
<pre><code>&lt;?php
$get = mysql_query('SELECT
   link, title, description,
   date_format(data, "%a, %d %b %Y %H:%i:%s GMT") AS pubDate
   FROM `items` ORDER BY data DESC');

while($r = mysql_fetch_assoc($get)){
echo &lt;&lt;&lt;ITEMS
&lt;item>
   &lt;title>$r[title]&lt;/title>
   &lt;description>$r[description]&lt;/description>
   &lt;pubDate>$r[pubDate]&lt;/pubDate>
   &lt;link>$r[link]&lt;/link>
&lt;/item>
ITEMS;
}
?></code></pre>
<h2>Parsing di un feed RSS</h2>
<p>Nel parsing di un feed solitamente il problema è il contrario, si ha una stringa che rappresenta una data, mentre noi vorremmo un formato più riutilizzabile.</p>
<p>Per risolvere ci viene incontro <code><a href="http://it.php.net/strtotime">strtotime</a></code>, una comoda funzione di PHP: <q>La funzione aspetta di avere una stringa contenente un formato di data in Inglese e proverÃ?Â  a passare questo formato all&#8217;UNIX timestamp</q>.</p>
<pre><code>&lt;?php
echo strtotime('Thu, 16 Aug 2007 16:51:25 GMT');
// Il risultato sarÃ?Â  1187283085
?></code></pre>
<a href="http://www.terenzani.it/tag/feed" rel="tag">feed</a>, <a href="http://www.terenzani.it/tag/mysql" rel="tag">MySQL</a>, <a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a>, <a href="http://www.terenzani.it/tag/rss" rel="tag">RSS</a>, <a href="http://www.terenzani.it/tag/sql" rel="tag">SQL</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=eC54U2a2XDk:IV2eGxzmVbE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=eC54U2a2XDk:IV2eGxzmVbE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=eC54U2a2XDk:IV2eGxzmVbE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=eC54U2a2XDk:IV2eGxzmVbE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=eC54U2a2XDk:IV2eGxzmVbE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=eC54U2a2XDk:IV2eGxzmVbE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=eC54U2a2XDk:IV2eGxzmVbE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=eC54U2a2XDk:IV2eGxzmVbE:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=eC54U2a2XDk:IV2eGxzmVbE:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/89/sui-feed-rss-e-le-date/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Intervista a Leonardo Bellini autore di “Fare business con il web”</title>
		<link>http://www.terenzani.it/85/intervista-a-leonardo-bellini-autore-di-fare-business-con-il-web/</link>
		<comments>http://www.terenzani.it/85/intervista-a-leonardo-bellini-autore-di-fare-business-con-il-web/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 13:12:20 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Sponsor & Segnalazioni]]></category>
		<category><![CDATA[interviste]]></category>
		<category><![CDATA[Leonardo-Bellini]]></category>
		<category><![CDATA[web-marketing]]></category>
<category>interviste</category><category>Leonardo Bellini</category><category>web marketing</category>
		<guid isPermaLink="false">http://www.terenzani.it/85/intervista-a-leonardo-bellini-autore-di-fare-business-con-il-web/</guid>
		<description><![CDATA[Si tratta di un intervista a Leonardo Bellini, autore del libro Fare business con il web e le domande... le scegliete voi :)]]></description>
			<content:encoded><![CDATA[<p>Volevo segnalare l&#8217;iniziativa <a href="http://www.seo-carpediem.com/blog/2007/06/06/consulenza-web-marketing-gratuita-da-noi-puoi/">Consulenza web marketing gratuita</a> di Vincenzo Arcidiacono su <a href="http://www.seo-carpediem.com/">SEO Carpediem</a>.</p>
<p>Per maggiori dettagli sull&#8217;iniziativa vi rimando al <a href="http://www.seo-carpediem.com/blog/2007/06/06/consulenza-web-marketing-gratuita-da-noi-puoi/">post originale</a>, ma, in breve, si tratta di un&#8217;intervista a <a href="http://www.digitalmarketinglab.it/">Leonardo Bellini</a>, autore del libro <a href="http://www.farebusinessconilweb.com/">Fare business con il web</a> e consulente di comunicazione, web marketing e chissÃ?Â   quante altre cose&#8230; </p>
<p>L&#8217;intervista si svolgerÃ?Â  nei prossimi giorni e le domande, be&#8217;, le potete scegliere un po&#8217; voi. Ma c&#8217;è una cosa che non mi è chiara, e spero che Vincenzo me la possa spiegare, magari anche nei commenti di questo post: come cavolo faccio a comunicargli le mie domande? :D</p>
<a href="http://www.terenzani.it/tag/interviste" rel="tag">interviste</a>, <a href="http://www.terenzani.it/tag/leonardo-bellini" rel="tag">Leonardo Bellini</a>, <a href="http://www.terenzani.it/tag/web-marketing" rel="tag">web marketing</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=0S4qqxUB5cs:i7kisVeRsfw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=0S4qqxUB5cs:i7kisVeRsfw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=0S4qqxUB5cs:i7kisVeRsfw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=0S4qqxUB5cs:i7kisVeRsfw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=0S4qqxUB5cs:i7kisVeRsfw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=0S4qqxUB5cs:i7kisVeRsfw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=0S4qqxUB5cs:i7kisVeRsfw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=0S4qqxUB5cs:i7kisVeRsfw:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=0S4qqxUB5cs:i7kisVeRsfw:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/85/intervista-a-leonardo-bellini-autore-di-fare-business-con-il-web/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Feed completi con il tag more in WordPress</title>
		<link>http://www.terenzani.it/83/feed-completi-con-il-tag-more-in-wordpress/</link>
		<comments>http://www.terenzani.it/83/feed-completi-con-il-tag-more-in-wordpress/#comments</comments>
		<pubDate>Sun, 27 May 2007 21:55:09 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Plugin (WP)]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[wp-hacks]]></category>
<category>feed</category><category>PHP</category><category>plugin</category><category>RSS</category><category>WordPress</category><category>wp hacks</category>
		<guid isPermaLink="false">http://www.terenzani.it/83/feed-completi-con-il-tag-more-in-wordpress/</guid>
		<description><![CDATA[<strong>Feed completi e tag more</strong>. Dalla versione 2.1 di WordPress l'Ã?â??utilizzo del tag &#60;!--Ã?â??more--Ã?â??> "tronca" il post nei feed. Un plugin per evitarlo.]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.terenzani.it/wp-content/uploads/2007/05/wp-feed-options.jpg' alt='' style="float:left;margin: 0 5px 5px 0" /> A partire dalla versione 2.1 di WordPress, inserendo il tag more in un post, il post viene troncato nei feed XML anche se si sceglie di mostrare i feed completi. Per eliminare questa feature dal mio blog e mostrare sempre il feed completo, ho scritto queste poche righe di codice da incollare in un plugin (testate anche in WordPress 2.2):<span id="more-83"></span></p>
<pre class="code"><code>function f_full_feed() {
  global $more;
  if( is_feed() )
    $more = true;
}

add_action('parse_query', 'f_full_feed');</code></pre>
<p>Esistono ben altri due plugin che fanno la stessa cosa, ne hanno parlato <a href="http://www.andreabeggi.net/2007/04/03/wordpress-tag-more-e-feed-completi/">Andrea Beggi</a> e <a href="http://www.italiasw.com/feed-rss-dei-blog-wordpress-plugin-per-fornirli-%E2%80%9Ccompleti%E2%80%9D/">Italia SW</a>, sono anche questi molto semplici, ma vi suggerisco di usare il mio :D</p>
<p>Non cambia molto, ma la &#8220;concorrenza&#8221; filtra il contenuto del post: sovrascrive il post spezzato con il post completo ed elimina il tag more dal post. La mia versione si limita a settare il valore di una variabile globale a <code>true</code>, cambiando cosÃ?Â¬ il comportamento della funzione <code>the_content()</code> di WordPress che stampa il contenuto.</p>
<p>In sostanza il mio codice esegue una semplice operazione e la esegue una sola volta, gli altri due plugin eseguono alcune semplici operazione e le eseguono per ogni post. I benefici che ne trarrete non vi cambieranno praticamente niente :D</p>
<a href="http://www.terenzani.it/tag/feed" rel="tag">feed</a>, <a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a>, <a href="http://www.terenzani.it/tag/plugin" rel="tag">plugin</a>, <a href="http://www.terenzani.it/tag/rss" rel="tag">RSS</a>, <a href="http://www.terenzani.it/tag/wordpress" rel="tag">WordPress</a>, <a href="http://www.terenzani.it/tag/wp-hacks" rel="tag">wp hacks</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=kkpl_lUAhFo:fB4P6w4k1zc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=kkpl_lUAhFo:fB4P6w4k1zc:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=kkpl_lUAhFo:fB4P6w4k1zc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=kkpl_lUAhFo:fB4P6w4k1zc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=kkpl_lUAhFo:fB4P6w4k1zc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=kkpl_lUAhFo:fB4P6w4k1zc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=kkpl_lUAhFo:fB4P6w4k1zc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=kkpl_lUAhFo:fB4P6w4k1zc:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=kkpl_lUAhFo:fB4P6w4k1zc:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/83/feed-completi-con-il-tag-more-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Uno Userscript per scrivere “limone”</title>
		<link>http://www.terenzani.it/77/greasemonkey-userscript-per-scrivere-limone/</link>
		<comments>http://www.terenzani.it/77/greasemonkey-userscript-per-scrivere-limone/#comments</comments>
		<pubDate>Wed, 18 Apr 2007 15:33:29 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Sponsor & Segnalazioni]]></category>
		<category><![CDATA[Varie]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[userscripts]]></category>
<category>FireFox</category><category>greasemonkey</category><category>Javascript</category><category>spam</category><category>userscripts</category>
		<guid isPermaLink="false">http://www.terenzani.it/77/greasemonkey-userscript-per-scrivere-limone/</guid>
		<description><![CDATA[Uno <strong>userscript</strong> di <a href="http://www.greasespot.net/"><strong>Greasemonkey</strong></a> per compilare un form.]]></description>
			<content:encoded><![CDATA[<p>Da qualche giorno <a href="http://antirez.com/">il blog di Antirez</a> è il mio blog preferito: è ricco di spunti legati alla programmazione e non solo.</p>
<p><strong>Per proteggersi dallo spam</strong> usa un semplice, ma, almeno per ora, efficace metodo: se non sei uno spambot devi scrivere &#8220;limone&#8221; in un text box :D</p>
<p><img style="border:1px solid #ccc" src='http://www.terenzani.it/wp-content/uploads/2007/04/antirez.png' alt='antirez.png' /></p>
<p>Dato che la parola è sempre quella e dato che il nick che uso per commentare pure, mi sono fatto <strong>un mini user script per <a href="http://www.greasespot.net/">Greasemonkey</a></strong> <span id="more-77"></span> (che è una estensione per Firefox) per compilare in automatico quel form. Quindi se mi trovo nella pagina di un post del blog di Antirez, l&#8217;userscript inserisce al posto mio &#8220;<em>Fra_T</em>&#8221; nel campo &#8220;<em>Nome</em>&#8221; e &#8220;<em>limone</em>&#8221; in quello dell&#8217;antispam (eh sÃ?Â¬, è brutto non sapere cosa fare! :)</p>
<p><img  style="border:1px solid #ccc" src='http://www.terenzani.it/wp-content/uploads/2007/04/antirez2.png' alt='antirez2.png' /></p>
<p>Se qualcuno usa l&#8217;estensione Greasemonkey, legge il blog di Antirez ed è abbastanza pigro da voler installare questo userscript, eccolo: <a href="http://www.terenzani.it/wp-content/lab/userscripts/antirez.user.js">antirez.user.js</a>.</p>
<p>Lo script è da personalizzare sostituendo &#8220;<em>Fra_T</em>&#8221; con il nome preferito per commentare.</p>
<p><img  style="border:1px solid #ccc" src='http://www.terenzani.it/wp-content/uploads/2007/04/antirez-userscript1.png' alt='' /></p>
<h2>Su Greasemonkey:</h2>
<ul>
<li><a href="http://www.greasespot.net/">Greasespot.net</a>, la homepage dell&#8217;estensione Greasemonkey.</li>
<li><a href="http://diveintogreasemonkey.org/">Dive Into Greasemonkey</a>, un libro, consultabile gratuitamente online, <q>about programming with Greasemonkey</q>.</li>
<li><a href="http://userscripts.org/">Userscripts.org</a>, un mega contenitore di user script.</li>
</ul>
<a href="http://www.terenzani.it/tag/firefox" rel="tag">FireFox</a>, <a href="http://www.terenzani.it/tag/greasemonkey" rel="tag">greasemonkey</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a>, <a href="http://www.terenzani.it/tag/spam" rel="tag">spam</a>, <a href="http://www.terenzani.it/tag/userscripts" rel="tag">userscripts</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=KE-RWDRDQFQ:WvrR8nZskRA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=KE-RWDRDQFQ:WvrR8nZskRA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=KE-RWDRDQFQ:WvrR8nZskRA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=KE-RWDRDQFQ:WvrR8nZskRA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=KE-RWDRDQFQ:WvrR8nZskRA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=KE-RWDRDQFQ:WvrR8nZskRA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=KE-RWDRDQFQ:WvrR8nZskRA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=KE-RWDRDQFQ:WvrR8nZskRA:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=KE-RWDRDQFQ:WvrR8nZskRA:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/77/greasemonkey-userscript-per-scrivere-limone/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>L’architettura a plugin di WordPress</title>
		<link>http://www.terenzani.it/74/architettura-a-plugin-di-wordpress/</link>
		<comments>http://www.terenzani.it/74/architettura-a-plugin-di-wordpress/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 12:47:49 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Plugin (WP)]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wp-hacks]]></category>
		<category><![CDATA[wp-hooks]]></category>
<category>API</category><category>PHP</category><category>plugin</category><category>WordPress</category><category>wp hacks</category><category>wp hooks</category>
		<guid isPermaLink="false">http://www.terenzani.it/74/larchitettura-a-plugin-di-wordpress/</guid>
		<description><![CDATA[Questo post non è una guida completa su <em>Come fare plugin per WordPress</em>. &#200; un approfondimento (o un ripasso) sulle funzioni principali dell'architettura a plugin di WordPress, ma puÃ?Â² essere anche un buon (spero) punto di partenza.]]></description>
			<content:encoded><![CDATA[<p>Alcune cose che puoi leggere prima (o dopo) di questo post:</p>
<ul>
<li><a href="http://www.wordpress-it.it/wiki/Main/DocumentazioneSviluppatori">Documentazione per gli Sviluppatori</a> in Italiano.</li>
<li><a href="http://codex.wordpress.org/Developer_Documentation#Plugin_Development">Developer Documentation #Plugin Development</a> in Inglese.</li>
<li><a href="http://pixline.net/2006/10/anatomia-di-un-plugin-wordpress/">Anatomia di un plugin per WordPress</a>, un esempio, passo a passo, della creazione di un plugin.</li>
</ul>
<h2>Pseudo Type Callback</h2>
<p>Alcune funzioni di PHP accettano come argomento il callback di una funzione.</p>
<p><strong>Il callback (<em>richiamo</em>) di una funzione</strong>, che puÃ?Â² essere una stringa (per semplici funzioni) o un array (per metodi di oggetti o di classi), è usato appunto per richiamare la funzione a cui si riferisce. Potete far riferimento al manuale PHP per approfondire l&#8217;argomento: <a href="http://www.php.net/callback#language.types.callback">pseudo type callback</a>.</p>
<h2>call_user_func_array</h2>
<p>Una funzione che accetta come argomento un callback è, tra le altre, <strong>la funzione <code><a href="http://it2.php.net/manual/en/function.call-user-func-array.php">call_user_func_array</a></code></strong>. Prendiamo come esempio la seguente funzione <code>somma</code>, il cui callback è la stringa &#8220;somma&#8221;, ovvero il suo nome:</p>
<pre><code>function somma($a, $b){
   echo $a + $b;
}</code></pre>
<p><strong>Con <code>call_user_func_array( 'somma', array(7, 9) )</code> otteniamo lo stesso output che otterremmo con <code>somma(7, 9)</code></strong>, cioè 16.</p>
<p>In effetti scrivere <code>somma(7, 9)</code> è decisamente più elegante che scrivere <code>call_user_func_array( 'somma', array(7, 9) )</code>, ma in certi contesti l&#8217;uso di questa funzione potrebbe essere utile, credo.</p>
<p>Ad esempio possiamo immaginare che in una parte di un programma (un plugin) decidiamo quali funzioni eseguire ed in quale punto, cosÃ?Â¬ che nel cuore del programma quelle funzioni siano eseguite. Ma mantenendo i plugin ed il programma principale separati.</p>
<p>L&#8217;architettura a plugin di WordPress è basta su questo sistema. Sparse un po&#8217; ovunque ci sono funzioni che eseguono callback.</p>
<h2>Hello World.</h2>
<p>Semplificando leggermente, immaginiamo che questo sia il codice sorgente di WordPress:</p>
<pre><code>$string = 'Hello World !!'
$string = apply_filters('hello', $string);</code></pre>
<p>La funzione <code>apply_filters</code> non fa altro che eseguire le funzioni agganciate al tag <q>hello</q>, passandogli come argomento <code>$string</code>, e ritornando il valore di <code>$string</code> eventualmente modificato.</p>
<p>CosÃ?Â¬, se vogliamo modificare <code>$string</code>, basta definire una funzione ed agganciarla al tag <q>hello</q>:</p>
<pre><code>function hello_fra($string){
   return str_replace('World', 'Fra', $string);
}

add_filter('hello', 'hello_fra')</code></pre>
<p>Ok, forse abbiamo semplificato troppo, ma il principio è questo :)</p>
<h2>add_filter, add_action e $wp_filter.</h2>
<p><strong>Tutti gli agganci tra tag e callback sono gestiti tramite l&#8217;array multidimensionale <code>$wp_filter</code></strong>. Se non altro per curiositÃ?Â , potete scrivere in un plugin <code>print_r($wp_filter)</code>, tanto per sapere di cosa stiamo parlando :)</p>
<p>Per aggiungere un item a <code>$wp_filter</code> si puÃ?Â² usare la funzione <code>add_filter</code> o il suo alias <code>add_action</code>:</p>
<pre><code>add_filter('tag', 'callback', 'prioritÃ?Â ', 'argomenti passati nel callback')</code></pre>
<p>Gli argomenti tag e callback li abbiamo giÃ?Â  visti, <strong>la prioritÃ?Â  è opzionale, di default è 10, indica con quale prioritÃ?Â  deve essere eseguito il callback</strong> (ad esempio una funzione che permette di eseguire il codice PHP in un post, dovrebbe essere eseguita prima di quella che si occupa della formattazione).</p>
<p><strong>Il numero di argomenti accettati nel callback, anche questo opzionale, di default è 1: indica quanti argomenti passare alla funzione richiamata</strong>. Se nel codice di WordPress trovassimo un:</p>
<pre><code>$something = appy_filters('wp_tag', $something, $someother);</code></pre>
<p>Per poter utilizzare la variabile <code>$someother</code> in una funzione, dovremmo specificare che gli argomenti aspettati sono 2 e non 1, quindi:</p>
<pre><code>add_filter('wp_tag', 'valid_callback', 10, <strong>2</strong>);</code></pre>
<p>La funzione <code>appy_filters</code> non ha un numero massimo di argomenti (in teoria): prende tutti gli argomenti passati e valuta quanti passarne ad ogni funzione agganciata al tag specificato.</p>
<h2>A caccia di Hooks.</h2>
<p>Oltre a sbirciare il codice di altri plugin o conoscere a memoria tutti gli agganci di WordPress (improbabile) e non tutti documentati, avete <strong>un&#8217;altra via per capire quale hook usare</strong> per&#8230; &#8220;fare qualcosa&#8221;: <strong>cercare direttamente nel codice sorgente i richiami a tre funzioni</strong>:</p>
<ol>
<li><code>apply_filters('aggancio', $var[, $var,...])</code></li>
<li><code>do_action('aggancio'[, $var, $var,...])</code></li>
<li><code>do_action_ref_array('aggancio', array)</code></li>
</ol>
<p>Quando vedete una di queste tre funzioni, significa che in quel punto potete agganciare una qualche funzione con le stesse modalitÃ?Â  sopra descritte.</p>
<h2>Filtri e azioni.</h2>
<p>La prima (<code>apply_filters</code>), come abbiamo visto, permette di filtrare il valore di una variabile eseguendo i callback agganciati ad un tag.</p>
<p>La seconda e la terza (<code>do_action</code> e <code>do_action_ref_array</code>) sono molto simili alla prima, ma non servono per filtrare, servono invece per creare un&#8217;azione. In pratica la differenza è che <strong>la prima ritorna un risultato, la seconda e la terza no</strong>.</p>
<p>Quindi probabilmente, nel codice sorgente di WordPress, troveremo qualcosa di simile per un filtro:</p>
<pre><code>$var = apply_filters('filtro', $var);</code></pre>
<p>Mentre per una azione direttamente:</p>
<pre><code>do_action('azione');</code></pre>
<p>Per lo stesso principio, generalmente, <strong>una funzione agganciata ad un filtro dovrÃ?Â  ritornare un risultato, mentre una funzione agganciata ad un&#8217;azione dovrÃ?Â  produrre output</strong>.</p>
<h2>Rendere disponibili API.</h2>
<p>Naturalmente creare nuovi tag a cui agganciare funzioni non è prerogativa unica di WordPress e, anzi, nel caso di plugin complicati, sarebbe opportuno mettere a disposizione API per il plugin stesso. Ad esempio, per permettere di filtrare una variabile di un plugin, basta:</p>
<pre><code>// Codice del mio complicatissimo plugin
$var = apply_filters('fra_t_complicato_plugin_filtri_per_var', $var)</code></pre>
<p>E cosÃ?Â¬ facendo ogni altro plugin, utilizzando il tag &#8220;fra_t_complicato_plugin_filtri_per_var&#8221;, potrÃ?Â  modificare il valore di <code>$var</code> del mio plugin.</p>
<h2>Il tag speciale &#8216;all&#8217;.</h2>
<p>Se volessimo agganciare un callback a tutti i filtri e le azioni, potremmo usare il tag &#8220;all&#8221;.</p>
<p>Non mi viene in mente niente di particolarmente utile da farci, ma ad esempio, con un plugin come il seguente, possiamo ottenere alcune statistiche su i vari agganci richiamati nelle diverse parti del codice:</p>
<pre><code>// Aggancio la funzione che conterÃ?Â  il numero di tag chiamati.
add_filter('all', 'count_tags_called');

function count_tags_called($arg, $return_counter = false){
	static $a = 0;

	if($return_counter) return $a;

	$a++;
	return $arg;
}

// Ritorna il numero di tag chiamati
function tags_called(){
	return count_tags_called('', true);
}
function num_actions(){
	global $wp_actions;
	return count($wp_actions);
}
// Quanti dei tag chiamati sono usati come filtro (totale - numero di azioni)
function num_filters(){
	return tags_called() - num_actions();
}

// Stampa statistiche sull'uso di filtri e azioni
function api_stats(){
	_e('Here we have '.tags_called().' hooks: '.num_filters().' filters and '.num_actions().' actions');
}</code></pre>
<p>Con <code>api_stats()</code> sapremo quante volte è stata utilizzata una delle tre funzioni <code>apply_filters</code>, <code>do_action</code> o <code>do_action_ref_array</code>. Il totale è diviso in filtri ed in azioni. L&#8217;output sarebbe qualcosa de genere: <q><em>Here we have 1168 hooks: 1152 filters and 16 actions</em></q>. </p>
<p>Questo codice è da usare solo a scopo di test, in quanto usare il tag &#8216;all&#8217; attualmente &#8220;sballa&#8221; tutte le prioritÃ?Â  in <code>$wp_filter</code> ed alcuni plugin potrebbero non funzionare correttamente.</p>
<h2>Altre funzioni</h2>
<p>Altre funzioni utili sono:</p>
<ul>
<li><strong><code>remove_filter</code> e l&#8217;alias <code>remove_action</code></strong>, permettono di rimuovere filtri ed azioni. Accettano gli stessi argomenti di <code>add_action</code> e <code>add_filter</code>.</li>
<li><strong><code>register_activation_hook</code> e <code>register_deactivation_hook</code></strong>, permettono di eseguire una funzione all&#8217;attivazione ed alla disattivazione di un plugin. Si usano cosÃ?Â¬:
<pre><code>function alla_attivazione(){
   return;
}
register_activation_hook(__file__, 'alla_attivazione');</code></pre>
</li>
</ul>
<h2>Approfondimenti.</h2>
<p>Le funzioni trattate in questo post sono prese dal file di WordPress (ad oggi, la versione 2.1) <cite>wp-includes/plugin.php</cite>. Per approfondire potete far riferimento a quello.</p>
<a href="http://www.terenzani.it/tag/api" rel="tag">API</a>, <a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a>, <a href="http://www.terenzani.it/tag/plugin" rel="tag">plugin</a>, <a href="http://www.terenzani.it/tag/wordpress" rel="tag">WordPress</a>, <a href="http://www.terenzani.it/tag/wp-hacks" rel="tag">wp hacks</a>, <a href="http://www.terenzani.it/tag/wp-hooks" rel="tag">wp hooks</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=DcQdp8qw8M0:-I098XiK1RA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=DcQdp8qw8M0:-I098XiK1RA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=DcQdp8qw8M0:-I098XiK1RA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=DcQdp8qw8M0:-I098XiK1RA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=DcQdp8qw8M0:-I098XiK1RA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=DcQdp8qw8M0:-I098XiK1RA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=DcQdp8qw8M0:-I098XiK1RA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=DcQdp8qw8M0:-I098XiK1RA:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=DcQdp8qw8M0:-I098XiK1RA:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/74/architettura-a-plugin-di-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>GT Post Approval [WordPress Plugin]</title>
		<link>http://www.terenzani.it/64/gt-post-approval-wordpress-plugin/</link>
		<comments>http://www.terenzani.it/64/gt-post-approval-wordpress-plugin/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 16:51:45 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Plugin (WP)]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Globalwarming-Awareness2007]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[SEO-World-Championship]]></category>
		<category><![CDATA[web-marketing]]></category>
<category>Globalwarming Awareness2007</category><category>PHP</category><category>plugin</category><category>SEO</category><category>SEO World Championship</category><category>web marketing</category><category>WordPress</category>
		<guid isPermaLink="false">http://www.terenzani.it/64/gt-post-approvation-wordpress-plugin/-e</guid>
		<description><![CDATA[<phpcode><?php if( is_single() ){ ?>
<p class='transl'><a href='http://www.gt-globalwarming-awareness2007.org/wordpress/gt-post-approval-for-gt-globalwarming-awareness2007-wordpress-plugin/'>English  <img src='http://www.terenzani.it/wp-content/plugins/polyglot_flags/gb.png'></a></p>
<?php } ?></phpcode> Approva o rifiuta un post. I post rifiutati sono visibili solo nell'archivio dell'autore. &#200; il plugin scritto per il blog del forum di Giorgiotave che partecipa al SEO World Championship.]]></description>
			<content:encoded><![CDATA[<p><strong>GT Post approval è un plugin per blog multi utente basati su <a href="http://wordpress.org/">WordPress</a></strong>. Il plugin è compatibile con WordPress 2.0.X e 2.1.</p>
<p>GT Post approval aggiunge un pulsante approva/rifiuta a fianco di ogni post nella pagina <em>edit > post</em> del pannello di amministrazione di WordPress.</p>
<p><img src="http://www.terenzani.it/wp-content/lab/wordpress-plugin/gt-post-approval/gt-post-approval.png" alt="" /></p>
<p>Un post approvato è visibile in ogni sezione di WordPress, mentre uno rifiutato è visibile solo nell&#8217;archivio dell&#8217;autore.</p>
<p>In pratica si ottiene la <strong>Massima partecipazione senza che le linee editoriali siano comprese e condivise da tutti</strong> :D</p>
<ul>
<li><a href="http://www.terenzani.it/wp-content/lab/wordpress-plugin/gt-post-approval/gt-post-approval.zip">Scarica il plugin</a>.</li>
<li><a href="http://www.terenzani.it/wp-content/lab/wordpress-plugin/gt-post-approval/gt-post-approval.phps">Sorgente</a>.</li>
</ul>
<h2>Installazione.</h2>
<p>Come tutti i plugin: <a href="http://www.terenzani.it/wp-content/lab/wordpress-plugin/gt-post-approval/gt-post-approval.zip">download</a>, decomprimere e piazzare nella cartella <em>wp-content/plugins</em>. Pannello di amministrazione > Plugin > Cercare la riga <cite>GT Post approval</cite> e cliccare <cite>attiva</cite>.</p>
<p>All&#8217;installazione tutti i post giÃ?Â  pubblicati vengono approvati, mentre i successivi post dovranno essere approvati manualmente da un editore o un amministratore.</p>
<h2>Difetti.</h2>
<p>Il plugin ha il difetto che non si integra con le funzioni per stampare categorie o archivi temporali. Per fare un esempio, se l&#8217;unico post di gennaio è un post non approvato, il link &#8220;gennaio&#8221; apparirÃ?Â  ma non conterrÃ?Â  nessun post.</p>
<h2>PerchÃ?Â© GT?!</h2>
<p>&#8220;GT&#8221; perchÃ?Â© è scritto per il blog <a href="http://www.gt-globalwarming-awareness2007.org/">GT Globalwarming Awareness2007</a>, che è il blog degli <a href="http://www.giorgiotave.it/forum/posizionamento-nei-motori-di-ricerca/27883-team-gt-per-globalwarming-awareness2007.html">utenti del forum di Giorgiotave che partecipano al SEO World Championship</a>.</p>
<p><a href="http://www.seoworldchampionship.com/"><img src='http://www.terenzani.it/wp-content/uploads/2007/02/seowc2007-180x58.gif' alt='SEO World Championship: sito ufficiale' /></a></p>
<h2>Tecnicismi.</h2>
<p>Il plugin usa le API della <a href="http://codex.wordpress.org/WP_Query">classe WP_Query</a> per modificare <a href="http://www.wordpress-it.it/wiki/Main/IlLoop">il loop di WordPress</a> e per prendere informazioni sui post correnti. La API per eseguire funzioni all&#8217;attivazione di un determinato plugin e alcune API per modificare l&#8217;area di amministrazione. Sbircia il <a href="http://www.terenzani.it/wp-content/lab/wordpress-plugin/gt-post-approval/it-gt-post-approval.phps">codice commentato in italiano</a> o <a href="http://www.terenzani.it/wp-content/lab/wordpress-plugin/gt-post-approval/gt-post-approval.phps">in inglese</a>, se ti interessa.</p>
<a href="http://www.terenzani.it/tag/globalwarming-awareness2007" rel="tag">Globalwarming Awareness2007</a>, <a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a>, <a href="http://www.terenzani.it/tag/plugin" rel="tag">plugin</a>, <a href="http://www.terenzani.it/tag/seo" rel="tag">SEO</a>, <a href="http://www.terenzani.it/tag/seo-world-championship" rel="tag">SEO World Championship</a>, <a href="http://www.terenzani.it/tag/web-marketing" rel="tag">web marketing</a>, <a href="http://www.terenzani.it/tag/wordpress" rel="tag">WordPress</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=gOqPSWreqcI:6VHsn1zXU08:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=gOqPSWreqcI:6VHsn1zXU08:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=gOqPSWreqcI:6VHsn1zXU08:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=gOqPSWreqcI:6VHsn1zXU08:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=gOqPSWreqcI:6VHsn1zXU08:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=gOqPSWreqcI:6VHsn1zXU08:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=gOqPSWreqcI:6VHsn1zXU08:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=gOqPSWreqcI:6VHsn1zXU08:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=gOqPSWreqcI:6VHsn1zXU08:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/64/gt-post-approval-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>La mia WP-Avventura con WordPress MU ed i Widgets</title>
		<link>http://www.terenzani.it/56/wp-avventura-con-wordpress-mu-e-widgets/</link>
		<comments>http://www.terenzani.it/56/wp-avventura-con-wordpress-mu-e-widgets/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 11:33:10 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Widgets]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress-MU]]></category>
<category>plugin</category><category>Widgets</category><category>WordPress</category><category>WordPress MU</category>
		<guid isPermaLink="false">http://www.terenzani.it/56/wp-avventura-con-wordpress-mu-e-widgets/-e</guid>
		<description><![CDATA[<img style="float:right;" src="http://www.terenzani.it/wp-content/uploads/2007/01/mucca.miniatura.jpg" alt="" /> Ho installato <a href="http://mu.wordpress.org/">WordPress MU</a> in locale su Windows. Ho avuto qualche problema ad installare il <a href="http://automattic.com/code/widgets/">plugin per i Widgets</a>, ma alla fine ci sono riuscito. Questa la procedura, ma, innanzi tutto...]]></description>
			<content:encoded><![CDATA[<h2>WordPress MU, come si pronuncia?</h2>
<p>Preso dalle <a href="http://mu.wordpress.org/faq/">FAQ su WP MU</a>:</p>
<blockquote><p>La pronuncia popolare è scandire le lettere separatamente, WordPress <em>em-iu</em>. L&#8217;intenzione originale era usare il simbolo &micro; da pronunciare <em>miu</em>. Ma se vi sentite abbastanza bovini potete anche dire &#8220;WordPress Muuuuu&#8221; :D</p></blockquote>
<p style="text-align:center;"><img src="http://www.terenzani.it/wp-content/uploads/2007/01/mucca1.jpg" alt="Muuuu!" /></p>
<h2>Installazione di WordPress MU.</h2>
<p>Ho <a href="http://mu.wordpress.org/download/">scaricato WP MU</a> 1.0, è ho caricato i file nella cartella <cite>mu</cite> del mio server locale. Poi ho <a href="http://www.wordpress-it.it/wiki/Main/WPSulVostroComputer3#sMain.WPSulVostroComputer3_4">creato un host virtuale</a> modificando il file httpd.conf di Apache e il file host di Windows per collegare un dominio a localhost/mu (una cosa interessantissima: mio padre una volta si è preso un virus sul PC che, proprio modificando il file host di Windows, impediva di fare gli aggiornamenti delle definizioni coi principali anti-virus).</p>
<p>Mi sono collegato a <cite>localhost.wpmu</cite> (l&#8217;host che con molta fantasia ho scelto nello step precedente), ho seguito la procedura di installazione e tutto è andato bene.</p>
<h2>Installare i plugin in WordPressMU.</h2>
<p>In WPMU ci sono 2 modi per installare plugin, uno è caricarli nella cartella <cite>wp-content/mu-plugins</cite>, in questo caso non c&#8217;è bisogno di attivarli, ed i plugin valgono per tutti i blog.</p>
<p>Il secondo modo per installare i plugin è come quello della versione di WordPress&#8230; ehm&#8230; &#8220;normale&#8221;, ovvero caricarli nella cartella <cite>wp-content/plugins</cite>, in questo caso ogni blog deve attivarli. Di default i singoli blog NON possono attivare plugin, si possono abilitare a farlo delle opzioni di amministrazione.</p>
<h2>Installare il Widgets Plugin.</h2>
<p>Installare il plugin per i Widgets è semplicissimo, davvero! Solo che ci ho perso 4 ore. Ho seguito <a href="http://jason.lah.cc/2006/04/07/widgets-as-an-mu-plugin-on-wordpress-mu/">le istruzioni di Jason</a>, quelle di <a href="http://codex.wordpress.org/WPMU_Widgets">Codex</a>, ho letto qualche <a href="http://mu.wordpress.org/forums/tags.php?tag=widgets">discussione nel forum di supporto</a>, e anche se <a href="http://mu.wordpress.org/forums/topic.php?id=2119#post-12694">Drmike si è arrabbiato</a>, io non ci riuscivo ad installare &#8217;sto plugin.</p>
<p>Insomma, il plugin c&#8217;era. <a href="http://automattic.com/code/widgets/themes/">I temi erano giÃ?Â  Widgetizzati</a>, ma il menu per selezionare i Widgets non mi voleva apparire.</p>
<p>Dopo vari tentativi e ricerche, ho notato che con la distribuzione del plugin per i Widgets c&#8217;erano anche i file functions.php e sidebar.php dei due temi base di WordPress: Kubrick e Classic. Ho provato a sostituirli agli originali e&#8230; per magia il menu per selezionare i Widgets è apparso.</p>
<p>Guardando con più attenzione, i temi non erano giÃ?Â  Widgetizzati come credevo, ma erano mezzi Widgetizzati! Cioè, la sidebar era Widgetizzata (è questo che mi ha fregato), ma il file functions.php no!</p>
<p>Va be&#8217;, tutto e bene quel che finisce bene, spero che questo post faccia risparmiare tempo a qualcuno. In compenso ho provato ad installare Wordpress MU su Terenzani.it, ma non c&#8217;è stata storia. Forse è in conflitto con WordPress <em>normale</em> che è installato nella root e col fatto che ad installarlo nell&#8217;unico database che ho a disposizione, una tabella la hanno in comune. Non so&#8230;</p>
<p>Ah, nelle mie disperate ricerche ho trovato alcune risorse interessanti su WordPress Muuuuu: </p>
<ul>
<li><a href="http://mu.bloggles.info/">WordPress MU Plugins</a>, un blog dedicato ai plugin per WP MU.</li>
<li>La pagina di <a href="http://codex.wordpress.org/WordPressMU">WordPress MU su Codex</a>, raccoglie molti link ed informazioni utili.</li>
<li>Il <a href="http://www.wpmuwiki.org/Main_Page">Wiki di WordPress MU</a>, che, credo, diventerÃ?Â  l&#8217;equivalente di Codex per WordPress.</li>
<li><a href="http://wpmudev.org/">WPMUDEV.org</a>, ad oggi è ancora in allestimento, ma ha giÃ?Â  un sacco di risorse utili (plugin, temi, patch, news&#8230;).</li>
</ul>
<p><em>(La mucca con gli occhiali è presa da <a href="http://www.corvitto.com">http://www.corvitto.com</a>).</em></p>
<a href="http://www.terenzani.it/tag/plugin" rel="tag">plugin</a>, <a href="http://www.terenzani.it/tag/widgets" rel="tag">Widgets</a>, <a href="http://www.terenzani.it/tag/wordpress" rel="tag">WordPress</a>, <a href="http://www.terenzani.it/tag/wordpress-mu" rel="tag">WordPress MU</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=3HVoHJVyvZY:jwqoddQEziY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=3HVoHJVyvZY:jwqoddQEziY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=3HVoHJVyvZY:jwqoddQEziY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=3HVoHJVyvZY:jwqoddQEziY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=3HVoHJVyvZY:jwqoddQEziY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=3HVoHJVyvZY:jwqoddQEziY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=3HVoHJVyvZY:jwqoddQEziY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=3HVoHJVyvZY:jwqoddQEziY:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=3HVoHJVyvZY:jwqoddQEziY:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/56/wp-avventura-con-wordpress-mu-e-widgets/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Utility Javascript per tracciare link esterni e download con Google Analytics</title>
		<link>http://www.terenzani.it/54/urchintrack-utility-tracciare-link-esterni-e-download-con-google-analytics/</link>
		<comments>http://www.terenzani.it/54/urchintrack-utility-tracciare-link-esterni-e-download-con-google-analytics/#comments</comments>
		<pubDate>Thu, 21 Dec 2006 15:30:20 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[tracking]]></category>
<category>google</category><category>Google Analytics</category><category>Javascript</category><category>tracking</category>
		<guid isPermaLink="false">http://www.terenzani.it/54/urchintrack-utility-tracciare-link-esterni-e-download-con-google-analytics/-e-e</guid>
		<description><![CDATA[<lang_it><strong>GA-urchin.trackLinks.js</strong>, una piccola libreria in Javascript per <strong>tenere traccia dei link esterni e dei download con Google Analytics</strong>.</lang_it> <lang_en><strong>GA-urchin.trackLinks.js</strong>: an easy way to track <strong>outgoing clicks and downloads</strong> with <strong>Google Analytics</strong>.</lang_en> (<strong>Update:</strong> version 0.2.)]]></description>
			<content:encoded><![CDATA[<p>Ho scritto una piccola libreria in Javascript per <strong>monitorare <a href="http://www.google.com/support/analytics/bin/answer.py?answer=27246">link esterni</a> e <a href="http://www.google.com/support/analytics/bin/answer.py?answer=27242">download</a> con <a href="http://www.google.com/analytics/">Google Analytics</a></strong> in modo semplice e &#8220;semi&#8221; automatico.</p>
<p>Il manuale di GA propone infatti, per monitore click su link la cui destinazione non puÃ?Â² contenere lo script di monitoraggio, di inserire un <code>onclick = urchinTracker('/directory/che figurerÃ?Â  nelle statistiche.htm')</code>.</p>
<p>La libreria <strong><a href="http://www.terenzani.it/wp-content/lab/javascript/ga-urchin.trackLinks/GA-urchin.trackLinks.js">GA-urchin.trackLinks.js</a> evita di modificare ogni link esterno o di download.</strong></p>
<ol>
<li><a href="http://www.terenzani.it/wp-content/lab/javascript/ga-urchin.trackLinks/GA-urchin.trackLinks.js"><strong>Download</strong> GA-urchin.trackLinks.js</a></li>
<li><a href="http://www.terenzani.it/wp-content/lab/javascript/ga-urchin.trackLinks/demo.htm"><strong>Demo</strong> online</a></li>
</ol>
<h2>Come si usa?</h2>
<p>La sintassi minima per <strong>tracciare i link esterni</strong> è:</p>
<pre class="code"><code>urchin = new urchin();
urchin.trackLinks();</code></pre>
<p><strong>Per tracciare anche i download:</strong></p>
<pre class="code"><code>urchin = new urchin();
urchin.trackDownload = "zip|rar|phps|avi|pdf";
urchin.trackLinks();</code></pre>
<p>In questo esempio lo script traccerÃ?Â , oltre ai link esterni, i click a risorse interne con estensione zip, rar, phps, avi o pdf.</p>
<p><strong>Dove inserire il codice?</strong> Ci sono 2 possibilitÃ?Â  + 1:</p>
<ol>
<li>Se il vostro codice di Google Analytics è posto prima della chiusura del tag <code>body</code>, come indicato dalle linee guida di GA, dovete modificare:
<pre class="code"><code>...
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript">&lt;/script>
&lt;script type="text/javascript">
_uacct = "UA-XXXXXX-X";
urchinTracker();
&lt;/script>
&lt;/body></code></pre>
<p>e farlo diventare:</p>
<pre class="code"><code>...
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript">&lt;/script>
<strong>&lt;script src="/path/GA.urchin.trackLinks.js" type="text/javascript">&lt;/script></strong>
&lt;script type="text/javascript">
<strong>urchin = new urchin();
urchin.trackDownload = "zip|rar|phps|avi";
urchin.trackLinks();</strong>
_uacct = "UA-XXXXXX-X";
urchinTracker();
&lt;/script>
&lt;/body></code></pre>
</li>
<li>Se, invece, volete mettere lo script nell&#8217;<code>head</code>, il codice della libreria deve essere azionato all&#8217;evento onload:
<pre class="code"><code>...
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript">&lt;/script>
<strong>&lt;script src="/path/GA.urchin.trackLinks.js" type="text/javascript">&lt;/script></strong>
&lt;script type="text/javascript">
<strong>window.onload=function(){
  urchin = new urchin();
  urchin.trackDownload = "zip|rar|phps|avi";
  urchin.trackLinks();
}</strong>
_uacct = "UA-XXXXXX-X";
urchinTracker();
&lt;/script>
&lt;/head></code></pre>
<p>O, per non rischiare di perdere click, utilizzare un&#8217;apposita <a href="http://webreflection.blogspot.com/2006/11/my-domcontentloaded-final-solution.html">libreria, come quella di Andrea Giammarchi</a> (meno di 1 Kb), ed il codice:</p>
<pre class="code"><code>...
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript">&lt;/script>
<strong>&lt;script src="/path/GA.urchin.trackLinks.js" type="text/javascript">&lt;/script>
&lt;script src="/path/onContent.js" type="text/javascript">&lt;/script></strong>
&lt;script type="text/javascript">
<strong>onContent(function(){
  urchin = new urchin();
  urchin.trackDownload = "zip|rar|phps|avi";
  urchin.trackLinks();
});</strong>
_uacct = "UA-XXXXXX-X";
urchinTracker();
&lt;/script>
&lt;/head></code></pre>
<p>Se decidete di mettere il codice nell&#8217;<code>head</code> questa seconda soluzione è la più indicata.
</li>
<li><strong>Se invece utilizzate WordPress</strong>, potete utilizzare il plugin <a href="http://cavemonkey50.com/code/google-analyticator/">Google Analyticator</a> di <a href="http://cavemonkey50.com/">Ronald Heft</a> che utilizza proprio queste due librerie Javascript e permette di personalizzare il codice direttamente dal pannello di amministrazione di WordPress.</li>
</ol>
<h2>La procedura dello script.</h2>
<p>Questi sono, a grandi linee, gli step dello script al lancio della funzione <code>trackLinks()</code>:</p>
<ol>
<li>Ricava il dominio corrente (es. <cite>www.terenzani.it</cite>).</li>
<li>Verifica ogni link del documento.</li>
<li>Solo se il link è interno:
<ol>
<li>Controlla l&#8217;estensione</li>
<li>Se l&#8217;estensione è tra quelle impostate tra i file da considerare scaricabili, setta a quel link, per l&#8217;evento <code>onclick</code>, il lancio della funzione <code>urchinTracker('/<strong>download</strong>/destinazione--a--cui--punta--il--link')</code>.</li>
</ol>
</li>
<li>Se non è un link interno, setta per l&#8217;evento <code>onclick</code> il lancio della funzione <code>urchinTracker('/<strong>outgoing</strong>/destinazione--a--cui--punta--il--link')</code>.</li>
</ol>
<h2>Il codice commentato.</h2>
<p>Metto le mani avanti: non ho molta esperienza con Javascript, quindi è possibile che abbia usato qualche metodo bislacco. Comunque ogni consiglio è ben accetto.</p>
<p><strong><a href="http://www.terenzani.it/wp-content/lab/javascript/ga-urchin.trackLinks/GA-urchin.trackLinks.js">GA urchin.trackLinks 0.1</a>:</strong></p>
<pre class="code"><code>function urchin(){

 // La variabile in cui settare le estensioni da considerare download separate da |
 this.trackDownload = '';

 this.trackLinks = function(){
  var a = document.getElementsByTagName('a');
  // Estrae dalla location attuale il dominio
  // In domain[0] è salvato http://dominio.it/ o https://dominio.it/
  // In domain[2] dominio.it
  var domain = /^(http|https):\\/\\/([a-z-.0-9]+)[\\/]{0,1}/i.exec(window.location);
  // Le espressioni per individuare link interni e download
  var internalLink = new RegExp("^(http|https):\\/\\/"+domain[2], "i");
  var isDownload = new RegExp("("+this.trackDownload+")$", "i");

  // Per ogni link...
  for(var i = 0; i < a.length; i++){
   // Se è interno...
   if(internalLink.test(a[i].href)){
    // ... e se ha l'estensione definita in this.trackDownload ...
    if(this.trackDownload &#038;&#038; isDownload.test(a[i].href))
     a[i].onclick = function(){
      // Pulisce e traccia l'URL
      urchinTracker('/download/'+this.href.replace(/^(http|https):\\/\\/([a-z-.0-9]+)\\//i, '').split('/').join('--'));
     }
   }
   else
   // è esterno
    a[i].onclick = function(){
     // Pulisce e traccia l'URL
     urchinTracker('/outgoing/'+this.href.replace(/^http:\\/\\/|https:\\/\\//i, '').split('/').join('--'));
    }
  }
 }
} </code></pre>
<h2>CompatibilitÃ?Â  browser.</h2>
<p>La libreria è stata testata con IE (5, 5.5 e 7) FireFox 2.0 e Opera 9.0 per Windows. Se avete un altro browser potete provare la <a href="http://www.terenzani.it/wp-content/lab/javascript/ga-urchin.trackLinks/demo.htm">demo on line</a>.</p>
<h2>Change logs.</h2>
<p>Version 0.2: corrected the regexp to detect downloads: <code><ins datetime="2006-12-29T09:10:30+00:00">"("+</ins>this.trackDownload+"<ins datetime="2006-12-29T09:10:30+00:00">)</ins>$"</code>.</p>
<a href="http://www.terenzani.it/tag/google" rel="tag">google</a>, <a href="http://www.terenzani.it/tag/google-analytics" rel="tag">Google Analytics</a>, <a href="http://www.terenzani.it/tag/javascript" rel="tag">Javascript</a>, <a href="http://www.terenzani.it/tag/tracking" rel="tag">tracking</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=cgc2t3mhHHQ:zWxhMNrYSJ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=cgc2t3mhHHQ:zWxhMNrYSJ0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=cgc2t3mhHHQ:zWxhMNrYSJ0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=cgc2t3mhHHQ:zWxhMNrYSJ0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=cgc2t3mhHHQ:zWxhMNrYSJ0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=cgc2t3mhHHQ:zWxhMNrYSJ0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=cgc2t3mhHHQ:zWxhMNrYSJ0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=cgc2t3mhHHQ:zWxhMNrYSJ0:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=cgc2t3mhHHQ:zWxhMNrYSJ0:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/54/urchintrack-utility-tracciare-link-esterni-e-download-con-google-analytics/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Come leggere feed RSS e Atom con WordPress e la classe PHP MagpieRSS</title>
		<link>http://www.terenzani.it/53/come-leggere-feed-rss-e-atom-con-wordpress-e-la-classe-php-magpierss/</link>
		<comments>http://www.terenzani.it/53/come-leggere-feed-rss-e-atom-con-wordpress-e-la-classe-php-magpierss/#comments</comments>
		<pubDate>Mon, 18 Dec 2006 14:21:53 +0000</pubDate>
		<dc:creator>Fra_T</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[magpieRSS]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
<category>Atom</category><category>feed</category><category>magpieRSS</category><category>parser</category><category>PHP</category><category>RSS</category><category>WordPress</category>
		<guid isPermaLink="false">http://www.terenzani.it/53/come-leggere-feed-rss-e-atom-con-wordpress-e-la-classe-php-magpierss/</guid>
		<description><![CDATA[<strong>Leggere un feed RSS (0.9, 1, 2) o Atom con Wordpress è relativamente facile</strong>, in quanto la distribuzione di default comprende il <a href="http://magpierss.sourceforge.net/">set di classi PHP MagpieRSS</a> (modificate e raggruppate dal team di <a href="http://wordpress.org">WordPress</a>) che costituiscono appunto un parser per questi <strong>formati XML</strong> di <strong>Syndication</strong>.]]></description>
			<content:encoded><![CDATA[<p>Ecco uno <a href="http://it.wikipedia.org/wiki/Snippet">snippet</a> per stampare in un tema un elenco puntato con <strong>gli ultimi sette bookmark salvati in <a href="http://del.icio.us/">del.icio.us</a> e presi da un feed RSS</strong> (in questo caso il formato del feed è l&#8217;RSS 1 -- RDF Site Summary -- locato all&#8217;URL <a href="http://del.icio.us/rss/lit">http://del.icio.us/rss/lit</a>, che è quello del mio account):</p>
<pre class="code" style="clear:right"><code>&lt;?php
// Include nel tema il file wp-includes/rss-functions.php
  require_once(ABSPATH . WPINC . "/rss-functions.php");

// Inizializza la classe e prende il feed RSS
  $feedRSS = @fetch_rss("http://del.icio.us/rss/lit");

// Verifica che ci siano item nel feed RSS
  if(isset($feedRSS->items) &#038;&#038; 0 != count($feedRSS->items)){
?>

// Crea un elenco puntato con gli item del feed RSS
&lt;ul>
  &lt;?php
    foreach($feedRSS->items as $k => $tag){
// Limita il numero di item da mostrare a 7.
      if($k==7) break;
      echo "&lt;li>&lt;a href='$tag[link]'>$tag[title]&lt;/a>&lt;/li>";
      if($tag['description']) echo " - $tag[description]&lt;/li>";
      else echo "&lt;/li>";
    }
  }
  ?>
&lt;/ul></code></pre>
<p><strong>MagpieRSS prevede anche un sistema di caching</strong> che di default è attivo. Quindi lo script non prende il feed ogni volta che una pagina viene visualizzata, ma allo scadere della cache, che <strong>di default dura 1 ora</strong>.</p>
<p>Se vogliamo aumentare la durata della cache, dobbiamo definire la constante <code>MAGPIE_CACHE_AGE</code> con la durata in secondi della cache, prima del richiamo al metodo <code>fetch_rss()</code>:</p>
<pre class="code"><code>// require_once(ABSPATH . WPINC . "/rss-functions.php");

// La cache durerÃ?Â  un giorno (24 ore * 60 minuti * 60 secondi = 86400)
define('MAGPIE_CACHE_AGE', 86400);

// $rss = @fetch_rss("http://del.icio.us/rss/lit");
// ecc...</code></pre>
<p>Se poi volte sapere <strong>quali dati potete ricavare da un feed</strong> un semplice metodo è l&#8217;uso della funzione <code><a href="http://it2.php.net/manual/it/function.print-r.php">print_r()</a></code> di PHP:</p>
<pre class="code"><code>&lt;pre>
&lt;?php
// Include nel tema il file wp-includes/rss-functions.php
  require_once (ABSPATH . WPINC . "/rss-functions.php");

// Inizializza la classe e prende il feed RSS
  $feedRSS = @fetch_rss("http://del.icio.us/rss/lit");

// Le informazioni sul feed:
  print_r($feedRSS->channel);

// Gli elementi degli items:
  print_r($feedRSS->items);

?>&lt;/pre></code></pre>
<p><strong>Se non utilizzate WordPress</strong> la procedura non è molto diversa, ci ha scritto un tutorial Simone Carletti: <a href="http://www.rss-world.info/codice/php/script/semplice_parser_php.php">Semplice parser in PHP</a>.</p>
<p>Buon divertimento con le vostre sidebar! :)</p>
<a href="http://www.terenzani.it/tag/atom" rel="tag">Atom</a>, <a href="http://www.terenzani.it/tag/feed" rel="tag">feed</a>, <a href="http://www.terenzani.it/tag/magpierss" rel="tag">magpieRSS</a>, <a href="http://www.terenzani.it/tag/parser" rel="tag">parser</a>, <a href="http://www.terenzani.it/tag/php" rel="tag">PHP</a>, <a href="http://www.terenzani.it/tag/rss" rel="tag">RSS</a>, <a href="http://www.terenzani.it/tag/wordpress" rel="tag">WordPress</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/t-lab?a=BaoAdLkYyJg:Rg2Waa1PdsQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=BaoAdLkYyJg:Rg2Waa1PdsQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/t-lab?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=BaoAdLkYyJg:Rg2Waa1PdsQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/t-lab?i=BaoAdLkYyJg:Rg2Waa1PdsQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=BaoAdLkYyJg:Rg2Waa1PdsQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/t-lab?i=BaoAdLkYyJg:Rg2Waa1PdsQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=BaoAdLkYyJg:Rg2Waa1PdsQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/t-lab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/t-lab?a=BaoAdLkYyJg:Rg2Waa1PdsQ:GLSgKK_ckEE"><img src="http://feeds.feedburner.com/~ff/t-lab?i=BaoAdLkYyJg:Rg2Waa1PdsQ:GLSgKK_ckEE" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.terenzani.it/53/come-leggere-feed-rss-e-atom-con-wordpress-e-la-classe-php-magpierss/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
