<?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>ZonaW &#187; Tutoriales Web</title>
	<atom:link href="http://www.zonaw.com/tutoriales-web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zonaw.com</link>
	<description>Información práctica, consejos y recursos de interés para webmasters, desarrolladores y diseñadores web de todos los niveles.</description>
	<lastBuildDate>Mon, 14 May 2012 08:54:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cómo medir el rendimiento de una campaña de publicidad con Google Analytics</title>
		<link>http://www.zonaw.com/como-medir-el-rendimiento-de-una-campana-de-publicidad-con-google-analytics/</link>
		<comments>http://www.zonaw.com/como-medir-el-rendimiento-de-una-campana-de-publicidad-con-google-analytics/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 10:29:32 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Cómo promocionar una web]]></category>
		<category><![CDATA[Recursos para principiantes]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[Analizar]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[publicidad]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">/?p=1657</guid>
		<description><![CDATA[Una tarea muy importante que realizan los webmasters a falta de personas encargadas de la analítica web, es la de saber en todo momento de dónde viene cada una de las visitas a su página. Si además relizamos alguna campaña de marketing en la que se invierta cierta candidad de dinero y no disponemos de [...]]]></description>
			<content:encoded><![CDATA[<p>Una tarea muy importante que realizan los webmasters a falta de personas encargadas de la <strong>analítica web</strong>, es la de saber en todo momento de dónde viene cada una de las visitas a su página. Si además relizamos alguna campaña de marketing en la que se invierta cierta candidad de dinero y no disponemos de un adserver para poder medir el <strong>tráfico </strong>de dicha campaña, nos será misión imposible cuantificar el beneficio/pérdida de la campaña de publicidad.</p>
<p>Para conseguir medir las: visitas, páginas vistas, promedio de tiempo en el site y porcentajes de visitas nuevas y rebote sólo necesitamos <strong>etiquetar las url de la campaña</strong> correctamente para poder visualizar sus estadísticas a través de la herramienta gratuita <strong>Google Analytics</strong>.</p>
<p>Los parámetros que debemos introducir en cada URL donde pongamos nuestras campañas son los siguientes:</p>
<ul>
<li><strong>Utm_source</strong>: (<em>obligatorio</em>) Se utiliza para identificar la fuente donde se muestra la campaña (google, Yahoo, newsletter)</li>
<li><strong>Utm_medium</strong>: (<em>obligatorio</em>)		        Utilizado para identificar el método de marketing (banner, cpc, patrocinio, cpm)</li>
<li><strong>Utm_term</strong>: (<em>opcional</em>) con el se identifican las palabras clave de pago (recursos, webmasters, HTML)</li>
<li>U<strong>tm_content</strong>: (<em>opcional</em>) Utilizado para realizar pruebas del contenido A/B en los anuncios (enlace_logo, enlace_texto, banner125x125)</li>
<li><strong>Utm_campaign</strong>:	(<em>obligatorio</em>) Utilizado para el nombre de la campaña o promoción (rebaja_hosting, promocion_dominios, curso_seo)</li>
</ul>
<p>Si prefieres hacerlo de forma aún más sencilla puedes <strong>construir la url con los parámetros</strong> desde la herramienta de Google que está disponible desde el siguiente enlace <a href="http://support.google.com/googleanalytics/bin/answer.py?hl=en&amp;answer=55578">URL Builder</a>.</p>
<p><a href="http://www.zonaw.com/wp-content/uploads/2012/01/etiquetar-enlaces.png"><img class="aligncenter size-full wp-image-1659" title="etiquetar-enlaces" src="http://www.zonaw.com/wp-content/uploads/2012/01/etiquetar-enlaces.png" alt="etiquetar-enlaces" width="600" height="230" /></a></p>
<p>Todo esto se ve mucho mejor con un ejemplo:</p>
<p>Imaginemos que deseamos realizar una campaña de promoción de unos<strong> cursos para webmasters</strong> por el método <strong>CPC </strong>(coste por clic) de este mismo blog <strong>zonaw.com</strong> dentro de la plataforma de publicidad de Google <strong>Adwords</strong>, en el que pagaremos por la palabra clave <strong>webmasters</strong> y contaremos con varios tipos de anuncios: ads1, <strong>ads2</strong>, ads3&#8230; que se diferenciarán solamente en pequeños matices del texto, para evaluar su eficacia.</p>
<blockquote><p>http://www.zonaw.com/?utm_source=adwords&amp;utm_medium=cpc&amp;utm_term=webmasters&amp;utm_content=ads2&amp;utm_campaign=cursos_webmasters</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/como-medir-el-rendimiento-de-una-campana-de-publicidad-con-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo obtener el ranking de Alexa</title>
		<link>http://www.zonaw.com/como-obtener-el-ranking-de-alexa/</link>
		<comments>http://www.zonaw.com/como-obtener-el-ranking-de-alexa/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 16:29:06 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[Alexa]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">/?p=1608</guid>
		<description><![CDATA[Por si alguien aún no conoce, Alexa decir que es un servicio de Amazon que ofrece a sus usuarios gran cantidad de información a cerca de cualquier sitio web del que se realiza una consulta. Entre los datos que podemos sacar de Alexa está su indicador más importante, el llamado Alexa Traffic Rank, que nos [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zonaw.com/wp-content/uploads/2012/01/ranking-alexa-zonaw.jpg"><img class="aligncenter size-full wp-image-1609" title="ranking-alexa-zonaw" src="http://www.zonaw.com/wp-content/uploads/2012/01/ranking-alexa-zonaw.jpg" alt="ranking-alexa-zonaw" width="600" height="200" /></a></p>
<p>Por si alguien aún no conoce, <strong><a href="http://www.alexa.com/">Alexa</a></strong> decir que es un servicio de Amazon que ofrece a sus usuarios gran cantidad de información a cerca de cualquier sitio web del que se realiza una consulta. Entre los datos que podemos sacar de Alexa está su indicador más importante, el llamado <strong>Alexa Traffic Rank</strong>, que nos representa la posición de nuestra web respecto a la totalidad de sitios web. Para entenderlo, es similar al devaluado PageRank de Google.</p>
<p>A pesar de que Alexa no nos ofrece ninguna API para <strong>extraer el ranking de una web</strong>, utilizando el siguiente método podremos obtener toda la información necesaria.</p>
<p>Todo lo que tenemos que hacer es extraer la información ejecutando la siguiente url:</p>
<blockquote><p>http://data.alexa.com/data?cli=10&amp;dat=s&amp;url={url_del_sitio}</p>
<p>Ejemplo: http://data.alexa.com/data?cli=10&amp;dat=s&amp;url=www.zonaw.com</p></blockquote>
<p>Al ejecutar esa url en el navegador, obtendremos un xml del que podremos sacar información como: nombre de la web, descripción, categoría, datos de contacto, número de enlaces, velocidad, calificación, palabras clave y lo que más nos interesa en este caso, el <strong>ranking de Alexa</strong>.</p>
<p>Si sólo queremos extraer el ranking, lo podemos hacer aún más sencillo, a partir del xml con la ayuda de PHP:</p>
<blockquote><p>$url = &#8220;www.zonaw.com&#8221;;<br />
$xml= &#8220;http://data.alexa.com/data?cli=10&amp;dat=s&amp;url=&#8221;.$url;<br />
$datos = simplexml_load_file($xml) or die(&#8220;No se puede cargar&#8221;);<br />
$ranking = $datos-&gt;SD[1]-&gt;POPULARITY['TEXT'];</p>
<p>if($ranking &gt; 0){<br />
echo &#8220;El ranking de Alexa para este sitio es &lt;strong&gt;&#8221;.$ranking.&#8221;&lt;/strong&gt;&#8221;;<br />
}else{<br />
echo &#8220;No se puede obtener el ranking&#8221;;<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/como-obtener-el-ranking-de-alexa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo cambiar la página de login de WordPress</title>
		<link>http://www.zonaw.com/cambiar-pagina-login-wordpress/</link>
		<comments>http://www.zonaw.com/cambiar-pagina-login-wordpress/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 08:37:41 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Cómo diseñar una web]]></category>
		<category><![CDATA[Recursos para principiantes]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">/?p=1543</guid>
		<description><![CDATA[En el siguiente tutorial veremos cómo podemos cambiar la página de login de WordPress de una forma muy sencilla, simplemente modificando parte del código de los ficheros: functions.php y creando una nueva hoja de estilos. Cambiar la URL del enlace en el logotipo La pantalla de login por defecto de WordPress muestra su logotipo con [...]]]></description>
			<content:encoded><![CDATA[<p>En el siguiente tutorial veremos cómo podemos <strong>cambiar la página de login de WordPress</strong> de una forma muy sencilla, simplemente modificando parte del código de los ficheros: <code>functions.php </code>y creando una nueva hoja de estilos.</p>
<h3>Cambiar la URL del enlace en el logotipo</h3>
<p>La pantalla de login por defecto de WordPress muestra su logotipo con un enlace a <code>http://www.wordpress.org</code> lo primero que haremos será <strong>cambiar dicho enlace</strong> por uno que apunte a la home (o cualquier otro lugar) de nuestro site.</p>
<p>Para ello localizamos el fichero <code>functions.php </code>y pegamos el siguiente código cambiando zonaw por nuestra URL.</p>
<blockquote>
<div><code>function</code> <code>idibay_login_url() {</code></div>
<div><code> </code><code>return</code> <code>site_url();</code></div>
<div><code>}</code></div>
<div><code>add_filter( </code><code>'login_headerurl'</code><code>, </code><code>'zonaw_login_url'</code><code>, 10, 4 );</code></div>
</blockquote>
<h3>Cambiar el logotipo y diseño</h3>
<p>En el siguiente paso vamos a <strong>cambiar el logotipo</strong> para utilizar uno personalizado y también cambiaremos el diseño de la página de login mediante una nueva hoja de estilos CSS (este paso será opcional). Volvemos al fichero <code>functions.php </code>de nuestro tema y pegamos el siguiente código realizando los cambios necesarios:</p>
<blockquote>
<div><code>function</code> <code>zonaw_login() {</code></div>
<div><code> </code><code>echo</code> <code>'&lt;link rel="stylesheet" type="text/css" href="'</code> <code>. </code></div>
<div><code>get_bloginfo(</code><code>'template_directory'</code><code>) . </code><code>'/custom_login.css" /&gt;'</code><code>;</code></div>
<div><code>}</code></div>
<div><code>add_action(</code><code>'login_head'</code><code>, </code><code>'zonaw_login'</code><code>);</code></div>
</blockquote>
<p>Para darle un diseño aún más personalizado, creamos un nuevo fichero de hoja de estilos CSS con el nombre <code>custom_login.css </code>en el mismo directorio del tema activo. Desde ahí realizaremos todos los cambios de diseño: logotipo, cambio de colores, posiciones de los elementos, fondo de la página&#8230;</p>
<p>Para <strong>cambiar el logotipo</strong> de WordPress por el nuestro, primero lo subimos a la carpeta <code>images</code> del tema y la llamamos por ejemplo <code>login_logo.jpg </code>en el fichero <code>custom_login.css</code> escribiremos:</p>
<blockquote>
<div><code>h</code><code>1</code> <code>a {</code></div>
<div><code> </code><code>background-image</code><code>: </code><code>url</code><code>(images/login_logo.jpg) </code><code>!important</code><code>;</code></div>
<div><code>}</code></div>
</blockquote>
<p>Para <strong>cambiar el color de fondo</strong> de la página añadimos las siguientes líneas al CSS modificando el color:</p>
<blockquote>
<div><code>html{ </code><code>background-color</code><code>: </code>#9B9B9B<code>; </code><code>height</code><code>: </code><code>100%</code> <code>!important</code><code>;}</code></div>
<div><code>body{ </code><code>background-color</code><code>: </code>#9B9B9B<code>; </code><code>height</code><code>: </code><code>100%</code> <code>!important</code><code>;}</code></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/cambiar-pagina-login-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VideoJS: reproductor de video HTML5</title>
		<link>http://www.zonaw.com/videojs-reproductor-de-video-html5/</link>
		<comments>http://www.zonaw.com/videojs-reproductor-de-video-html5/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 11:35:40 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Descargar plugin]]></category>
		<category><![CDATA[Scripts Javascript]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">/?p=1524</guid>
		<description><![CDATA[VideoJS es un excente reproductor de video basado en JavaScript que utiliza la funcionalidad de video HTML5. La principal ventaja de utilizar VideoJS es la correcta visualización de los videos en diferentes navegadores y plataformas como Telefonos moviles o tablet al no requerir la utilización de Adobe Flash para ver correctamente el contenido de los [...]]]></description>
			<content:encoded><![CDATA[<p><strong>VideoJS </strong>es un excente <strong>reproductor de video</strong> basado en JavaScript que utiliza la funcionalidad de video <strong>HTML5</strong>. La principal ventaja de utilizar VideoJS es la correcta visualización de los videos en diferentes navegadores y plataformas como Telefonos moviles o tablet al no requerir la utilización de Adobe Flash para ver correctamente el contenido de los videos. Además si el navegador de la persona que visita nuestra página no soporta HTML5, automáticamente mostrará un reproductor en Flash alternativo.</p>
<p><a href="http://www.zonaw.com/wp-content/uploads/2011/12/videojs.jpg"><img class="aligncenter size-full wp-image-1532" title="videojs" src="http://www.zonaw.com/wp-content/uploads/2011/12/videojs.jpg" alt="videojs" width="600" height="277" /></a></p>
<p>Estas son algunas de sus características:</p>
<ul>
<li>Software gratuito y Open Source</li>
<li> Ligero. No utiliza imágenes</li>
<li>Skins 100% personalizables mediante CSS (se incluyen los aspectos: vimeo, YouTube y Hulu)</li>
<li> Independiente de frameworks</li>
<li>Fácil de usar, de entender y extender</li>
<li>Aspecto coherente entre los distintos navegadores</li>
<li>Pantalla completa</li>
<li> Control de volumen</li>
<li> Fallback a Flash</li>
</ul>
<p>Para utilizar VideoJS en nuestra página, lo primero será <a href="http://videojs.com/#download">descargar</a> la última versión de VideoJS, descomprimirla y subirla a nuestro servidor. El siguiente paso será incluir los archivos JavaScript y CSS.</p>
<blockquote>
<pre>&lt;head&gt;
  ...
    &lt;script src="video.js" type="text/javascript" charset="utf-8"&gt;
    &lt;/script&gt;
    &lt;link rel="stylesheet" href="video-js.css" type="text/css"
    media="screen" title="Video JS" charset="utf-8"&gt;
  ...
  &lt;/head&gt;</pre>
</blockquote>
<p>Para tener las funcionalidades de VideoJS añadimos una función JavaScript que se ejecutará cuando cargue la página:</p>
<blockquote>
<pre>&lt;script type="text/javascript" charset="utf-8"&gt;
VideoJS.setupAllWhenReady();
&lt;/script&gt;</pre>
</blockquote>
<p>Para finalizar, en el tag body construimos el player dentro de un div con clase  <strong> “video-js-box” </strong> para reconocer la sección. Dentro del div creado añadimos  <strong> &lt;video&gt; </strong> con sus respectivos atributos y opciones de formato de video.</p>
<blockquote>
<pre>  &lt;!-- Begin VideoJS --&gt;
  &lt;div&gt;
    &lt;!-- Using the Video for Everybody Embed Code
http://camendesign.com/code/video_for_everybody --&gt;
    &lt;video width="640" height="264" controls preload
poster="http://video-js.zencoder.com/oceans-clip.png"&gt;
      &lt;source src="http://video-js.zencoder.com/oceans-clip.mp4"
type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' /&gt;
      &lt;source src="http://video-js.zencoder.com/oceans-clip.webm"
type='video/webm; codecs="vp8, vorbis"' /&gt;
      &lt;source src="http://video-js.zencoder.com/oceans-clip.ogv"
type='video/ogg; codecs="theora, vorbis"' /&gt;
      &lt;!-- Flash Fallback. Use any flash video player here.
Make sure to keep the vjs-flash-fallback class. --&gt;
      &lt;object id="flash_fallback_1"code-value"&gt;vjs-flash-fallback"
width="640" height="264" type="application/x-shockwave-flash"
        data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf"&gt;
        &lt;param name="movie"
value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" /&gt;
        &lt;param name="allowfullscreen" value="true" /&gt;
        &lt;param name="flashvars"
value='config={"playlist":["http://video-js.zencoder.com/oceans-clip.png",
{"url": "http://video-js.zencoder.com/oceans-clip.mp4",
"autoPlay":false,"autoBuffering":true}]}' /&gt;
        &lt;!-- Image Fallback. Typically the same as the poster image. --&gt;
        &lt;img src="http://video-js.zencoder.com/oceans-clip.png"
width="640" height="264"
alt="Poster Image"
          title="No video playback capabilities." /&gt;
      &lt;/object&gt;
    &lt;/video&gt;
    &lt;!-- Download links provided for devices that can't play
video in the browser. --&gt;
    &lt;p&gt;&lt;strong&gt;Download Video:&lt;/strong&gt;
      &lt;a href="http://video-js.zencoder.com/oceans-clip.mp4"&gt;MP4&lt;/a&gt;,
      &lt;a href="http://video-js.zencoder.com/oceans-clip.webm"&gt;WebM&lt;/a&gt;,
      &lt;a href="http://video-js.zencoder.com/oceans-clip.ogv"&gt;Ogg&lt;/a&gt;&lt;br&gt;
      &lt;!-- Support VideoJS by keeping this link. --&gt;
      &lt;a href="http://videojs.com"&gt;HTML5 Video Player&lt;/a&gt; by VideoJS
    &lt;/p&gt;
  &lt;/div&gt;
  &lt;!-- End VideoJS --&gt;</pre>
</blockquote>
<p>Se puede ver una <a href="http://videojs.com/">demo</a> online de la funcionalidad del reproductor y sus Skins 100% CSS.</p>
<p>También dispone de varios <strong>plugins </strong>para hacerlo aún más compatible con: WordPress, jQuery, Drupal, Umbraco y Joomla.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/videojs-reproductor-de-video-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://video-js.zencoder.com/oceans-clip.mp4" length="19448241" type="video/mp4" />
<enclosure url="http://video-js.zencoder.com/oceans-clip.webm" length="14625011" type="video/webm" />
<enclosure url="http://video-js.zencoder.com/oceans-clip.ogv" length="13235468" type="video/ogg" />
		</item>
		<item>
		<title>Cómo obtener los artículos recientes de una red de blogs en WordPress</title>
		<link>http://www.zonaw.com/obtener-articulos-recientes-red-de-blogs-wordpress/</link>
		<comments>http://www.zonaw.com/obtener-articulos-recientes-red-de-blogs-wordpress/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 15:05:06 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[APIs Web]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[trucos]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">/?p=1507</guid>
		<description><![CDATA[Si hemos creado toda una red de blogs con WordPress nos puede ser de utilidad el siguiente manual para crear un nuevo sitio donde se reúnan todos los artículos más recientes que se publican en dicha red de blogs. Por desgracia aún no existe una función interna en WordPress con la que poder llevarlo a [...]]]></description>
			<content:encoded><![CDATA[<p>Si hemos creado toda una <strong>red de blogs</strong> con <strong>WordPress</strong> nos puede ser de utilidad el siguiente manual para crear un nuevo sitio donde se reúnan <strong>todos los artículos más recientes que se publican en dicha red de blogs</strong>. Por desgracia aún no existe una función interna en WordPress con la que poder llevarlo a cabo. Para solucionar esto existe la clase <code>$wpdb database</code> con la que podemos crear una petición a nuestra base de datos de las <strong>últimas entradas de toda la red de blogs</strong>.</p>
<p>Al ser una petición SQL bastante grande, debemos utilizar la <a href="http://codex.wordpress.org/Transients_API" target="_blank">API Transients</a>, de forma similar a como la utilizamos en la función <code>wp_list_sites()</code>.</p>
<p>Estos son los<strong> pasos para obtener los artículos recientes de nuestra red</strong> de blogs:</p>
<p>Añadir la función <code>wp_recent_across_network()</code> al archivo <code>functions.php</code> de nuestro theme.</p>
<ul></ul>
<blockquote>
<pre>/**
 * Lista de entradas recientes en toda la red Multisitio
 *
 * @uses get_blog_list(), get_blog_permalink()
 *
 * @param int $size El número de resultados a obtener
 * @param int $expires Segundos hasta que expire la cache transient
 * @return object Contiene el blog_id, post_id, post_date y post_title
 */
function wp_recent_across_network( $size = 10, $expires = 7200 ) {
   if( !is_multisite() ) return false;

   // Se cachean los resultados con la API Transients de WordPress
   // Obtenemos una copia existente de nuestros datos transient
   if ( ( $recent_across_network = get_site_transient
( 'recent_across_network' ) ) === false ) {

      // Si no hay transient regeneramos los datos y
guardamos una nueva transient
      // Preparamos la query SQL con $wpdb
      global $wpdb;

      $base_prefix = $wpdb-&gt;get_blog_prefix(0);
      $base_prefix = str_replace( '1_', '' , $base_prefix );

      // A causa de que la función get_blog_list()
está actualmente abandonada
      // debido al alto consumo de recursos usaremos
      // $wpdb para ejecutar nuestra query SQL. Como la query puede
      // consumir mucha memoria almacenaremos los resultados
usando la API Transients
      if ( false === ( $site_list =
get_site_transient( 'multisite_site_list' ) ) ) {
         global $wpdb;
         $site_list = $wpdb-&gt;get_results
( $wpdb-&gt;prepare('SELECT * FROM wp_blogs ORDER BY blog_id') );
         set_site_transient( 'multisite_site_list', $site_list, $expires );
      }
      $limit = absint($size);
      // Unificamos los resultados de wp_posts
en todos los sitios del Multisitio en un solo resultado con MySQL "UNION"
      foreach ( $site_list as $site ) {
         if( $site == $site_list[0] ) {
            $posts_table = $base_prefix . "posts";
         } else {
            $posts_table = $base_prefix . $site-&gt;blog_id . "_posts";
         }

         $posts_table = esc_sql( $posts_table );
         $blogs_table = esc_sql( $base_prefix .
'&lt;a target="_blank" title="blogs"
href="%20http://semanticae.es"&gt;blogs&lt;/a&gt;' );

         $query .= "(SELECT $posts_table.ID,
$posts_table.post_title, $posts_table.post_date, $blogs_table.blog_id FROM
$posts_table, $blogs_tablen";
         $query .= "tWHERE $posts_table.post_type = 'post'n";
         $query .= "tAND $posts_table.post_status = 'publish'n";
         $query .= "tAND $blogs_table.blog_id = {$site-&gt;blog_id})n";

         if( $site !== end($site_list) )
            $query .= "UNIONn";
         else
            $query .= "ORDER BY post_date DESC LIMIT 0, $limit";
      }

      // Un poco de limpieza y ejecutamos la query
      $query = $wpdb-&gt;prepare($query);
      $recent_across_network = $wpdb-&gt;get_results( $query );

      // Ajustamos la cache Transients para que espire cada dos horas
      set_site_transient( 'recent_across_network',
$recent_across_network, 60*60*2 );
   }
   // Damos formato a la salida HTML
   $html = '
    '; foreach ( $recent_across_network as $post ) { $html .= '
    ' . $post-&gt;post_title . '
    '; } $html .= '
';
   return $html;
}</pre>
</blockquote>
<p>Nos aseguramos de comprobar el valor <code>return</code> en la salida HTML para evitar conflictos con instalaciones que no sean multisitio.</p>
<p>Por último, añadimos el siguiente código con el que recuperar los datos de la función en nuestro site:</p>
<blockquote>
<pre>&lt;?php
// Mostramos las entradas recientes de toda la red
$recent_network_posts = wp_recent_across_network();
if( $recent_network_posts ):
?&gt;
&lt;?php echo $recent_network_posts; ?&gt;
&lt;?php endif; ?&gt;
</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/obtener-articulos-recientes-red-de-blogs-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cambiar campos de formularios al hacer click</title>
		<link>http://www.zonaw.com/cambiar-campos-de-formularios-al-hacer-click/</link>
		<comments>http://www.zonaw.com/cambiar-campos-de-formularios-al-hacer-click/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 10:23:01 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Herramientas Diseño]]></category>
		<category><![CDATA[Recursos de CSS]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[accesibilidad]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[diseño]]></category>

		<guid isPermaLink="false">/?p=1385</guid>
		<description><![CDATA[Seguro que en alguna ocasión habréis visto formularios en el que al posicionarnos sobre un campo, la caja de texto cambia de estilo, ya sea porque cambia el color de fuente, tamaño, se añade o desaparece una imagen de fondo&#8230; Estos son los pasos para conseguir que el estilo de los campos de un formulario [...]]]></description>
			<content:encoded><![CDATA[<p>Seguro que en alguna ocasión habréis visto <strong>formularios</strong> en el que al posicionarnos sobre un campo, la caja de texto <strong>cambia de estilo</strong>, ya sea porque cambia el color de fuente, tamaño, se añade o desaparece una imagen de fondo&#8230;</p>
<p>Estos son los pasos para conseguir que el <strong>estilo de los campos de un formulario cambien al hacer click</strong> sobre ellos:</p>
<p>Primero creamos un simple formulario con dos campos: usuario y mensaje:</p>
<blockquote><p>&lt;form action=&#8221;#&#8221; method=&#8221;POST&#8221;&gt;<br />
&lt;p&gt;Usuario:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;text&#8221; name=&#8221;usuario&#8221; maxlength=&#8221;30&#8243; size=&#8221;30&#8243;&gt;&lt;/p&gt;<br />
&lt;p&gt;Mensaje:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;mensaje&#8221; name=&#8221;mensaje&#8221; maxlength=&#8221;300&#8243; size=&#8221;300&#8243;&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p></blockquote>
<p>Mediante CSS ponemos el fondo de un color, para ello añadimos entre la etiqueta &lt;head&gt; o en la hoja de estilos el código:</p>
<blockquote><p>&lt;style type=&#8221;text/css&#8221;&gt;<br />
.input_sinfoco{<br />
background: #EAF2FA;<br />
border: 3px solid #464646;<br />
}<br />
&lt;/style&gt;</p></blockquote>
<p>Hacemos referencia añadiremos la llamada a dicha clase en los campos de texto con la <strong>etiqueta class</strong>:</p>
<blockquote><p>&lt;form action=&#8221;#&#8221; method=&#8221;POST&#8221;&gt;<br />
&lt;p&gt;Usuario:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;text&#8221; name=&#8221;usuario&#8221; maxlength=&#8221;30&#8243; size=&#8221;30&#8243;&gt;&lt;/p&gt;<br />
&lt;p&gt;Mensaje:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;mensaje&#8221; name=&#8221;mensaje&#8221; maxlength=&#8221;300&#8243; size=&#8221;300&#8243;&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p></blockquote>
<p>Para tener en cuenta el  comportamiento cuando el usuario hace click en el campo de texto,  utilizaremos la <strong>función onFocus de Javascript</strong>, añadiendo en cada uno de los campos:</p>
<blockquote><p>&lt;form action=&#8221;#&#8221; method=&#8221;POST&#8221;&gt;<br />
&lt;p&gt;Usuario:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;text&#8221; name=&#8221;usuario&#8221; maxlength=&#8221;30&#8243; size=&#8221;30&#8243; onFocus=&#8221;this.className=&#8217;input_foco&#8217;&#8221;&gt;&lt;/p&gt;<br />
&lt;p&gt;Mensaje:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;mensaje&#8221; name=&#8221;mensaje&#8221; maxlength=&#8221;300&#8243; size=&#8221;300&#8243; onFocus=&#8221;this.className=&#8217;input_foco&#8217;&#8221;&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p></blockquote>
<p>Añadimos también el estilo CSS para  cuando nos posicionamos en el campo, en este caso llamado <em>input_foco</em></p>
<blockquote><p>&lt;style type=&#8221;text/css&#8221;&gt;<br />
.input_sinfoco{<br />
background: #B6B61C;<br />
border: 3px solid #9B9B18;<br />
}<br />
.input_foco{<br />
background: #E7AE10;<br />
border: 3px solid #9B9B18;<br />
}<br />
&lt;/style&gt;</p></blockquote>
<p>Para finalizar.</p>
<p>Añadimos el estado <strong>o</strong><strong>n_blur</strong> utilizado cuando el campo pierde el foco.</p>
<p>Para ello utilizamos la <strong>función onBlur de Javascript</strong>:</p>
<blockquote><p>&lt;form action=&#8221;#&#8221; method=&#8221;POST&#8221;&gt;<br />
&lt;p&gt;Usuario:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;text&#8221; name=&#8221;usuario&#8221; maxlength=&#8221;30&#8243; size=&#8221;30&#8243; onFocus=&#8221;this.className=&#8217;input_foco&#8217;&#8221; onblur=&#8221;this.className=&#8217;input_sinfoco&#8217;&#8221;&gt;&lt;/p&gt;<br />
&lt;p&gt;Mensaje:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;mensaje&#8221; name=&#8221;mensaje&#8221; maxlength=&#8221;300&#8243; size=&#8221;300&#8243; onFocus=&#8221;this.className=&#8217;input_foco&#8217;&#8221; onblur=&#8221;this.className=&#8217;input_sinfoco&#8217;&#8221;&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p></blockquote>
<p>Con esto ya tendremos listo nuestro formulario. Ahora sólo falta insertar el código en nuestra página y comprobar su correcto funcionamiento.</p>
<p>El código completo del ejemplo es el siguiete:</p>
<blockquote><p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Cambiar campos de formularios al hacer click&lt;/title&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
.form{<br />
width: 300px;<br />
margin: 100px;<br />
padding: 25px;<br />
font-family: Helvetica, Arial, &#8216;Lucida Sans Unicode&#8217;;<br />
font-size: 16px;<br />
color: #9B9B18;<br />
border: 3px solid #9B9B18;<br />
/*background: #FED52B;*/<br />
}<br />
.input_sinfoco{<br />
background: #B6B61C;<br />
border: 3px solid #9B9B18;<br />
}<br />
.input_foco{<br />
background: #E7AE10;<br />
border: 3px solid #9B9B18;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div&gt;<br />
&lt;h1&gt;&lt;strong&gt;Cambiar campos de formularios al hacer click&lt;/strong&gt;&lt;/h1&gt;<br />
&lt;h2&gt;Estilos en campos&lt;/h2&gt;<br />
&lt;form action=&#8221;#&#8221; method=&#8221;POST&#8221;&gt;<br />
&lt;p&gt;Usuario:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;text&#8221; name=&#8221;usuario&#8221; maxlength=&#8221;30&#8243; size=&#8221;30&#8243; onFocus=&#8221;this.className=&#8217;input_foco&#8217;&#8221; onblur=&#8221;this.className=&#8217;input_sinfoco&#8217;&#8221;&gt;&lt;/p&gt;<br />
&lt;p&gt;Mensaje:&lt;/p&gt;<br />
&lt;p&gt;&lt;input type=&#8221;mensaje&#8221; name=&#8221;mensaje&#8221; maxlength=&#8221;300&#8243; size=&#8221;300&#8243; onFocus=&#8221;this.className=&#8217;input_foco&#8217;&#8221; onblur=&#8221;this.className=&#8217;input_sinfoco&#8217;&#8221;&gt;&lt;/p&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/cambiar-campos-de-formularios-al-hacer-click/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Añadir un video de YouTube como fondo de página</title>
		<link>http://www.zonaw.com/anadir-un-video-de-youtube-como-fondo-de-pagina/</link>
		<comments>http://www.zonaw.com/anadir-un-video-de-youtube-como-fondo-de-pagina/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 06:54:51 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Descargar plugin]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">/?p=1372</guid>
		<description><![CDATA[En otras ocasiones ya hemos visto cómo poner un mapa de Google Maps de fondo de la página, ahora lo que vamos a conseguir es insertar un video de YouTube como fondo de página. Para ello utilizaremos el plugin jQuery llamado jQuery.mb.YTPlayer. Su configuración es bastante simple, y nos permite gestionar opciones básicos relacionados con [...]]]></description>
			<content:encoded><![CDATA[<p>En otras ocasiones ya hemos visto cómo <a href="http://www.zonaw.com/2011/07/21/poner-un-mapa-de-google-maps-como-fondo-en-una-web/">poner un mapa de Google Maps de fondo de la página</a>, ahora lo que vamos a conseguir es <strong>insertar un video de YouTube como fondo de página</strong>. Para ello utilizaremos el plugin jQuery llamado <a title="jquery mb ytplayer " href="http://pupunzi.open-lab.com/mb-jquery-components/jquery-mb-ytplayer/">jQuery.mb.YTPlayer</a>.</p>
<p>Su configuración es bastante simple, y nos permite  gestionar opciones básicos relacionados con la reproducción del video como por ejemplo:  controles básicos, volumen, calidad, proporción, aspecto, bufferIMG, opacidad&#8230;</p>
<p><a href="http://www.zonaw.com/wp-content/uploads/2011/10/jquery.mb_.YTPlayer.jpg"><img class="aligncenter size-full wp-image-1374" title="jquery.mb.YTPlayer" src="http://www.zonaw.com/wp-content/uploads/2011/10/jquery.mb_.YTPlayer.jpg" alt="Añadir un video de Youtube como fondo" width="560" height="521" /></a></p>
<p>No tendrás que preocuparte por el tiempo de carga de tu site, ya que el propio plugin nos ofrece una serie de opciones para gestionar de forma eficiente los retrasos y tiempos de descarga del video inicial, para ello utiliza imágenes que son mostradas mientras el video inicia su reproducción.</p>
<p>Un ejemplo del simple funcionamiento de este plugin y de la utilización del mínimo cóodigo lo podemos encontrar implementando la siguiente configuración básica. De todas formas, si lo que queremos es  modificar el aspecto visual del  video podemos configurar las imágenes  que queramos utilizar como los  controles, simplemente pasando por parámetro  la ruta a los archivos.</p>
<p><strong>Llamada JS: </strong></p>
<blockquote>
<pre><code>    $(function(){
      $(".movie").mb_YTPlayer();
    });
</code><strong>
</strong></pre>
</blockquote>
<p><strong>Constructor HTML </strong></p>
<blockquote>
<pre><code>&lt;a id="bgndVideo" href="http://www.youtube.com/watch?v=MR9av-I35ME"&gt;
Bill Viola&lt;/a&gt;</code></pre>
</blockquote>
<p><strong>Parámetros</strong></p>
<blockquote><p>$.YTPlayer.controls.play= “<code>&lt;img src='images/play.png'&gt;</code>”<br />
$.YTPlayer.controls.pause= “<code>&lt;img src='images/pause.png'&gt;</code>”<br />
$.YTPlayer.controls.mute= “<code>&lt;img src='images/mute.png'&gt;</code>”<br />
$.YTPlayer.controls.unmute= “<code>&lt;img src='images/unmute.png'&gt;</code>”</p></blockquote>
<p>En el siguiente enlace se puede <a title="Demo" href="http://pupunzi.com/#mb.components/mb.YTPlayer/YTPlayer.html">ver una demostración</a> de su funcionamiento.</p>
<p>Web: <a title="jquery mb ytplayer " href="http://pupunzi.open-lab.com/mb-jquery-components/jquery-mb-ytplayer/">jQuery.mb.YTPlayer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/anadir-un-video-de-youtube-como-fondo-de-pagina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entourage.js: seguimiento de descarga automática de Google Analytics</title>
		<link>http://www.zonaw.com/entourage-js-seguimiento-de-descarga-automatica-de-google-analytics/</link>
		<comments>http://www.zonaw.com/entourage-js-seguimiento-de-descarga-automatica-de-google-analytics/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 09:35:18 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Descargar plugin]]></category>
		<category><![CDATA[Scripts Javascript]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[estadísticas]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">/?p=1267</guid>
		<description><![CDATA[El sistema de estadíscticas de Google Analytics por defecto no realiza seguimiento de descargas realizadas en una web. Para realizar este seguimiento recomiendan utilizar el siguiente código javascript en el mismo link de descarga del siguiente modo: &#60;a href="http://www.dominio.com/files/map.pdf" onClick="javascript: _gaq.push(['_trackPageview', '/downloads/map']);"&#62; Ya que el método anterior puede resultar bastante pesado, buscando alguna solución nos [...]]]></description>
			<content:encoded><![CDATA[<p>El sistema de estadíscticas de <strong>Google Analytics</strong> por defecto no realiza seguimiento de descargas realizadas en una web. Para realizar este seguimiento recomiendan utilizar el siguiente código javascript en el mismo link de descarga del siguiente modo:</p>
<div>
<blockquote>
<div><code>&lt;a href=</code><code>"http://www.dominio.com/files/map.pdf"</code></div>
<div><code>onClick=</code><code>"javascript: _gaq.push(['_trackPageview', </code></div>
<div><code>'/downloads/map']);"</code><code>&gt;</code></div>
</blockquote>
</div>
<p>Ya que el método anterior puede resultar bastante pesado, buscando alguna solución nos encontramos en <a href="http://techoctave.com/c7/posts/58-entourage-js-automatic-download-tracking-for-asynchronous-google-analytics">techoctave.com</a> con <strong><a href="http://techoctave.com/entourage/">Entourage.js</a></strong> un simple y muy ligero script de tan solo 339 bytes comprimido, con el que podemos añadir automáticamente soporte para <strong>realizar un seguimiento de las descargas</strong>.</p>
<h3><strong><a href="http://techoctave.com/entourage/">Entourage.js</a></strong></h3>
<p>Su instalación es muy simple. Primero descargamos el script desde <a href="http://techoctave.com/entourage/">Entourage.js</a>, lo subimos a nuestro servidor y realizamos la llamada en nuestro documento entre las etiquetas &lt;head&gt;&lt;/head&gt;</p>
<div>
<blockquote>
<div><code>&lt;</code><code>script</code> <code>src</code><code>=</code><code>"javascripts/entourage.js"</code><code>&gt;&lt;/</code><code>script</code><code>&gt;</code></div>
</blockquote>
<div>
<p>Debajo de esa línea insertamos el siguiente código con nuestro ID de <strong>Analytics</strong> (lo podemos encontrar junto al nombre del dominio en Google Analytics)</p>
<div>
<blockquote>
<div><code>&lt;script type=</code><code>"text/javascript"</code><code>&gt;</code></div>
<div><code> </code><code>var</code> <code>_gaq = _gaq || [];</code></div>
<div><code> </code><code>_gaq.push([</code><code>'_setAccount'</code><code>, </code><code>'UA-XXXXXXXX-X'</code><code>]);</code></div>
<div><code> </code><code>_gaq.push([</code><code>'_trackPageview'</code><code>]);</code></div>
<div><code>&lt;/script&gt;</code></div>
</blockquote>
<div>
<p>Para finalizar, antes de la etiqueta de cierre &lt;/body&gt;, añadimos el código de Analytics:</p>
<div>
<blockquote>
<div><code>&lt;script type=</code><code>"text/javascript"</code><code>&gt;</code></div>
<div><code> </code><code>(</code><code>function</code><code>() {</code></div>
<div><code> </code><code>var</code> <code>ga = document.createElement(</code><code>'script'</code><code>); ga.type = </code><code>'text/javascript'</code><code>; ga.async = </code><code>true</code><code>;</code></div>
<div><code> </code><code>ga.src = (</code><code>'https:'</code> <code>== document.location.protocol ? </code><code>'https://ssl'</code> <code>: </code><code>'http://www'</code><code>) + </code><code>'.google-analytics.com/ga.js'</code><code>;</code></div>
<div><code> </code><code>var</code> <code>s = document.getElementsByTagName(</code><code>'script'</code><code>)[0]; s.parentNode.insertBefore(ga, s);</code></div>
<div><code> </code><code>})();</code></div>
<div><code>&lt;/script&gt;</code></div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/entourage-js-seguimiento-de-descarga-automatica-de-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo generar un fichero Excel con PHP</title>
		<link>http://www.zonaw.com/como-generar-un-fichero-excel-con-php/</link>
		<comments>http://www.zonaw.com/como-generar-un-fichero-excel-con-php/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 06:54:46 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[Scripts Javascript]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[estadísticas]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[exportar]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">/?p=1262</guid>
		<description><![CDATA[En el siguiente artículo vamos a ver una guía de cómo generar un fichero en formato Excel utilizando PHP. Esto puede ser muy útil para generar u ofrecer la posibilidad a nuestros usuarios de descargar un fichero .xls que contenga: reportes de estadísticas, rendimiento, facturación, etc. de nuestra base de datos. Para comenzar necesitamos una [...]]]></description>
			<content:encoded><![CDATA[<p>En el siguiente artículo vamos a ver una guía de <strong>cómo generar un fichero en formato Excel utilizando PHP</strong>. Esto puede ser muy útil para generar u ofrecer la posibilidad a nuestros usuarios de <strong>descargar un fichero .xls</strong> que contenga: reportes de estadísticas, rendimiento, facturación, etc. de nuestra base de datos.</p>
<p>Para comenzar necesitamos una clase llamada <a href="http://www.phpclasses.org/browse/package/1919.html">MS-Excel Stream Handler</a> que es la que contiene las funciones necesarias para crear archivos Excel. En <a href="http://blog.unijimpe.net/generar-excel-con-php/">unijimpe.net</a> basados en la documentación de la clase anterior, han creado el fichero <a href="http://samples.unijimpe.net/php-excel/excel-ext.txt">excel-ext.php</a> que contiene una función que facilitará el proceso.</p>
<p>Lo primero será utilizar la función <strong>createExcel</strong> la cual recibe dos parámetros, el primero el nombre del archivo que deseas crear y el segundo un array asociativo con los datos a mostrar en el archivo generado:</p>
<blockquote><p>createExcel(&#8220;excelname.xls&#8221;, array);</p></blockquote>
<p>El segundo paso es incluir el archivo <em>excel.php</em> y <em>excel-ext.php</em> en nuestro script php:</p>
<div>
<div id="php-2">
<div>
<blockquote>
<div>require_once(&#8220;excel.php&#8221;);</div>
<div>require_once(&#8220;excel-ext.php&#8221;);</div>
</blockquote>
<div>El tercer paso es crear un array asociativo que contiene los datos a mostrar, para nuestro ejemplo creamos un array que contiene una lista de nombre y su IQ.</div>
<div>
<div>
<div id="php-3">
<div>
<blockquote>
<div>$assoc = array(</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Mattias&#8221;, &#8220;IQ&#8221;=&gt;250),</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Tony&#8221;, &#8220;IQ&#8221;=&gt;100),</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Peter&#8221;, &#8220;IQ&#8221;=&gt;100),</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Edvard&#8221;, &#8220;IQ&#8221;=&gt;100)</div>
<div>);</div>
</blockquote>
<div>Por último, se crear el archivo Excel, para ello utilizamos la función createExcel, uniendo todo tendríamos:</div>
</div>
<div>
<div>
<div id="php-4">
<div>
<blockquote>
<div>require_once(&#8220;excel.php&#8221;);</div>
<div>require_once(&#8220;excel-ext.php&#8221;);</div>
<div>$assoc = array(</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Mattias&#8221;, &#8220;IQ&#8221;=&gt;250),</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Tony&#8221;, &#8220;IQ&#8221;=&gt;100),</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Peter&#8221;, &#8220;IQ&#8221;=&gt;100),</div>
<div>array(&#8220;Nombre&#8221;=&gt;&#8221;Edvard&#8221;, &#8220;IQ&#8221;=&gt;100)</div>
<div>);</div>
<div>createExcel(&#8220;excel-array.xls&#8221;, $assoc);</div>
<div>exit;</div>
</blockquote>
<div>Esto generará un archivo excel con dos columnas llamadas Nombre y IQ con  los datos creados en el array.</div>
</div>
<div>
<h3><strong>Crear Excel desde una Base de Datos</strong></h3>
<p>Con el siguiente ejemplo se obtienen datos desde una base de datos <strong>MySQL</strong> y generará un archivo Excel como reporte. Para ello primero creamos una conexión a nuestra base de datos y consultamos la tabla empresa y luego colocamos los resultados en una matriz asociativa llamada <em>$data</em>.</p>
<div>
<div id="php-5">
<div>
<blockquote>
<div>require_once(&#8220;excel.php&#8221;);</div>
<div>require_once(&#8220;excel-ext.php&#8221;);</div>
<div>// Consultamos los datos desde MySQL</div>
<div>$conEmp = mysql_connect(&#8220;localhost&#8221;, &#8220;userDB&#8221;, &#8220;passDB&#8221;);</div>
<div>mysql_select_db(&#8220;sampleDB&#8221;, $conEmp);</div>
<div>$queEmp = &#8220;SELECT nombre, direccion, telefono FROM empresa&#8221;;</div>
<div>$resEmp = mysql_query($queEmp, $conEmp) or die(mysql_error());</div>
<div>$totEmp = mysql_num_rows($resEmp);</div>
<div>// Creamos el array con los datos</div>
<div>while($datatmp = mysql_fetch_assoc($resEmp)) {</div>
<div>$data[] = $datatmp;</div>
<div>}</div>
<div>// Generamos el Excel</div>
<div>createExcel(&#8220;excel-mysql.xls&#8221;, $data);</div>
<div>exit;</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/como-generar-un-fichero-excel-con-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detectar si el navegador soporta HTML5 y CSS3</title>
		<link>http://www.zonaw.com/detectar-si-el-navegador-soporta-html5-y-css3/</link>
		<comments>http://www.zonaw.com/detectar-si-el-navegador-soporta-html5-y-css3/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 13:02:45 +0000</pubDate>
		<dc:creator>ZonaW</dc:creator>
				<category><![CDATA[Accesibilidad Web]]></category>
		<category><![CDATA[Herramientas Diseño]]></category>
		<category><![CDATA[Scripts Javascript]]></category>
		<category><![CDATA[Tutoriales Web]]></category>
		<category><![CDATA[accesibilidad]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">/?p=1252</guid>
		<description><![CDATA[A estas alturas la mayoría, aunque no todos los navegadores webs actualizados: Firefox, Chrome, Safari, IE9, Opera&#8230; ya dan soporte a gran cantidad de las nuevas funcionalidades de HTML 5. Para los webmasters saber si el navegador de los visitantes que acceden a nuestro site  soportan: video, canvas, localStorage, el tag audio&#8230; se hace tremendamente [...]]]></description>
			<content:encoded><![CDATA[<p>A estas alturas la mayoría, aunque <strong>no todos</strong> los navegadores webs actualizados: Firefox, Chrome, Safari, IE9, Opera&#8230; ya dan<strong> soporte a gran cantidad de las nuevas funcionalidades de HTML 5</strong>. Para los webmasters saber si el navegador de los visitantes que acceden a nuestro site  soportan: <em>video</em>, <em>canvas</em>, <em>localStorage, el tag audio</em>&#8230; se hace tremendamente necesario.</p>
<p><span id="more-1252"></span>Para solucionar este problema existe una <strong>librería javascript</strong> llamada <strong><a href="http://www.modernizr.com/" target="_blank">Modernizr</a></strong> que <strong>nos permite detectar el soporte</strong> a varias de las nuevas características que ofrecen HTML5 y CSS3.</p>
<p><a href="http://www.zonaw.com/wp-content/uploads/2011/09/modernizr.jpg"><img class="aligncenter size-full wp-image-1253" title="modernizr" src="http://www.zonaw.com/wp-content/uploads/2011/09/modernizr.jpg" alt="modernizr" width="550" height="315" /></a><strong><br />
</strong></p>
<p><strong> </strong></p>
<p><strong>Modo de utilizar <a href="http://www.modernizr.com/" target="_blank">Modernizr</a> para detectar HTML5 y CSS3:</strong></p>
<ol>
<li>Descargar desde su web el fichero .js, también podemos posonalizarlo nosotros mismos desde el apartado <a href="http://www.modernizr.com/download/">download</a>.</li>
<li>Después de subirlo a nuestro servidor añadir la librería en el <em>head</em>:</li>
<div>
<blockquote>
<div>&lt;script src=&#8221;modernizr.min.js&#8221;&gt;&lt;/script&gt;</div>
</blockquote>
</div>
<li>No requiere llamar a ninguna función para que <a href="http://www.modernizr.com/" target="_blank">Modernizr</a> comience (se inicia automáticamente al crear el objeto Modernizr) en este, cada propiedad corresponde a funciones tipo boolean (verdadero o falso). Por ejemplo, para detectar si el navegador soporta el elemento video, debemos escribir el siguiente código javascript:</li>
</ol>
<p>Para detectar si el navegador soporta el elemento <em>audio</em>:</p>
<div>
<blockquote>
<div>if (Modernizr.audio) {<br />
// el navegador del usuario soporta el elemento audio<br />
} else {<br />
// el navegador no soporta audio<br />
//(una solución alternativa podría ser usar Flash)<br />
}</div>
<div></div>
</blockquote>
<div>
<p>Para detectar si el navegador soporta el elemento <em>canvas</em>:</p>
<div>
<blockquote>
<div>if (Modernizr.canvas) {<br />
// el navegador soporta canvas<br />
} else {<br />
// no hay soporte para canvas<br />
}</div>
</blockquote>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaw.com/detectar-si-el-navegador-soporta-html5-y-css3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

