<?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>
	
	<atom:link href="http://snippets-tricks.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://snippets-tricks.org</link>
	<description>Para personas que escriben código</description>
	<lastBuildDate>Thu, 10 Mar 2011 19:33:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		
		<link>http://snippets-tricks.org/configurar-xampp-virtualhosts-linux/</link>
		<comments>http://snippets-tricks.org/configurar-xampp-virtualhosts-linux/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 20:29:40 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Herramientas & Tips]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=262</guid>
		<description><![CDATA[XAMPP nos permite configurar los VirtualHosts, esto nos permite trabajar con varios dominios en nuestra instalación local, lo cual nos permite trabajar mas cómodamente por proyecto. Paso 1: Instalación Solo realiza la instalación de XAMPP normal como lo indican en el manual. Necesitamos verificar que&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>XAMPP nos permite configurar los <em>VirtualHosts</em>, esto nos permite trabajar con varios dominios en nuestra instalación local, lo cual nos permite trabajar mas cómodamente por proyecto.</p>
<p><span id="more-262"></span></p>
<h2>Paso 1: Instalación</h2>
<p>Solo realiza la instalación de XAMPP normal como lo indican en el manual.</p>
<p>Necesitamos verificar que funcione la instalación, para esto solo debemos iniciarlo:</p>
<pre>$ sudo /opt/lampp/lampp start
Starting XAMPP for Linux 1.7.3a...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.</pre>
<p>Antes de continuar, asegurate de que funciona correctamente.</p>
<h2>Paso 2: Agregar el dominio</h2>
<p>Primero agregaremos el o los dominios con los que queremos trabajar en nuestra instalación local.</p>
<p>Para esto es necesario abrir el archivo <code>/etc/hosts</code> y agregar los dominios que queramos al final del archivo:</p>
<pre>$ sudo gedit /etc/hosts</pre>
<pre>127.0.0.1	www.wordpress.dev
127.0.0.1	www.codeigniter.dev
127.0.0.1	www.magento.dev</pre>
<h2>Paso 3: Crear los directorios para cada dominio</h2>
<p>En el directorio <code>/opt/lampp/htdocs</code> se deben colocar los directorios para cada dominio.</p>
<p>Yo cuento con los directorios <em>wordpress</em>, </em>magento</em> y </em>codeigniter</em>.</p>
<p><img src="http://snippets-tricks.org/snippets-media/2011/02/directorios-xampp.png" alt="" title="directorios-xampp" width="514" height="399" class="aligncenter size-full wp-image-264" /></p>
<h2>Paso 4: Creando los Virtual Host</h2>
<p>Necesitamos abrir el archivo <code>/opt/lampp/etc/extra/httpd-vhosts.conf</code>.</p>
<pre>$ sudo gedit /opt/lampp/etc/extra/httpd-vhosts.conf</pre>
<p>Y al final del documento escribimos la configuración para cada dominio y la configuración de ejemplo la colocamos como comentarios:</p>
<pre>#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ServerAlias www.dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host2.example.com
#    DocumentRoot /www/docs/dummy-host2.example.com
#    ServerName dummy-host2.example.com
#    ErrorLog logs/dummy-host2.example.com-error_log
#    CustomLog logs/dummy-host2.example.com-access_log common
#</VirtualHost>

&lt;VirtualHost *:80>
	ServerAdmin webmaster@localhost
	DocumentRoot /opt/lampp/htdocs/
	ServerName localhost
&lt;/VirtualHost>

&lt;VirtualHost *:80>
	ServerAdmin webmaster@wordpress.dev
	DocumentRoot /opt/lampp/htdocs/wordpress/
	ServerName www.wordpress.dev
&lt;/VirtualHost>

&lt;VirtualHost *:80>
	ServerAdmin webmaster@codeigniter.dev
	DocumentRoot /opt/lampp/htdocs/codeigniter/
	ServerName www.codeigniter.dev
&lt;/VirtualHost>

&lt;VirtualHost *:80>
	ServerAdmin webmaster@magento.dev
	DocumentRoot /opt/lampp/htdocs/magento/
	ServerName www.magento.dev
&lt;/VirtualHost></pre>
<p>Ahora necesitamos modificar el archivo <code>/opt/lampp/etc/httpd.conf</code></p>
<pre>$ sudo gedit /opt/lampp/etc/httpd.conf</pre>
<p>Y modificar la línea:</p>
<pre># Virtual hosts
#Include etc/extra/httpd-vhosts.conf</pre>
<p>por:</p>
<pre># Virtual hosts
Include etc/extra/httpd-vhosts.conf</pre>
<h2>Paso 5: Reiniciar XAMPP</h2>
<p>Ahora solo debemos reiniciar XAMPP.</p>
<pre>$ sudo /opt/lampp/lampp restart
[sudo] password for alberto:
Stopping XAMPP for Linux 1.7.3a...
XAMPP: Stopping Apache with SSL...
XAMPP: Stopping MySQL...
XAMPP: Stopping ProFTPD...
XAMPP stopped.
Starting XAMPP for Linux 1.7.3a...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.</pre>
<p>Ahora ya puedes trabajar con diferentes dominios con XAMPP.</p>
<p><img src="http://snippets-tricks.org/snippets-media/2011/02/dominios-xampp.png" alt="" title="dominios-xampp" width="647" height="380" class="aligncenter size-full wp-image-265" /></p>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/configurar-xampp-virtualhosts-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/la-p-de-wordpress/</link>
		<comments>http://snippets-tricks.org/la-p-de-wordpress/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 23:21:33 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=251</guid>
		<description><![CDATA[WordPress esta acostumbrado a cambiar nuestro contenido, y en WordPress 3.0 se introdujo una nueva función que corrige la ortografía de la palabra WordPress. Si la letra p esta escrita en minúscula, automáticamente la cambia a mayúscula. Wordpress -> WordPress Pero, realmente ese no es&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>WordPress esta acostumbrado a cambiar nuestro contenido, y en WordPress 3.0 se introdujo una nueva función que corrige la ortografía de la palabra <em>WordPress</em>.</p>
<p>Si la letra <em>p</em> esta escrita en minúscula, automáticamente la cambia a mayúscula.</p>
<pre class="brush: text">Wordpress -> WordPress</pre>
<p>Pero, realmente ese no es el problema. El punto es que el contenido es nuestro y debemos tener la capacidad de escribir como lo deseemos incluyendo &#8220;Wordpress&#8221;.</p>
<p>Algunos sitios de interés:</p>
<ul>
<li><a href="http://core.trac.wordpress.org/ticket/13971" rel="external">&#8220;Wordpress&#8221; being turned into CamelCase “WordPress” breaks URLs</a></li>
<li><a href="http://capitalp.org/" rel="external">The capital &#8220;P&#8221; in WordPress caused the BP oil spill</a></li>
<li><a href="http://codex.wordpress.org/Function_Reference/capital_P_dangit" rel="external">WordPress Codex</a></li>
</ul>
<p>Para eliminar la función <code>capital_P_dangi</code>t, tan solo escribe el siguiente código en el archivo <code>functions.php</code>:</p>
<pre class="brush: php">remove_filter( 'the_content', 'capital_P_dangit', 11 );
remove_filter( 'the_title', 'capital_P_dangit', 11 );
remove_filter( 'comment_text', 'capital_P_dangit', 11 );</pre>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/la-p-de-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/individual-post-stylesheets/</link>
		<comments>http://snippets-tricks.org/individual-post-stylesheets/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 23:23:10 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=247</guid>
		<description><![CDATA[En ocaciones necesitaremos cambiar el diseño de un Post en particular y romper el patron de diseño. El siguiente código permite seleccionar una hoja de estilo que se encuentre en la carpeta /post-style/ y asignarlo a un post individual utilizando Stylesheet como meta key. &#60;?php&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>En ocaciones necesitaremos cambiar el diseño de un Post en particular y romper el patron de diseño.</p>
<p>El siguiente código permite seleccionar una hoja de estilo que se encuentre en la carpeta <code>/post-style/</code> y asignarlo a un post individual utilizando <code>Stylesheet</code> como <em>meta key</em>.<br />
<span id="more-247"></span></p>
<pre class="brush: php">
&lt;?php

add_filter( 'stylesheet_uri', 'post_stylesheets_uri', 10, 2 );

function post_stylesheets_uri( $stylesheet_uri, $stylesheet_dir_uri ) {
	global $wp_query;

	if ( is_singular() ) {

		$stylesheet = get_post_meta( $wp_query->post->ID, 'Stylesheet', true );

		if ( !empty( $stylesheet ) &#038;&#038; file_exists( get_stylesheet_directory() . "/post-style/{$stylesheet}" ) )
			$stylesheet_uri = $stylesheet_dir_uri . "/post-style/{$stylesheet}";
	}

	return $stylesheet_uri;
}

?></pre>
<p><img src="http://snippets-tricks.org/snippets-media/2010/10/post-stylesheet.png" alt="" title="post-stylesheet" width="393" height="221" class="aligncenter size-full wp-image-248" /></p>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/individual-post-stylesheets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/genera-keywords-wordpress/</link>
		<comments>http://snippets-tricks.org/genera-keywords-wordpress/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 22:38:39 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=244</guid>
		<description><![CDATA[Se sabe muy bien que los motores de búsqueda de prestigio no toman encuenta las palabras clave introducidas en la meta-tag keywords. Si deseas ir sobre seguro, incluya las palabras clave, pero no te hagas muchas ilusiones sobre el efecto que tendra. Pocas palabras clave&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>Se sabe muy bien que los motores de búsqueda de prestigio no toman encuenta las palabras clave introducidas en la <em>meta-tag keywords</em>.</p>
<p>Si deseas ir sobre seguro, incluya las palabras clave, pero no te hagas muchas ilusiones sobre el efecto que tendra.</p>
<blockquote><p>Pocas palabras clave bien elegidas son mucho mejor que muchas con poca relevancia.</p></blockquote>
<p><span id="more-244"></span></p>
<pre class="brush: php">
&lt;?php

add_action( 'wp_head', 'meta_keywords' );

function meta_keywords() {
	global $wp_query;

	$keywords = '';

	if ( is_singular() &#038;&#038; !is_preview() ) {
		$keywords = get_post_meta( $wp_query->post->ID, 'Keywords', true );

		if ( empty( $keywords ) ) {
			$taxonomies = get_object_taxonomies( $wp_query->post->post_type );

			if ( is_array( $taxonomies ) ) {
				foreach ( $taxonomies as $tax ) {
					if ( $terms = get_the_term_list( $wp_query->post->ID, $tax, '', ', ', '' ) )
						$keywords[] = $terms;
				}
			}

			if ( !empty( $keywords ) )
				$keywords = join( ', ', $keywords );
		}
	}

	if ( !empty( $keywords ) )
		$keywords = '&lt;meta name="keywords" content="' . esc_attr( strip_tags( $keywords ) ) . '" />' . "\n";

	echo $keywords;
}

?></pre>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/genera-keywords-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/formulario-busqueda-wordpress-codex/</link>
		<comments>http://snippets-tricks.org/formulario-busqueda-wordpress-codex/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 07:52:29 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=241</guid>
		<description><![CDATA[Si escribes código para WordPress, una buena idea sería agregar un formulario de búsqueda para WordPress Codex en la pantalla administrativa. Tan solo tenemos que escribir el siguiente código en el archivo functions.php: add_filter( 'in_admin_header', 'add_form' ); function add_form ( ) { echo '&#60;form target="_blank"&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p><img src="http://snippets-tricks.org/snippets-media/2010/10/search-codex.png" alt="" title="search-codex" width="313" height="81" class="alignright size-full wp-image-243" /></p>
<p>Si escribes código para WordPress, una buena idea sería agregar un formulario de búsqueda para <em>WordPress Codex</em> en la pantalla administrativa.</p>
<p>Tan solo tenemos que escribir el siguiente código en el archivo <code>functions.php</code>:</p>
<pre class="brush: php">add_filter( 'in_admin_header', 'add_form' );

function add_form ( ) {
	echo '&lt;form target="_blank" method="get" action="http://wordpress.org/search/do-search.php" class="alignright" style="margin: 11px 5px 0;">
	&lt;input type="text" onblur="this.value=(this.value==\'\') ? \'Search the Codex\' : this.value;" onfocus="this.value=(this.value==\'Search the Codex\') ? \'\' : this.value;" maxlength="150" value="Search the Codex" name="search" class="text">
	&lt;input type="submit" value="Go" class="button">
	&lt;/form>';
}</pre>
<p>Esta idea ha sido de <a href="http://forrst.com/people/trepmal" rel="external">trepmal</a> en Forrst: <a href="http://forr.st/~X7P" rel="shortlink external">Add WordPress Codex search to WordPress admin screen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/formulario-busqueda-wordpress-codex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/como-superar-estres/</link>
		<comments>http://snippets-tricks.org/como-superar-estres/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 03:05:09 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[WorkAwesome]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=240</guid>
		<description><![CDATA[Nuestro trabajo como programadores o cualquier otro trabajo con el que nos pasamos mucho tiempo sentados frente a la computadora puede ser muy estresante. Les dejo un video de Tara Stiles con algúnos tips para superar el estrés. Lecturas recomendadas: Es viernes: ¿Cómo manejar el&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>Nuestro trabajo como programadores o cualquier otro trabajo con el que nos pasamos mucho tiempo sentados frente a la computadora puede ser muy estresante.</p>
<p>Les dejo un video de Tara Stiles con algúnos tips para superar el estrés.</p>
<p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/Nk1F8rKk0oA?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Nk1F8rKk0oA?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><span id="more-240"></span><br />
Lecturas recomendadas:</p>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/es-viernes-%C2%BFcomo-manejar-el-estres-del-dia-a-dia/" rel="external">Es viernes: ¿Cómo manejar el estrés del día a día?</a></li>
<li><a href="http://workawesome.com/general/letting-go-of-stress/" rel="external">4 Simple Steps for Letting Go of Stress</a></li>
<li><a href="http://workawesome.com/productivity/get-more-done-less-stress/" rel="external">Room To Breathe: Tips to Get More Done with Less Stress</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/como-superar-estres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/bloquea-blacklist-wordpress/</link>
		<comments>http://snippets-tricks.org/bloquea-blacklist-wordpress/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 07:42:35 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=236</guid>
		<description><![CDATA[Bloquear las Direcciones IPs de los Spammers es una práctica bastante efectiva, simple y cuenta con dos grandes ventajas: Ahorro de banda ancha Disminución de los ciclos del CPU La idea de bloquear las Direcciones IP ha sido Jeff Starr, yo he adoptado su idea&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>Bloquear las Direcciones IPs de los Spammers es una práctica bastante efectiva, simple y cuenta con dos grandes ventajas:</p>
<ol>
<li>Ahorro de banda ancha</li>
<li>Disminución de los ciclos del CPU</li>
</ol>
<p><span id="more-236"></span><br />
La idea de bloquear las Direcciones IP ha sido <a href="http://perishablepress.com/">Jeff Starr</a>, yo he adoptado su idea para Wordpress.</p>
<ul>
<li>Publicación: <a href="http://perishablepress.com/press/2010/07/06/2010-ip-blacklist/" rel="external">2010 IP Blacklist</a></li>
</ul>
<p>Para implementar esto en Wordpress debemos:</p>
<ol>
<li>Utilizar el hook <code>init</code> con la prioridad <code>1</code>, de este modo detendremos todos los procesos en caso de que existe una Dirección IP en la lista negra.</li>
<li>Crear un archivo de texto llamado <code>blacklist.txt</code> con una lista de Direcciones IPs malas en el directorio raíz.</li>
</ol>
<p>Esta es mi lista negra: <a href="http://snippets-tricks.org/blacklist.txt">blacklist.txt</a></p>
<p>Tan solo tenemos que agregar las siguientes funciones en el archivo <code>functions.php</code>:</p>
<pre class="brush: php">
&lt;?php

/* Ejecutamos la función 'blacklist_init' antes que todo. */
add_action( 'init', 'blacklist_init', 1 );

/**
 * Dentro de esta función obtenemos la Dirección IP del visitante
 * y verificamos si existe dentro de la lista negra.
 *
 * En caso de que exista bloqueamos al usuario.
 */
function blacklist_init() {

	$ip = $_SERVER['REMOTE_ADDR'];

	if ( in_blacklist( $ip ) )
		wp_die( __( 'Lo siento, no tienes los permisos para acceder a esta página.' ) );
}

/**
 * Con esta función verificamos si la Dirección IP obtenida existe a la lista negra.
 */
function in_blacklist( $ip ) {

	if ( in_array( $ip, get_blacklist() ) )
		return true;

	return false;
}

/**
 * Obtenemos la lista del archivo blacklist.txt y
 * agregamos las Direcciones IP en un arreglo.
 */
function get_blacklist() {

	$blacklist = array();
	$file = ABSPATH . 'blacklist.txt';

	if ( file_exists( $file ) )
		$blacklist = file( $file, FILE_IGNORE_NEW_LINES );

	return $blacklist;
}

?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/bloquea-blacklist-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/funciones-ordenar-arreglos-php/</link>
		<comments>http://snippets-tricks.org/funciones-ordenar-arreglos-php/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 05:02:35 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=234</guid>
		<description><![CDATA[Los arreglos son listas que deben ordenarse dependiendo de las necesidades del cliente final. PHP cuenta con una libreria de funciones para ordenar los arreglos. Funciones sort y rsort Funciones asort y arsort Funciones ksort y krsort Funciones natsort y natcasesort Funciones usort y uksort&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>Los arreglos son listas que deben ordenarse dependiendo de las necesidades del cliente final. PHP cuenta con una libreria de funciones para ordenar los arreglos.</p>
<ul>
<li><a href="http://snippets-tricks.org/funciones-ordenar-arreglos-php/#sort-rsort">Funciones sort y rsort</a></li>
<li><a href="http://snippets-tricks.org/funciones-ordenar-arreglos-php/#asort-arsort">Funciones asort y arsort</a></li>
<li><a href="http://snippets-tricks.org/funciones-ordenar-arreglos-php/#kort-krsort">Funciones ksort y krsort</a></li>
<li><a href="http://snippets-tricks.org/funciones-ordenar-arreglos-php/#natsort-natcasesort">Funciones natsort y natcasesort</a></li>
<li><a href="http://snippets-tricks.org/funciones-ordenar-arreglos-php/#usort-uksort">Funciones usort y uksort</a></li>
<li><a href="http://snippets-tricks.org/funciones-ordenar-arreglos-php/#array-multisort">Función array_multisort</a></li>
</ul>
<p><span id="more-234"></span></p>
<hr />
<h2 id="sort-rsort"><span>Funciones:</span> sort &#038; rsort</h2>
<p>Estas funciones examinan los valores del arreglo y los ordena de forma ascendente y descendente respectivamente cambiando los índices de cada elemento.</p>
<p>Toman dos parámetros: El primero es un arreglo y el segundo en un valor entero que especifica como se analizaran los datos.</p>
<pre class="brush: php">/* Ordena de forma ascendente */
void sort ( array var [, int sort_flag = SORT_REGULAR ] )

/* Ordena de forma descendente */
void rsort ( array var [, int sort_flag = SORT_REGULAR ] )</pre>
<p>Opciones para ordenar los arreglos:</p>
<ul>
<li><code>SORT_NUMERIC</code>: Compara los elementos de forma numérica</li>
<li><code>SORT_REGULAR</code>: Compara los elementos normalmente</li>
<li><code>SORT_STRING</code>: Compara los elementos como cadena</li>
<li><code>SORT_LOCALE_STRING</code>: Compara los elementos como cadenas, basándose en la localización actual</li>
</ul>
<pre class="brush: php">&lt;?php

$arreglo = array(
	'169',
	'882',
	'26',
	'16',
	'84'
);

/* Imprimir el arreglo original */
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado */
sort( $arreglo );
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado de forma descendiente */
rsort( $arreglo );
print_r( $arreglo );

?></pre>
<p>Este ejemplo produce la siguiente salida:</p>
<pre>Array ( [0] => 169 [1] => 882 [2] => 26 [3] => 16 [4] => 84 )
Array ( [0] => 16 [1] => 26 [2] => 84 [3] => 169 [4] => 882 )
Array ( [0] => 882 [1] => 169 [2] => 84 [3] => 26 [4] => 16 )</pre>
<hr />
<h2 id="asort-arsort"><span>Funciones:</span> asort &#038; arsort</h2>
<p>Estas funciones, al igual que sort y asort examinan los valores del arreglo y los ordena de forma ascendente y descendente respentivamente conservando los indices de cada elemento.</p>
<p>Toman dos parametros: El primero es un arreglo y el segundo en un valor entero que especifica como se analizaran los datos.</p>
<pre class="brush: php">/* Ordena de forma ascendente */
void asort ( array var [, int sort_flag = SORT_REGULAR ] )

/* Ordena de forma descendente */
void arsort ( array var [, int sort_flag = SORT_REGULAR ] )</pre>
<pre class="brush: php">&lt;?php

$arreglo = array(
	'169',
	'882',
	'26',
	'16',
	'84'
);

/* Imprimir el arreglo original */
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado */
asort( $arreglo );
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado de forma descendiente */
arsort( $arreglo );
print_r( $arreglo );

?></pre>
<pre>Array ( [0] => 169 [1] => 882 [2] => 26 [3] => 16 [4] => 84 )
Array ( [3] => 16 [2] => 26 [4] => 84 [0] => 169 [1] => 882 )
Array ( [1] => 882 [0] => 169 [4] => 84 [2] => 26 [3] => 16 )</pre>
<hr />
<h2 id="kort-krsort"><span>Funciones:</span> ksort &#038; krsort</h2>
<p>Estas funciones examinan los índices del arreglo y los ordena de forma ascendente y descendente respectivamente.</p>
<p>Toman dos parametros: El primero es un arreglo y el segundo en un valor entero que especifica como se analizaran los datos.</p>
<pre class="brush: php">/* Ordena de forma ascendente */
int ksort ( array var [, int sort_flag = SORT_REGULAR ] )

/* Ordena de forma descendente */
int krsort ( array var [, int sort_flag = SORT_REGULAR ] )</pre>
<pre class="brush: php">&lt;?php

$arreglo = array(
	'169',
	'882',
	'26',
	'16',
	'84'
);

/* Imprimir el arreglo original */
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado */
ksort( $arreglo );
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado de forma descendiente */
krsort( $arreglo );
print_r( $arreglo );

?></pre>
<pre>Array ( [0] => 169 [1] => 882 [2] => 26 [3] => 16 [4] => 84 )
Array ( [0] => 169 [1] => 882 [2] => 26 [3] => 16 [4] => 84 )
Array ( [4] => 84 [3] => 16 [2] => 26 [1] => 882 [0] => 169 )</pre>
<hr />
<h2 id="natsort-natcasesort"><span>Funciones:</span> natsort &#038; natcasesort</h2>
<p>Toman un solo parámetro: El arreglo.</p>
<pre class="brush: php">void natsort( array var )
void natcasesort( array var )</pre>
<p>La función <code>natsort()</code> ordena los valores exactamente igual que la funsión <code>asort()</code> utilizando SORT_STRING.</p>
<pre class="brush: php">&lt;?php

$arreglo = array(
	'php',
	'ruby',
	'java',
	'c-sharp',
	'phyton'
);

/* Imprimir el arreglo original */
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado */
natsort( $arreglo );
print print_r( $arreglo, true ) . "&lt;br>";

?></pre>
<pre>Array ( [0] => php [1] => ruby [2] => java [3] => c-sharp [4] => phyton )
Array ( [3] => c-sharp [2] => java [0] => php [4] => phyton [1] => ruby )</pre>
<p>La función <code>natcasesort()</code> trabaja como la función <code>natsort()</code> pero ordena las cadenas con Case-Sensitive.</p>
<p>Case-Sensitive coloca las letras mayúsculas antes que las minúsculas.</p>
<pre class="brush: php">&lt;?php

$arreglo = array(
	'php',
	'ruby',
	'Java',
	'c-sharp',
	'Phyton'
);

/* Imprimir el arreglo original */
print print_r( $arreglo, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado */
natsort( $arreglo );
print print_r( $arreglo, true ) . "&lt;br>";

?></pre>
<pre>Array ( [0] => php [1] => ruby [2] => Java [3] => c-sharp [4] => Phyton )
Array ( [2] => Java [4] => Phyton [3] => c-sharp [0] => php [1] => ruby )</pre>
<hr />
<h2 id="usort-uksort"><span>Funciones:</span> usort &#038; uksort</h2>
<p>Estas funciones nos permiten ordenar un arreglo con nuestras propiar reglas. Esto se hace definiendo una función callback.</p>
<p>La función <code>usort()</code> cambia el valor del índice mientras que <code>uksort()</code> conserva los índices de los elementos.</p>
<p>Toman dos parámetros: El primero es un arreglo y el segundo es una función callback.</p>
<pre class="brush: php">void usort( array var, array callback_function )
void uksort( array var, array callback_function )</pre>
<pre class="brush: php">&lt;?php

$fechas = array( '10-DIC-09', '07-SEP-05', '02-ENE-10' );

/* Imprimir el arreglo original */
print print_r( $fechas, true ) . "&lt;br>";

/* Imprimir el arreglo ordenado */
usort( $fechas, 'ordenar' );
print print_r( $fechas, true );

function ordenar( $a, $b ) {

	$meses = array(
		'ENE', 'FEB', 'MAR', 'ABR', 'MAY', 'JUN',
		'JUL', 'AGO', 'SEP', 'OCT', 'NOV', 'DIC'
	);

	if ( $a == $b )
		return 0;

	list( $dia1, $mes1, $anno1 ) = explode( '-', $a );
	list( $dia2, $mes2, $anno2 ) = explode( '-', $b );

	$a = $anno1.array_search( $mes1, $mes ) . $dia1;
	$b = $anno2.array_search( $mes2, $mes ) . $dia2;

	return ( $a > $b ) ? 1 : -1;
}

?></pre>
<pre>Array ( [0] => 10-DIC-09 [1] => 07-SEP-05 [2] => 02-ENE-10 )
Array ( [0] => 07-SEP-05 [1] => 10-DIC-09 [2] => 02-ENE-10 )</pre>
<hr />
<h2 id="array-multisort"><span>Función:</span> array_multisort</h2>
<p>Esta función permite ordenar multiples arreglos.</p>
<p>Toma una lista de parámetros que incluyen arreglos, modo de ordenación y los arreglos deben tener el mismo tamaño.</p>
<p>Opciones para ordenar los arreglos:</p>
<ul>
<li><code>SORT_ASC</code></li>
<li><code>SORT_DESC</code></li>
<li><code>SORT_NUMERIC</code></li>
<li><code>SORT_REGULAR</code></li>
<li><code>SORT_STRING</code></li>
</ul>
<pre class="brush: php">bool array_multisort( array var1 [, mixed order [, mixed type [, array var2 ]] ... ] )</pre>
<pre class="brush: php">&lt;?php

$lenguajes = array(
	'php',
	'ruby',
	'Java',
	'c-sharp',
	'phyton'
);

$plataformas = array(
	'unix',
	'solaris',
	'windows',
	'mac',
	'linux'
);

/* Imprimir los arreglos originales */
print print_r( $lenguajes, true ) . "&lt;br>";
print print_r( $plataformas, true ) . "&lt;br>";

/* Imprimir los arreglos ordenados */
array_multisort( $lenguajes, SORT_DESC, $plataformas );

print print_r( $lenguajes, true ) . "&lt;br>";
print_r( $plataformas );

?></pre>
<pre>Array ( [0] => php [1] => ruby [2] => Java [3] => c-sharp [4] => phyton )
Array ( [0] => unix [1] => solaris [2] => windows [3] => mac [4] => linux )
Array ( [0] => ruby [1] => phyton [2] => php [3] => c-sharp [4] => Java )
Array ( [0] => solaris [1] => linux [2] => unix [3] => mac [4] => windows )</pre>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/funciones-ordenar-arreglos-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/redireccion-unix/</link>
		<comments>http://snippets-tricks.org/redireccion-unix/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 02:28:46 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Comandos]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=233</guid>
		<description><![CDATA[Todos los programas y comandos que se ejecutan en la consola imprimen un resultado en la pantalla. Estos resultados pueden ser redirigidos a un archivo plano en lugar de la pantalla así como también pueden ser la entrada de un comando o programa. Unix cuenta&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>Todos los programas y comandos que se ejecutan en la consola imprimen un resultado en la pantalla. Estos resultados pueden ser redirigidos a un archivo plano en lugar de la pantalla así como también pueden ser la entrada de un comando o programa.</p>
<p>Unix cuenta con <em>archivos predeterminados</em> que son redirigidos como entrada de un comando. A estos archivos se les conoce como <em>entrada estándar</em> (stdin), <em>salida estándar</em> (stdout) y <em>error estándar</em> (stderr).<br />
<span id="more-233"></span></p>
<h2>Redirección de la Salida</h2>
<p>La redirección de salida se realiza con el símbolo <em>&#8220;mayor que&#8221;</em> (>). Esto envía la salida del comando al archivo especificado en lugar de enviarlo a la pantalla.</p>
<pre>$ comando > archivo-de-salida</pre>
<p>En el siguiente ejemplo guardará la salida del comando <code>ls</code> en el archivo <code>listado.txt</code>.</p>
<pre>$ ls
Descargas   examples.desktop  Música              Público      workspace
Documentos  f-spot            Plantillas          Redirección
Dropbox     Imágenes          Plugin Development  SVN
Escritorio  Libros            Projects            Vídeos</pre>
<p>La salida del comando <code>ls</code> la podemos guardar en un archivo de la siguiente forma.</p>
<pre>$ ls > listado.txt
$ cat listado.txt
Descargas
directorios.txt
Documentos
Dropbox
Escritorio
examples.desktop
f-spot
Imágenes
Libros
Música
Plantillas
Plugin Development
Projects
Público
Redirección
SVN
Vídeos
workspace</pre>
<p>Si el archivo no existe, creará uno nuevo con el nombre especificado, pero en caso de que exista, lo sobreescribirá, por lo que debemos tener cuidado de no perder la información.</p>
<p>Para no perder la información se debe usar <code>>></code>, con esto haremos una <em>redirección de concatenación</em>.</p>
<h2>Redirección de la Entrada</h2>
<p>La redirección de entrada se realiza con el símbolo &#8220;menor que&#8221; (<). Esto hace que la entrada de un comando provenga de un archivo y no del teclado.</p>
<pre>$ comando < archivo-de-entrada</pre>
<p>En el siguiente ejemplo el comando <code>cat</code> toma su entrada como argumento del archivo <code>sin-teclado.txt</code> no del teclado.</p>
<pre>$ cat < sin-teclado.txt
No se usa el teclado</pre>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/redireccion-unix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		
		<link>http://snippets-tricks.org/shortcode-caption-wp-catption/</link>
		<comments>http://snippets-tricks.org/shortcode-caption-wp-catption/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 01:51:41 +0000</pubDate>
		<dc:creator>Luis Alberto Ochoa</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Herramientas & Tips]]></category>

		<guid isPermaLink="false">http://snippets-tricks.org/?p=228</guid>
		<description><![CDATA[Cuando insertamos imagenes con los Shortcode caption y wp_caption Wordpress agrega 10px más al ancho de la imagen. Esto puede ser o no ser un pequeño problema a la hora diseñar con CSS. Para tener el control del diseño debemos quitar esos 10px de más.&#160;.&#160;.&#160;.]]></description>
			<content:encoded><![CDATA[<p>Cuando insertamos imagenes con los Shortcode <code>caption</code> y <code>wp_caption</code> Wordpress agrega <code>10px</code> más al ancho de la imagen.</p>
<p>Esto puede ser o no ser un pequeño problema a la hora diseñar con CSS. Para tener el control del diseño debemos quitar esos 10px de más. Lo podemos hacer de dos formas distintas:</p>
<ol>
<li>Registrando nuevamente los Shortcodes <code>caption</code> &#038; <code>wp_catption</code>.</li>
<li>Utilizando el filtro <code>img_caption_shortcode</code>.</li>
</ol>
<p>Si no necesitamos personalizar por completo la salida de los Shortcodes, recomiendo registrar nuevamente los Shortcodes para mantener su estandar sin los <code>10px</code> de más.<br />
<span id="more-228"></span><br />
Tan solo copia y pega el siguiente código en el archivo <code>functions.php</code>.</p>
<pre class="brush: php; title:'function.php'">
&lt;?php

remove_shortcode( 'caption' );
remove_shortcode( 'wp_caption' );

add_shortcode( 'caption', 'improving_caption_shortcode' );
add_shortcode( 'wp_caption', 'improving_caption_shortcode' );

function improving_caption_shortcode( $attr, $content = null ) {

	$html = apply_filters('img_caption_shortcode', '', $attr, $content);
	if ( $html != '' )
		return $html;

        extract( shortcode_atts( array(
                'id' => '',
                'align' => 'alignnone',
                'width' => '',
                'caption' => ''
        ), $attr ) );

        if ( 1 > (int) $width || empty( $caption ) )
                return $content;

        if ( $id )
                $id = ' id="' . $id . '"';

        $html = '&lt;div' . $id . ' class="wp-caption ' . $align . '" style="width: ' . $width . 'px">';
        $html .= $content;
        $html .= '&lt;p class="wp-caption-text">' . $caption . '&lt;/p>';
        $html .= '&lt;/div>';

        return $html;
}

?></pre>
]]></content:encoded>
			<wfw:commentRss>http://snippets-tricks.org/shortcode-caption-wp-catption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: snippets-tricks.org @ 2012-02-05 03:08:19 -->
