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

<channel>
	<title>diploD &#187; SEO</title>
	<atom:link href="http://www.diplod.it/tag/seo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diplod.it</link>
	<description>by Davide Del Monte</description>
	<lastBuildDate>Fri, 13 Feb 2015 14:26:10 +0000</lastBuildDate>
	<language>it-IT</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Ajax con jquery: la chiamata perfetta. Locale e cross domain, SEO friendly.</title>
		<link>http://www.diplod.it/2014/07/18/ajax-con-jquery-la-chiamata-perfetta-locale-e-cross-domain-seo-friendly/</link>
		<comments>http://www.diplod.it/2014/07/18/ajax-con-jquery-la-chiamata-perfetta-locale-e-cross-domain-seo-friendly/#comments</comments>
		<pubDate>Fri, 18 Jul 2014 13:57:22 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[chiamata]]></category>
		<category><![CDATA[cross domain]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[jsonp]]></category>
		<category><![CDATA[perfetta]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1452</guid>
		<description><![CDATA[I primi esempi di codice per fare una chiamata ajax erano brutti. Punto. C'era l'inevitabile if per gestire i diversi browser e qualche oggetto in più da maneggiare. Ora, grazie a jquery e a browser più umani, si riesce a gestire una chiamata ajax molto più agevolmente. Restano però alcuni aspetti critici: tra cui le chiamate cross domain e gli url SEO friendly.
Esiste quindi la chiamata perfetta? Si, ma come tutte le cose perfette, è sicuramente perfettibile.]]></description>
				<content:encoded><![CDATA[<p>I primi esempi di codice per fare una chiamata <strong>ajax</strong> erano brutti. Punto. C&#8217;era l&#8217;inevitabile if per gestire i diversi browser e qualche oggetto in più da maneggiare. Ora, grazie a <strong>jquery</strong> e a browser più umani, si riesce a gestire una chiamata ajax molto più agevolmente. Restano però alcuni aspetti critici: tra cui le chiamate <strong>cross domain</strong> e gli url <strong>SEO friendly</strong>.</p>
<p>Esiste quindi la <strong>chiamata perfetta</strong>? Si, ma come tutte le cose perfette, è sicuramente perfettibile.</p>
<p>Nell&#8217;esempio che segue c&#8217;è una pagina con due pulsanti: il primo esegue una chiamata ajax per caricare una pagina locale, il secondo esegue una chiamata cross-domain (nello specifico a Facebook) attraverso JSONP.</p>
<p>Sono arrivato all&#8217;esempio finale partendo da questi tre utilissimi spunti:</p>
<ul>
<li><a href="http://jquery-howto.blogspot.it/2013/09/jquery-cross-domain-ajax-request.html" target="_blank">4 jQuery cross domain ajax request methods</a></li>
<li><a href="http://kyleschaeffer.com/development/the-perfect-jquery-ajax-request/" target="_blank">The perfect jquery ajax request</a></li>
<li><a href="http://moz.com/blog/create-crawlable-link-friendly-ajax-websites-using-pushstate" target="_blank">Create crawlable, link-friendly ajax websites using pushState()</a></li>
</ul>
<p>Ed ecco il <a title="ajax chiamata perfetta" href="http://lab.diplod.it/ajaxcall/" target="_blank"><strong>risultato finale in funzione</strong></a>.</p>
<p><span id="more-1452"></span></p>
<p>Il codice html della pagina è il seguente:</p>
<p><code>&lt;div id="container"&gt;<br />
&lt;h1&gt;Esempi Chiamate Ajax con jQuery&lt;/h1&gt;<br />
&lt;a class="button" id="call" href="test.html" &gt;Esegui chiamata normale&lt;/a&gt;<br />
&lt;a class="button" id="call-cross" href="facebook.html"&gt;Esegui chiamata Cross Domain&lt;/a&gt;<br />
&lt;div id="ajax-panel"&gt;Questo div contiente il risultato della chiamata&lt;/div&gt;<br />
&lt;/div&gt;</code></p>
<p>Il codice javascript della chiamata locale è il seguente: di fatto viene usato il metodo $.ajax() per fare la chiamata. Nel <em>beforeSend</em> &#8211; codice eseguito prima di fare la chiamata vera e propria &#8211; viene eseguita una funzione che carica una immagine di cortesia; nel <em>success</em> &#8211; codice eseguito in caso di chiamata con esito positivo &#8211; viene elaborata la risposta, cambiando il contenuto di un div della pagina; nell&#8217;<em>error</em> &#8211; codice eseguito in caso di errore &#8211; viene mostrato un messaggio all&#8217;interno dello stesso div.</p>
<p><code>$("#call").click(function (e) {<br />
<strong>//SEO friendly</strong><br />
url = $(this).attr('href');<br />
<strong>//aggiorno l'indirizzo sulla barra del browser ed evito che si apra il link</strong><br />
history.pushState({}, '', url);<br />
e.preventDefault();<br />
<strong>//chiamata ajax</strong><br />
$.ajax({<br />
url: 'test.html',<br />
beforeSend: function () {<br />
<strong>// qui mettiamo un'immagine di caricamento: appare solo se dobbiamo caricare qualcosa di pesante</strong><br />
$('#ajax-panel').html('&lt;div class="loading"&gt;&lt;img src="http://lab.diplod.it/ajaxcall/images/ajax-loader.gif" alt="Loading..." /&gt;&lt;/div&gt;');<br />
},<br />
success: function (data) {<br />
<strong>// richiesta riuscita</strong><br />
$('#ajax-panel').empty();<br />
$('#ajax-panel').html(data);<br />
},<br />
error: function () {<br />
<strong>// richiesta fallita</strong><br />
$('#ajax-panel').html('&lt;p class="error"&gt;&lt;strong&gt;Oops!&lt;/strong&gt; Qualcosa &amp;egrave; andato storto.&lt;/p&gt;');<br />
}<br />
});<br />
</code><br />
Il codice della chiamata <strong>cross domain</strong> differisce di poco da quello precedente, se non per l&#8217;utilizzo di JSON<strong>P</strong> (attenzione: non JSON) come dataType.</p>
<p><code>$('#call-cross').click(function (e) {<br />
<strong>//SEO friendly</strong><br />
url = $(this).attr('href');<br />
<strong>//aggiorno l'indirizzo sulla barra del browser ed evito che si apra il link</strong><br />
history.pushState({}, '', url);<br />
e.preventDefault();<br />
<strong>//chiamata ajax</strong><br />
$.ajax({<br />
type: "POST",<br />
url: "https://graph.facebook.com/emergency.ong",<br />
dataType: "jsonp",<br />
beforeSend: function () {<br />
<strong>// qui mettiamo un'immagine di caricamento: appare solo se dobbiamo caricare qualcosa di pesante</strong><br />
console.log('loading..'); //scrivo qualcosa in console: si può omettere<br />
$('#ajax-panel').html('&lt;div class="loading"&gt;&lt;img src="http://lab.diplod.it/ajaxcall/images/ajax-loader.gif" alt="Loading..." /&gt;&lt;/div&gt;');<br />
},<br />
success: function (data) {<br />
<strong>// richiesta riuscita</strong><br />
console.log(data); //scrivo il risultato in console: si può omettere<br />
var obj = $.parseJSON(JSON.stringify(data));<br />
$('#ajax-panel').html('&lt;p&gt;Tutto ok&lt;/p&gt;&lt;p&gt;Descrizione dell\'oggetto JSON restituito: ' + obj.about + '&lt;/p&gt;');<br />
},<br />
error: function () {<br />
<strong>// richiesta fallita</strong><br />
$('#ajax-panel').html('&lt;p class="error"&gt;&lt;strong&gt;Oops!&lt;/strong&gt; Qualcosa &amp;egrave; andato storto.&lt;/p&gt;');<br />
}<br />
});<br />
});</code></p>
<p><strong>Vuoi provare l&#8217;esempio completo in azione e lavorarci su?</strong> <a title="chiamata ajax perfetta" href="http://www.diplod.it/wp-content/uploads/2014/07/AjaxCall.zip">Scarica tutti i sorgenti in uno zip</a> oppure <a title="chiamata ajax perfetta" href="http://lab.diplod.it/ajaxcall/" target="_blank">guardalo direttamente in funzione</a>.<a href="http://www.diplod.it/wp-content/uploads/2014/07/AjaxCall.zip"><br />
</a></p>
<p>Commenti e suggerimenti sono ben accetti. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2014/07/18/ajax-con-jquery-la-chiamata-perfetta-locale-e-cross-domain-seo-friendly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>E così Marina ha un nuovo blog</title>
		<link>http://www.diplod.it/2007/11/26/e-cosi-marina-ha-un-nuovo-blog/</link>
		<comments>http://www.diplod.it/2007/11/26/e-cosi-marina-ha-un-nuovo-blog/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 23:31:29 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Progetti]]></category>
		<category><![CDATA[FAlbum]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.diplod.it/2007/11/26/e-cosi-marina-ha-un-nuovo-blog/</guid>
		<description><![CDATA[Ultimamente sono mancato un po&#8217; su queste pagine, solo perchè sono stato preso da questo lavoro. Marina Remi è un&#8217;attrice genovese, che mi ha contattato per creare ex novo un blog su wordpress: ecco fatto. Non è stato semplice ma alla fine ho imparato molto.. Devo ringraziare lei e tutti coloro che hanno collaborato nella [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center"><img src="http://www.diplod.it/wp-content/uploads/2007/11/port-marina.gif" alt="Portfolio - Marina Remi Weblog" /></p>
<p>Ultimamente sono mancato un po&#8217; su queste pagine, solo perchè sono stato preso da <a href="http://www.marinaremi.com/diario/" title="Marina Remi" target="_blank">questo lavoro</a>. Marina Remi è un&#8217;attrice genovese, che mi ha contattato per creare ex novo un blog su wordpress: ecco fatto. Non è stato semplice ma alla fine ho imparato molto.. Devo ringraziare lei e tutti coloro che hanno collaborato nella realizzazione: in bocca al lupo!</p>
<p>In queste poche righe voglio riassumere i plugin utilizzati e le tecniche implementate per realizzare il sito di Marina.</p>
<p><span id="more-420"></span></p>
<h4>Menu con icone che zoomano al passaggio del mouse</h4>
<p>Noterete subito il menù stile mac che raccoglie le pagine del blog. E&#8217; stato realizzato utilizzando il framework <a href="http://jquery.com/" title="jQuery" target="_blank">jQuery</a> e la sua utilissima estensione grafica <a href="http://interface.eyecon.ro/" title="Interface" target="_blank">Interface</a>. Lo script deve essere configurato e si può personalizzare via CSS, lo potete vedere in azione nelle demo di Interface: <a href="http://interface.eyecon.ro/demos" title="Interface Demos" target="_blank">Fisheye Menu</a>.</p>
<p><img src="http://www.diplod.it/wp-content/uploads/2007/11/marina-menu.gif" alt="Menu in stile Mac" /></p>
<h4>Il form dei commenti</h4>
<p>A volte si può essere eleganti anche con un semplice javascript.. Lo so, i puristi diranno che son meglio i tag &lt;label&gt;, ma ogni tanto anche l&#8217;occhio vuole la sua parte.</p>
<p><img src="http://www.diplod.it/wp-content/uploads/2007/11/marina-commenti.gif" alt="Form commenti" /></p>
<h4>Le foto da Flickr</h4>
<p><a href="http://www.randombyte.net/blog/projects/falbum/" title="FAlbum per wordpress" target="_blank">FAlbum</a> è un plugin per wordpress che si collega ad un account Flickr e pubblica le foto sul proprio blog.<br />
Se vogliamo inserire la visualizzazione delle immagini in una pagina bisogna creare un template di pagina. Per farlo è sufficiente inserire questo codice all&#8217;inizio della nuova pagina falbum.php<br />
<code><br />
&lt;?php<br />
/*<br />
Template Name: FAlbum<br />
*/<br />
?&gt;<br />
</code></p>
<p>Mentre nel corpo della pagina dovremo inserire questo codice dove si vogliono far apparire le foto</p>
<p><code><br />
&lt;!--&lt;script type="text/javascript" src="&lt;?php bloginfo('url'); ?&gt;/wp-content/plugins/falbum/res/falbum.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript" src="&lt;?php bloginfo('url'); ?&gt;/wp-content/plugins/falbum/res/overlib.js"&gt;&lt;/script<br />
&lt;script type="text/javascript" src="&lt;?php bloginfo('url'); ?&gt;/wp-content/plugins/falbum/res/prototype.js"&gt;&lt;/script&gt;--&gt;<br />
&lt;div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"&gt;&lt;/div&gt;<br />
&lt;?php $falbum-&gt;show_photos(); ?&gt;<br />
</code></p>
<p>Per utilizzare gli effetti di visualizzazione dovremo togliere i commenti all&#8217;inclusione del codice javascript.</p>
<p>Per mettere qualche immagine nella sidebar invece si può usare questa funzione</p>
<p><code><br />
&lt;?php require_once(ABSPATH.'/wp-content/plugins/falbum/falbum.php');<br />
global $falbum; ?&gt;<br />
&lt;?php echo $falbum-&gt;show_recent($num = 3, $style = 0, $size= 's'); ?<br />
</code></p>
<p>Tutta <a href="http://www.randombyte.net/wiki/falbum/falbum" title="FAlbum documentation" target="_blank">la documentazione circa il plugin la si trova qui</a>, ben fatta e dettagliata.</p>
<h4>All in One SEO Pack</h4>
<p>E&#8217; un <a href="http://wordpress.org/extend/plugins/all-in-one-seo-pack/" title="All in one SEO Pack" target="_blank">utilissimo plugin</a> per l&#8217;ottimizzazione delle proprie pagine in ottica SEO (<a href="http://it.wikipedia.org/wiki/Ottimizzazione_%28motori_di_ricerca%29" title="SEO" target="_blank">Search Engine Optimization</a>). Da un comodo pannello di amministrazione è possibile inserire una descrizione globale del sito e le parole chiave. Per ogni post o pagina è possibile inserire descrizioni specifiche e parole chiave diverse. L&#8217;utilità non si vede ad occhio nudo, ma trattare bene i motori di ricerca aiuta sempre a generare visite.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2007/11/26/e-cosi-marina-ha-un-nuovo-blog/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
