<?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>Blog de Juaniquillo</title>
	<atom:link href="http://juaniquillo.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://juaniquillo.com/blog</link>
	<description>Algo divertido</description>
	<lastBuildDate>Tue, 06 Sep 2011 02:25:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
	<atom:link rel='hub' href='http://juaniquillo.com/blog/?pushpress=hub'/>
		<item>
		<title>Resumen (Agosto 2011)</title>
		<link>http://juaniquillo.com/blog/2011/08/resumen-agosto-2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=resumen-agosto-2011</link>
		<comments>http://juaniquillo.com/blog/2011/08/resumen-agosto-2011/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:41:31 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Miselaneos]]></category>
		<category><![CDATA[resumen]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=950</guid>
		<description><![CDATA[Hace algo de tiempo que no escribo nada así que decidí hacer un resumen de lo que tengo pensado hacer próximamente. Primero que nada, hemos estado bastante ocupados en el trabajo ya que estamos trabajando en varios websites grandes. Ya compartiré los enlaces una vez estén listos pero lo que vale la pena mencionar es [...]]]></description>
			<content:encoded><![CDATA[<p>Hace algo de tiempo que no escribo nada así que decidí hacer un resumen de lo que tengo pensado hacer próximamente. Primero que nada, hemos estado bastante ocupados en <a href="http://gtama.com/" target="_blank">el trabajo</a> ya que estamos trabajando en varios websites grandes. Ya compartiré los enlaces una vez estén listos pero lo que vale la pena mencionar es que estoy trabando en una nueva versión del CMS que uso para poder usarlo en algunos de estos nuevos websites. También, debido a que tenemos más personas trabajando en el área de programación, hemos decidido centralizar los archivos en un servidor principal y usar git para control de versiones. Espero que esto nos ayude a trabajar de forma más organizada.</p>
<p>En cuanto al blog, el próximo artículo será un tutorial de varias partes de como hacer un <a href="http://es.wikipedia.org/wiki/CRUD" target="_blank">CRUD</a> sencillo usando Dreamweaver. He algo que ya he tratado en parte, tanto en Foros del Web como en este mismo blug, pero espero que este nuevo tutorial sea mucho más organizado. Espero tener listo la <del>primera</del><sup>1</sup> segunda parte a principios de próximo mes.</p>
<div style="font-size: 11px;">1. Debido al paso del huracán Irene por la isla muchos nos hemos quedado sin electricidad por algunos días. Es por eso que se retrasa la salida del próximo artículo</div>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2011/08/resumen-agosto-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como crear un botón costumizado para TinyMCE</title>
		<link>http://juaniquillo.com/blog/2011/06/como-crear-boton-costumizado-para-tinymce/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-crear-boton-costumizado-para-tinymce</link>
		<comments>http://juaniquillo.com/blog/2011/06/como-crear-boton-costumizado-para-tinymce/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 02:01:03 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[palabras claves]]></category>
		<category><![CDATA[tinyMCE]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=887</guid>
		<description><![CDATA[Este artículo es parte de una serie la cual trata temas sacados de las &#8220;palabras claves&#8221; (keywords) usadas por personas que llegan a mi website mediante motores de búsqueda (google, bing, etc). He decidido hacer esto ya que veo que muchas personas  llegan al blog buscando algunos temas los cuales todavía no he tratado. Crear [...]]]></description>
			<content:encoded><![CDATA[<div class="ui-state-highlight ui-corner-all">Este artículo es parte de una serie la cual trata temas sacados de las &#8220;palabras claves&#8221; (keywords) usadas por personas que llegan a mi website mediante motores de búsqueda (google, bing, etc). He decidido hacer esto ya que veo que muchas personas  llegan al blog buscando algunos temas los cuales todavía no he tratado.</div>
<p>Crear un botón costumizado para TinyMCE para hacer cosas simples, como agregar elementos o HTML al editor, es bastante sencillo.  Se necesitan 4 cosas:</p>
<ol>
<li><strong>La imagen del botón.</strong> Esta debe ser una imagen 20px por 20px. Si es de otro tamaño el editor alterará el alto y el ancho de la imagen para que se de ese tamaño.</li>
<li><strong>El código HTML o elemento que quieres que se inserte en el editor.</strong></li>
<li><strong>El código javascript.</strong> Este se debe añadir al objeto de configuración del <a href="http://tinymce.moxiecode.com/wiki.php/Configuration" target="_blank">tinyMCE.init()</a>.</li>
<li><strong>Agregar el nuevo botón a la lista de botones.</strong></li>
</ol>
<h3>Imagen</h3>
<p>Como he mencionado antes la imagen debe ser 20px por 20px. Si la imagen es un gif o un png con transparencia se podrá apreciar el efecto &#8220;hover&#8221;, osea, el cambio que ocurre cuando se pone el pointer del mouse encima del botón. En este caso he usado <a href="http://www.iconfinder.com/icondetails/36242/16/page_add_icon" target="_blank">esta  imagen</a> sacada de <a href="http://www.iconfinder.com" target="_blank">IconFinder</a>.  La imagen es originalmente 16px por 16px. Yo la he llevado al tamaño adecuado:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2011/06/1309476056_page_add.png"><img class="alignnone size-full wp-image-922" title="page_add" src="http://juaniquillo.com/blog/wp-content/uploads/2011/06/1309476056_page_add.png" alt="" width="20" height="20" /></a></p>
<h3>Código html que se va a insertar</h3>
<p>Para este ejemplo yo usaré la frase &#8220;<strong>Hola Mundo!</strong>&#8220;, pero pueden sustituir este código por lo que quieran:</p>
<pre class="brush: xml; title: ; notranslate">Hola Mundo!</pre>
<h3>Código javascript que creará la funcionalidad</h3>
<p>La última parte, pero a la vez la más importante, es el código el cual debe insertarse en el objeto de la configuración de tu <a href="http://tinymce.moxiecode.com/wiki.php/Configuration" target="_blank">tinyMCE.init()</a>. Este es el código:</p>
<pre class="brush: jscript; title: ; notranslate">
setup : function(editor) {
	// Boton 1
	editor.addButton('mi_boton', {
		//nombre del boton
		title : 'Mi boton',
		//imagen del boton (20 x 20 px)
		image : 'mi_imagen.png',
		//funcion a ejecutarse cuando se le de clic al boton.
		onclick : function() {
			editor.focus();
			editor.selection.setContent('Contenido a insertar');
		}
	});
}
</pre>
<p>A continuación hago un desglose del código:</p>
<h4>setup</h4>
<p>El método &#8220;<a href="http://tinymce.moxiecode.com/wiki.php/Configuration:setup" target="_blank">setup</a>&#8221; añade <a href="http://tinymce.moxiecode.com/tryit/setup_editor_events.php" target="_blank">eventos</a> al editor. Como parámetro pasamos el objeto del editor:</p>
<pre class="brush: jscript; title: ; notranslate">setup : function(editor) {
	editor.evento(parametro)
}</pre>
<h4>addButton</h4>
<p>Es un método del objeto del editor el cual añade el botón a la barra de botones.</p>
<pre class="brush: jscript; title: ; notranslate">ed.addButton('example', {
	title : 'example.desc',
	image : '../jscripts/tiny_mce/plugins/example/img/example.gif',
	onclick : function() {
	ed.windowManager.alert('Hello world!! Selection: ' + ed.selection.getContent({format : 'text'}));
}</pre>
<p>Este método acepta dos parámetros:</p>
<ol>
<li>el nombre del botón</li>
<li>un objeto con las opciones del botón.</li>
</ol>
<p>Las opciones del objeto son las siguientes:</p>
<ul>
<li><strong>title</strong>: titulo del botón</li>
<li><strong>image</strong>: ruta de la imagen que se va a utilizar para el botón</li>
<li><strong>onclick</strong>: función  con el evento click del botón</li>
</ul>
<p>En el caso de mi ejemplo este es el resultado:</p>
<pre class="brush: jscript; title: ; notranslate">
setup : function(editor) {
	// Boton 1
	editor.addButton('mi_boton', {
		//nombre del boton
		title : 'Hola Mundo',
		//imagen del boton (20 x 20 px)
		image : 'page_add.png',
		//funcion a ejecutarse cuando se le de clic al boton.
		onclick : function() {
			editor.focus();
			editor.selection.setContent('Hola Mundo!');
		}
	});
}
</pre>
<p>Puedes ver mi tinyMCE.init <a href="http://juaniquillo.com/codigo/tinymce/boton_costumizado/js/tinyMCE.js" target="_blank">aquí</a></p>
<h3>Añadir botón a la lista de botones</h3>
<p>Una vez incluido el código al tinyMCE.init se agrega a la lista de botones, sea, a una de las propiedades:</p>
<ul>
<li>theme_advanced_buttons1</li>
<li>theme_advanced_buttons2</li>
<li>theme_advanced_buttons3</li>
</ul>
<p>ejemplo:</p>
<pre class="brush: jscript; title: ; notranslate">theme_advanced_buttons2 : &quot;mi_boton, styleselect, formatselect,fontselect,fontsizeselect,separator,image,media,vfilebrowser,preview&quot;,</pre>
<ul>
<li><a href="http://juaniquillo.com/codigo/tinymce/boton_costumizado/" target="_blank">Demo</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2011/06/como-crear-boton-costumizado-para-tinymce/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jTinyAjax: Plugin de jQuery para convertir a TinyMCE en un editor AJAX</title>
		<link>http://juaniquillo.com/blog/2011/05/jtinyajax/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jtinyajax</link>
		<comments>http://juaniquillo.com/blog/2011/05/jtinyajax/#comments</comments>
		<pubDate>Tue, 17 May 2011 04:04:05 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tinyMCE]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=827</guid>
		<description><![CDATA[jTinyAjax es un plugin de jQuery el cual permite utilizar el editor TinyMCE como un editor AJAX, ideal para hacer cualquier tipo de contenido editable . Aunque TinyMCE ya posee un muy buen API para hacer llamadas AJAX yo he tratado de simplificar el proceso lo más posible usando jQuery y agregar algo de funcionalidad extra. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2011/05/ScreenHunter_01-May.-14-12.13.gif"><img class="alignnone size-full wp-image-855 border_image1" src="http://juaniquillo.com/blog/wp-content/uploads/2011/05/ScreenHunter_01-May.-14-12.13.gif" alt="jTinyAjax" width="614" height="171" /></a></p>
<p><strong>jTinyAjax</strong> es un plugin de <a href="http://jquery.com/" target="_blank">jQuery</a> el cual permite utilizar el editor <a href="http://tinymce.moxiecode.com/" target="_blank">TinyMCE</a> como un editor AJAX, ideal para hacer cualquier tipo de contenido editable . Aunque TinyMCE <a href="http://tinymce.moxiecode.com/tryit/ajax_load_save.php" target="_blank">ya posee un muy buen API para hacer llamadas AJAX</a> yo he tratado de simplificar el proceso lo más posible usando jQuery y agregar algo de funcionalidad extra. El plugin pesa 5kb minificado, sin contar TinyMCE, y puede ser integrado con <a href="http://jqueryui.com/" target="_blank">jQuery UI </a>y <a href="http://jquery.malsup.com/block/" target="_blank">BlockUI</a> para efectos adicionales.</p>
<h3>Versión actual</h3>
<p>jTinyAjax 1.2</p>
<h3>Pruebas hechas en:</h3>
<p>IE 7 en adelante, Firefox 3 en adelante, Chrome 10 en adelante, Opera 11 en adelante y Safari 4 en adelante.</p>
<h3>Dependencias</h3>
<ul>
<li>El plugin depende de jQuery versión 1.4.2 o mayor debido al uso de funciones como <a href="http://api.jquery.com/delegate/" target="_blank">delegate()</a>.</li>
<li>También depende del paquete normal de TinyMCE versión 3 o superior. <strong>Favor de no usar la versión de jQuery</strong>.</li>
</ul>
<h3>Opcional</h3>
<ul>
<li>jQuery UI</li>
<li>BlockUI</li>
</ul>
<h3>Uso</h3>
<p>Primero, debemos incluir los archivos necesarios:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- css jTinyMCE --&gt;
&lt;link href=&quot;css/jtinyajax.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
&lt;!-- Scripts --&gt;
&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/tiny_mce/tiny_mce.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jTinyAjax.jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Si se van a usar jQuery UI y/o BlockUI se incluyen también:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- css jquery UI --&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css&quot; type=&quot;text/css&quot; /&gt;
&lt;!-- Scripts --&gt;
&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.blockUI/jquery.blockUI.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>La forma más básica de usar <strong>jTinyAjax</strong> es pasando el URL de la página encargada de interactuar con el servidor, de esta forma:</p>
<pre class="brush: jscript; title: ; notranslate">
//con opciones defecto
$('.jtinymceajax').jTinyAjax({
     url: &quot;pagina.php&quot;
});
</pre>
<h3>Opciones</h3>
<ul>
<li><span class="opciones1">url</span>: defecto &#8211; Empty String
<ul>
<li>URL donde se enviará el contenido. La misma se encargará de las operaciones del lado del servidor</li>
</ul>
</li>
<li><span class="opciones1">typeRequest</span>: defecto - &#8221;post&#8221;
<ul>
<li>Tipo de request AJAX , &#8220;post&#8221; o &#8220;get&#8221;</li>
</ul>
</li>
<li><span class="opciones1">tinymceinit</span>: defecto - Objeto de opciones de TinyMCE
<ul>
<li>Opciones de TinyMCE. Para más opciones pueden visitar la <a href="http://tinymce.moxiecode.com/wiki.php/Configuration" target="_blank">página oficial de TinyMCE</a>.</li>
</ul>
</li>
<li><span class="opciones1">extraParam</span>: defecto - Empty String
<ul>
<li>Parametros extras para enviar en la consulta AJAX el formato url string:
<pre class="brush: xml; title: ; notranslate">variable1=valor1&amp;variable2=valor2</pre>
</li>
</ul>
</li>
<li><span class="opciones1">buttonTextEdit</span>: defecto - &#8221;save&#8221;
<ul>
<li>Texto del boton de enviar el contenido</li>
</ul>
</li>
<li><span class="opciones1">buttonTextCancel</span>: defecto - &#8221;cancel&#8221;
<ul>
<li>Texto del boton de cancelar el contenido</li>
</ul>
</li>
<li><span class="opciones1">UIfy</span>: defecto - false
<ul>
<li>Opcion para convertir botones en botones de jQuery UI</li>
</ul>
</li>
<li><span class="opciones1">blockUI</span>: false
<ul>
<li>Opcion para usar blockUI. Valores: true, false</li>
</ul>
</li>
<li><span class="opciones1">blockOptions</span>: defecto - Objeto de opciones de blockUI
<ul>
<li>Opciones de blockUI que se utilizarán si la opción blockUI tiene el valor de <strong>true</strong>. Para más opciones pueden visitar la <a href="http://jquery.malsup.com/block/#options" target="_blank">página oficial del plugin</a>.</li>
</ul>
</li>
<li><span class="opciones1">ajaxTypeData</span>: defecto - &#8221;html&#8221;
<ul>
<li>Tipo de data a recibirse. HTML para el comportamiento defecto. Esto equivale al opci&amp;oacute;n dataType de la funci&amp;oacute;n ajax() de jQuery. Si se usa json se espera un campo llamado &#8220;editor&#8221; el cual debe poseer la informaci&amp;oacute;n que se quiere colocar en el editor web. El json puede contener cualquier campo adicional, ejemplo:
<pre class="brush: jscript; title: ; notranslate">
{&quot;editor&quot;:&quot;esto se pone en el editor&quot;,&quot;mensaje&quot;:&quot;este es un mensaje adicional&quot;}
</pre>
<p>El json será &#8220;parseado&#8221; antes de pasarse a los eventos usando el método &#8220;$.parseJSON()&#8221; de jQuery.</li>
</ul>
</li>
</ul>
<h3>Eventos</h3>
<ul>
<li><span class="opciones1">onClick</span>: function
<ul>
<li>Callback que se ejecuta cuando se le da click al elemetno para editarlo</li>
</ul>
</li>
<li><span class="opciones1">onCancel</span>: function
<ul>
<li>Callback que se ejecuta cuando se le da click al boton de cancelar</li>
</ul>
</li>
<li><span class="opciones1">onSend</span>: function
<ul>
<li>Callback que se ejecuta cuando se le da click al boton de enviar</li>
</ul>
</li>
<li><span class="opciones1">onError</span>: function
<ul>
<li>Callback que se ejecuta cuando hay un error en la consulta</li>
</ul>
</li>
<li><span class="opciones1">onSuccess</span>: function
<ul>
<li>Callback que se ejecuta cuando termine de realizarse la consulta</li>
</ul>
</li>
</ul>
<p><a id="demos" name="demos"></a></p>
<h3>Demo</h3>
<ul>
<li><a href="http://juaniquillo.com/codigo/jquery/jTinyAjax/1.0/" target="_blank">demo 1</a></li>
<li><a href="http://juaniquillo.com/codigo/jquery/jTinyAjax/1.0/ejemplo2/index.php" target="_blank">demo 2</a></li>
</ul>
<h3>Descarcar</h3>
<ul>
<li>Descarga el plugin en <a href="https://github.com/juaniquillo/jTinyAjax" target="_blank">GitHub</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2011/05/jtinyajax/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Resumen (Marzo 02 11)</title>
		<link>http://juaniquillo.com/blog/2011/03/resumen-marzo-02-11/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=resumen-marzo-02-11</link>
		<comments>http://juaniquillo.com/blog/2011/03/resumen-marzo-02-11/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 00:25:35 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Miselaneos]]></category>
		<category><![CDATA[resumen]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=816</guid>
		<description><![CDATA[Creo que es tiempo de hacer un resume de lo que estoy trabajando en estos momentos y lo que está por venir. Primero que nada me alegra informar que he mudado el website de servidor. En estos momentos estoy alojado en el servidor dedicado de la compañía donde trabajo. Se acabaron los problemas asociados al antiguo servidor. [...]]]></description>
			<content:encoded><![CDATA[<p>Creo que es tiempo de hacer un resume de lo que estoy trabajando en estos momentos y lo que está por venir. Primero que nada me alegra informar que he mudado el website de servidor. En estos momentos estoy alojado en el servidor dedicado de <a href="http://gtama.com/" target="_blank">la compañía donde trabajo</a>. Se acabaron los problemas asociados al antiguo servidor. Gracias a <a href="http://twitter.com/egtorres" target="_blank">@egtorres</a> por permitirme utilizar este espacio.</p>
<p>Quiero anunciar mi primer plugin jQuery, o por lo menos el primero que hago público:  <a href="http://juaniquillo.com/blog/2011/05/jtinyajax/">jTinyAjax</a>. Este plugin permite utilizar un elemento html (preferiblemente un div) como un editor AJAX. En estos momentos estoy haciendo pruebas en los diferentes navegadores y a la vez tratando de optimizarlo lo mejor que pueda. Pueden ver el progreso en la página del repositorio o en <a href="https://github.com/juaniquillo/jTinyAjax" target="_blank">Github</a>.</p>
<p>Hablando de Github, he decidido mover mis descargas, o por lo menos las que considero más importante, a esta plataforma. Lo quería hacer desde hace tiempo pero nunca había encontrado el tiempo.</p>
<p>Tengo también la idea para una nueva serie de artículos: <strong>Artículos sacados de las palabras claves de Google Analytics</strong>. En esta serie estaré tratando algunos de los temas inspirados en los keywords y expresiones provistos por <a href="http://www.google.com/analytics/" target="_blank">Google Analytics</a>. Esto lo hago ya que veo que hay muchas personas que llegan al blog buscando algunos temas los cuales todavía no he tratado. Por lo que he visto muchas de las visitas quieren saber más acerca de TinyMCE, FAncybox y Dreamweaver. Voy a tratar de incorporar uno que otro de esos artículos en los próximos meses.</p>
<p>Me despido diciendo que estoy escuchando a <strong><a href="http://www.last.fm/music/La+Secta" target="_blank">La Secta</a> - Siente El Fuego</strong>, sólo para no perder la costumbre de mencionar lo que escucho cuando hago este tipo de resumen.</p>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2011/03/resumen-marzo-02-11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Barcamp San Juan</title>
		<link>http://juaniquillo.com/blog/2011/02/barcamp-san-juan/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=barcamp-san-juan</link>
		<comments>http://juaniquillo.com/blog/2011/02/barcamp-san-juan/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 17:52:34 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[eventos locales]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=792</guid>
		<description><![CDATA[Dejo un corto mensaje para hablar un poco del último BarcampJS el cual se realizó en las oficinas de Contáctica en el Condado el pasado febrero 11. Primero que nada quiero felicitar la gran iniciativa de crear un evento como Barcamp en San Juan, Puerto Rico. En esta segunda edición las presentaciones estuvieron muy bien pensadas. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2011/02/Barcamp-San-Juan2.jpg"><img class="size-full wp-image-798" style="margin-top: 0px; margin-bottom: 0px; margin-left: 10px; margin-right: 10px; float: left;" title="Barcamp San Juan" src="http://juaniquillo.com/blog/wp-content/uploads/2011/02/Barcamp-San-Juan2.jpg" alt="" width="272" height="92" /></a>Dejo un corto mensaje para hablar un poco del último <a href="http://barcampsj.org/" target="_blank">BarcampJS</a> el cual se realizó en las oficinas de<a href="http://contactica-i.com/" target="_blank"> Contáctica</a> en el Condado el pasado febrero 11. Primero que nada quiero felicitar la gran iniciativa de crear un evento como Barcamp en San Juan, Puerto Rico. En esta segunda edición las presentaciones estuvieron muy bien pensadas. Disfrute especialmente la presentación de <a href="http://twitter.com/jameslynn" target="_blank">@jameslynn</a> acerca de los <a href="http://es.wikipedia.org/wiki/Svg" target="_blank">SVG</a>.</p>
<p style="text-align: center;">
<p style="text-align: left;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2011/02/image.jpg"><img class="alignnone size-full wp-image-805" title="T-Shirt BarcampSJ" src="http://juaniquillo.com/blog/wp-content/uploads/2011/02/image.jpg" alt="" width="431" height="281" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2011/02/barcamp-san-juan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cambios al blog</title>
		<link>http://juaniquillo.com/blog/2011/01/cambios-al-blog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cambios-al-blog</link>
		<comments>http://juaniquillo.com/blog/2011/01/cambios-al-blog/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 18:30:53 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cambios]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[servidor]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=785</guid>
		<description><![CDATA[Escribo este corto mensaje para anunciar algunos cambios al blog. Primero que nada, voy a cambiar de servidor la semana que viene. Ya es claro que mi servidor actual es muy lento para el número de visitas actuales. También he tenido problemas con algunas tablas de la base de datos. Algunas de ellas he tenido [...]]]></description>
			<content:encoded><![CDATA[<p>Escribo este corto mensaje para anunciar algunos cambios al blog. Primero que nada, voy a cambiar de servidor la semana que viene. Ya es claro que mi servidor actual es muy lento para el número de visitas actuales. También he tenido problemas con algunas tablas de la base de datos. Algunas de ellas he tenido que crear de nuevo ya que era imposible poder repararlas. Otra cosa que me tiene muy desilusionado es el servicio al cliente. Se tardan mucho tiempo en contestar y si el problema es que el website esta &#8220;offline&#8221; debo esperar a que me contesten para que puedan arreglar el problema. Lo que me lleva al último punto, el &#8220;downtime&#8221; (tiempo de no estar disponible) del servidor es bastante alto. Me he dado cuenta que el servidor se cae por lo menos una vez a la semana, lo que es intolerable.</p>
<p>Los otros cambios son más pequeños:</p>
<p>Por fin voy a habilitar la galería que se encuentra al tope de las páginas del blog. Me he decidido subir las fotos a <a href="http://www.flickr.com/" target="_blank">Flickr</a> y hacer una interface propio usando su exelente <acronym title="Application Programming Interface">API</acronym>.</p>
<p>Por último, voy a estar mejorando partes del diseño del blog. Tengo claro que, al momento de subir el foro por primera vez, el diseño no estaba acabado. Voy a sacar algo de tiempo para acabar este theme de WordPress. Relacionado a esto, yo trabajé varios diseños antes de quedarme con el que tengo actualmente. Pienso también que podría convertir alguno de ellos a un theme completo y ofrecerlo gratuitamente en el foro. Espero tener tiempo para eso.</p>
<p>Aprovecho también este post para decir que en el próximo post voy a ofrecer un primer plugin de jQuery. Este plugin permite utilizar TinyMCE como editor de contenidos AJAX, transformando elementos HTML con contenido interior en editores TinyMCE cuando se hace clic sobre ellos. He usado esta técnica para en algunos de los websites que he trabajado así que decidí hacer un plugin para que sea más fácil re-usarlo. Actualmente estoy haciendo pruebas en diferentes navegadores y luego empezaré a trabajar en la documentación. Espero poder terminarlo pronto.</p>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2011/01/cambios-al-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Buenas prácticas al escribir código usando Dreamweaver (primera parte)</title>
		<link>http://juaniquillo.com/blog/2010/11/buenas-practicas-al-escribir-codigo-usando-dreamweaver-primera-parte/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=buenas-practicas-al-escribir-codigo-usando-dreamweaver-primera-parte</link>
		<comments>http://juaniquillo.com/blog/2010/11/buenas-practicas-al-escribir-codigo-usando-dreamweaver-primera-parte/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 16:00:27 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Editores Web]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[dreamweaver]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=694</guid>
		<description><![CDATA[Ya sé que existe mucha información en la web acerca de este tema, pero no creo que hayan muchos enfocados a Dreamweaver. Este artículo forma parte de una serie dedicada a promover el uso de estándares al escribir código para tecnología web usando Dreamweaver. Escribo específicamente acerca de DW por varias razones: Primero que nada, aunque es [...]]]></description>
			<content:encoded><![CDATA[<p>Ya sé que existe mucha información en la web acerca de este tema, pero no creo que hayan muchos enfocados a Dreamweaver. Este artículo forma parte de una serie dedicada a promover el uso de estándares al escribir código para tecnología web usando Dreamweaver. Escribo específicamente acerca de DW por varias razones:</p>
<ol>
<li>Primero que nada, aunque es la razón menos importante, es el editor que más uso. Digo que es la menos importante ya que el escribir siguiendo los estandares no es algo que tenga que ver con tal o cual editor, lo menciono ya que estaré demostrando como utilizar funciones específicas de DW para lograr estos resultados.</li>
<li>Como ya he dicho antes, debido a sus capacidades <a href="http://es.wikipedia.org/wiki/WYSIWYG" target="_blank">WYSIWYG</a> DW es uno de los editores web mas utilizados por personas sin mucha experiencia escribiendo código. Debido a esto muchos de los usuarios de DW no están familiarizados con estos conceptos. Este es el grupo al cual va dirigido este artículo.</li>
<li>También debo agregar que, aunque la manera de lograr los resultados que queremos se relacionan con DW, los conceptos generales no se relacionan con ningún editor web.</li>
</ol>
<p>Voy a empezar con los siguientes consejos:</p>
<h3>Valida tu código HTML/CSS</h3>
<p>Creo que lo más importante es tener el mayor control posible del código que escribes. Las posibilidades de perder ese control aumenta mientras aumenta el tamaño de la página. Es por eso que verificar que el código es valido en todas las etapas del proyecto es importante. Un código válido ayuda a no tener disminuir los problemas de visualización de las páginas. También ayuda a que las páginas se vean de forma más homogénea en todos los navegadores.</p>
<p>DW posee herramientas para hacer validaciones HTML pero siempre he considerado que no son muy buenos. Se puede validar el XHTML usando el comando: File -&gt; Validate -&gt; As XML, pero muchas veces no funciona de forma deseada. Mi recomendación es usar el <a href="http://validator.w3.org/" target="_blank">Validador de la W3C</a> para realizar validaciones (X)HTML y el <a href="http://jigsaw.w3.org/css-validator/" target="_blank">Validador de CSS</a> para las hojas de estilo. Recomiendo el uso del <a href="https://addons.mozilla.org/en-US/firefox/addon/60/" target="_blank">Webmaster Toolbar</a> para hacer validaciones sin la necesidad de ir a la página de la W3C. También te da la posibilidad de validar documentos en tu servidor local:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Webmaster-Toolbar-1.jpg"><img class="alignnone size-full wp-image-711" title="Webmaster Toolbar 1" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Webmaster-Toolbar-1.jpg" alt="" width="426" height="356" /></a></p>
<p>El uso del validador también ayuda a fortalecer el conocimiento del HTML y CSS. El validador provee siempre una explicación detallada del problema, por ejemplo:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/validador-1.jpg"><img class="alignnone size-full wp-image-720" title="validador 1" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/validador-1.jpg" alt="" width="617" height="85" /></a></p>
<p>Si usamos <a href="http://translate.google.com" target="_blank">Google Translate</a> para traducir la página podemos ver el problema claramente:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/validador-2.jpg"><img class="alignnone size-full wp-image-722" title="validador 2" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/validador-2.jpg" alt="" width="617" height="85" /></a></p>
<p>Por último, es bueno tener en cuenta que <strong>el validaror es una herramienta</strong>. Te ayuda a tener un control de código. Para ser sincero, yo repudio el uso de &#8220;hacks&#8221; CSS (mayormente aplicados a Internet Explorer 6), pero también pienso que cada programador tiene el derecho a utilizar los recursos necesarios mientras entienda las consecuencias y mientras (de nuevo) tenga control de su código.</p>
<h3>Como nombrar los archivos</h3>
<p>Esto es algo que tampoco tiene que ver con DW y que también que <a href="http://www.google.com.pr/search?sourceid=chrome&amp;ie=UTF-8&amp;q=nombrar+los+archivos+html" target="_blank">se ha discutido bastante</a> pero me parece que no está de más mencionarlo aquí debido a las veces que he visto a usuarios de DW tener problemas por a la mala forma de nombrar archivos dentro de un servidor.</p>
<p>Al momento de nombrar cualquier tipo de archivo que será incluido en el servidor (.html, .jpg, .php. .js, etc) es importante tener en cuenta las siguientes consideraciones:</p>
<ol>
<li>El nombre del archivo sólo debe poseer caracteres de la <strong>a</strong> a la<strong> z</strong> (<strong>sin incluir la ñ ni letras con acento</strong>), números del <strong>1</strong> al <strong>9</strong>, underscore (<strong>_</strong>) y guiones (<strong>-</strong>).</li>
<li>Los nombres deben ser únicos en cada directorio. Esto debería ser algo obvio ya que ningún sistema operativo permite tener dos archivos que se llamen iguales en un directorio, pero también tenemos que tener en cuenta que Windows no puedes usar nombres iguales sin importar mayúsculas mientras que en sistemas operativos tipo UNIX (Linux por ejemplo) sí se permite.</li>
<li>También es bueno escoger una manera de remplazar los espacios en blancos y usar esta &#8220;convensión&#8221; siempre. Ejemplos para eso: usar underscore (nombre_archivo.html), usar guión (nombre-archivo.html), usar mayúsculas (algo que es menos usado) (nombreArchivo.html). Yo suelo usar la la segunda opción ya que pienso que es más fácil de leer.</li>
</ol>
<h3>Usar texto alterno (alt) para las imágenes</h3>
<p>El uso del atributo <a href="http://en.wikipedia.org/wiki/Alt_attribute" target="_blank">alt</a><strong> </strong>en las los tags &lt;img /&gt; (imágenes) y &lt;area /&gt; (área) es requerido ya que es necesario proveer un una explicación alterna en casos que las imágenes no pueden ser visualizadas correctamente o si el contendido está siendo visto por alguna persona con algún tipo de impedimento visual.</p>
<p>Al momento de insertar una imagen DW te pide primero que nada que especifiques un texto alterno y, de forma opcional, una descripción más extensa:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Alternate-Text-1.gif"><img class="alignnone size-full wp-image-734" title="Alternate Text 1" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Alternate-Text-1.gif" alt="" width="477" height="217" /></a></p>
<p>Si decides no hacerlo en ese momento sólo necesitas dar clic al botón de cancelar. Siempre podrás agregar o cambiar el Texto ALT si le das clic a la imagen específica y buscas en el Panel de Propiedades el campo <strong>Alt</strong>:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Alternate-Text-2.gif"><img class="alignnone size-full wp-image-736" title="Alternate Text 2" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Alternate-Text-2.gif" alt="" width="595" height="104" /></a></p>
<h3>Usar Labels correctamente en los formularios</h3>
<p>Los <a href="http://www.w3schools.com/tags/tag_label.asp" target="_blank">label</a> son básicamente etiquetas que se asignan a los <a href="http://www.w3schools.com/tags/tag_input.asp" target="_blank">inputs</a> (text, checkboxes, radio boxes, etc), <a href="http://www.w3schools.com/tags/tag_textarea.asp" target="_blank">textarea</a> y <a href="http://www.w3schools.com/tags/tag_select.asp" target="_blank">select menus</a>. Su propósito es describir el uso del campo, pero ejemplo, en este caso el label del campo &#8220;name&#8221; es &#8220;Name&#8221; (Imagen sacada de los <a href="http://jqueryui.com/demos/dialog/#modal-form" target="_blank">ejemplos de dialog de jQueryUI</a>):</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Label-1.png"><img class="size-full wp-image-741 alignnone" title="Label 1" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Label-1.png" alt="Label 1" width="368" height="351" /></a></p>
<p>Parecería obvio el hecho de que se deben proveer instrucciones específicas para el usuario al momento de llenar una formulario, pero si tomamos en cuenta la manera como los elementos están organizados en la página (flow) muchas veces la relación label/campo no es tan evidente. Esto es un problema mayor si el usuario posee un impedimento visual. Es por eso que es importante hacer que esta relación sea lo más clara posible.</p>
<p>Hay dos formas de crear esta relación:</p>
<ol>
<li>Meter el campo dentro del elemento label:
<pre class="brush: xml; title: ; notranslate">
&lt;label&gt;Nombre
&lt;input id=&quot;nombre&quot; name=&quot;nombre&quot; type=&quot;text&quot; /&gt;
&lt;/label&gt;
</pre>
</li>
<li>Igualar el valor del atributo <strong>for</strong> del label al <strong>id</strong> del campo.
<pre class="brush: xml; title: ; notranslate">
&lt;label for=&quot;nombre&quot;&gt;Nombre&lt;/label&gt;
  &lt;input type=&quot;text&quot; name=&quot;nombre&quot; id=&quot;nombre&quot; /&gt;
</pre>
</li>
</ol>
<p>Ambas prácticas son perfectamente válidas, aunque según mi experiencia, en  la mayoría de los casos se usa la segunda opción ya que es mucho más flexible. DW provee la funcionalidad para utilizar ambos métodos. Si estás en vista de diseño y le das al botón de agregar un campo de formulario DW pregunta primero si vas a utilizar un label con el campo:</p>
<p><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Label-2.png"><img class="alignnone size-full wp-image-754" title="Label 2" src="http://juaniquillo.com/blog/wp-content/uploads/2010/11/Label-2.png" alt="" width="440" height="419" /></a></p>
<p>Las opciones son:</p>
<ul>
<li><strong>ID</strong>: el id del campo que vas a crear, por ejemplo: <strong>nombre </strong>(los id en html tienen que ser únicos en cada página. Se siguen las normas de nombrar un archivo pero además sólo se puede empezar con una letra).</li>
<li><strong>Label</strong>: El label (etiqueta) del campo, por ejemplo: <strong>Favor de especificar su nombre</strong>.</li>
<li><strong>Estilo (Style)</strong>: Aquí escogeremos uno de los métodos explicados anteriormente : 1-usar el atributo for y 2-incluir el campo dentro del label o 3-optar no usar label.</li>
<li><strong>Posición (Position)</strong>: Indica la posición del label: 1-antes del campo o 2-después del campo.</li>
</ul>
<div class="ui-state-highlight ui-corner-all">DW también posee campos para el <strong>access key</strong> y el <strong>tab key</strong>, pero eso lo discutiremos en otra ocasión.</div>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2010/11/buenas-practicas-al-escribir-codigo-usando-dreamweaver-primera-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como crear un sistema para subir imágenes usando Dreamweaver, PHP y MySQL (segunda parte)</title>
		<link>http://juaniquillo.com/blog/2010/10/subir-imagenes-usando-dreamweaver-php-y-mysql-segunda-parte/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subir-imagenes-usando-dreamweaver-php-y-mysql-segunda-parte</link>
		<comments>http://juaniquillo.com/blog/2010/10/subir-imagenes-usando-dreamweaver-php-y-mysql-segunda-parte/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 02:46:21 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Editores Web]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=602</guid>
		<description><![CDATA[Esta es la segunda parte del artículo &#8220;Como crear un sistema para subir imágenes usando Dreamweaver, PHP y MySQL&#8220;, donde explico como integrar la funcionalidad de subir archivos (principalmente imágenes) al uso de Dreamweaver. En este artículo explicaré como organizar las imágenes que han sido subidas al servidor y también añadiremos una manera de borrar tanto [...]]]></description>
			<content:encoded><![CDATA[<p>Esta es la segunda parte del artículo &#8220;<a href="http://juaniquillo.com/blog/2010/07/como-crear-un-sistema-para-subir-imagenes-en-dreamweaver-php-y-mysql">Como crear un sistema para subir imágenes usando Dreamweaver, PHP y MySQL</a>&#8220;, donde explico como integrar la funcionalidad de subir archivos (principalmente imágenes) al uso de Dreamweaver. En este artículo explicaré como organizar las imágenes que han sido subidas al servidor y también añadiremos una manera de borrar tanto las imágenes físicas como también la entrada en la base de datos. <a href="http://juaniquillo.com/codigo/dreamweaver/subir_imagenes/">Este es el resultado del último artículo</a>. Vamos a usar lo que ha se ha hecho hasta ahora como base para esta segunda parte.</p>
<p>Primero trabajaremos con el CSS. Vamos a tomar prestado el CSS de <a href="http://sonspring.com/journal/hoverbox-image-gallery" target="_blank">la galería hoverbox </a>sacado del blog de <a href="http://www.google.com/profiles/sonspring#about" target="_blank">Nathan Smith</a>. No utilizaremos la funcionalidad hover, sólo la forma de organizar las imágenes.  El CSS puede ser bajado <a href="http://sonspring.com/sites/default/files/hoverbox.zip" target="_blank">aquí</a>. Yo he modificado un poco el CSS conforme a mis necesidades. Este es el archivo final:</p>
<pre class="brush: css; title: ; notranslate">
/* ///////////// Hoja de estilo CSS Subir archivos con Dreamweaver 2 //////////// */

/* general */

* {padding:0px;margin:0px;}

/* formulario */

#form1{
	padding: 10px;
	width:250px;
	margin:0 auto;
	background: #F5F5F5;
	border: 1px solid #CCCCCC;
}
#form1 label{display:block;font-weight:bold;padding:5px 0;}
.enviar{display:block; padding:10px 0 5px;text-align:center;}

/* --------- Hover box CSS --------- */

a
{
	text-decoration: none;
}

#container
{
	background: #fff;
	color: #777;
	margin: 0 auto;
	padding: 20px 50px 50px;
	position: relative;
	width: 640px;
}

h1
{
	background: inherit;
	border-bottom: 1px dashed #ccc;
	color: #933;
	font: 17px Georgia, serif;
	margin: 0 0 10px;
	padding: 0 0 5px;
	text-align: center;
}

p
{
	clear: both;
	font: 10px Verdana, sans-serif;
	text-align: center;
	margin-bottom:10px;
	text-align:center;
}

p a
{
	background: inherit;
	color: #993333;
	font-weight:bold;
}

p a:hover
{
	background: inherit;
	color: #000;
}

/* =Hoverbox Code
----------------------------------------------------------------------*/

.hoverbox
{
	cursor: default;
	list-style: none;
}

.hoverbox img
{
	background: #fff;
	border-color: #aaa #ccc #ddd #bbb;
	border-style: solid;
	border-width: 1px;
	color: inherit;
	padding: 2px;
	vertical-align: top;
	width: 100px;
	height: 75px;
}

.hoverbox li
{
	background: #eee;
	border-color: #ddd #bbb #aaa #ccc;
	border-style: solid;
	border-width: 1px;
	color: inherit;
	display: inline;
	float: left;
	margin: 3px;
	padding: 5px;
	position: relative;
}

.hoverbox .preview
{
	border-color: #000;
	width: 200px;
	height: 150px;
}
</pre>
<p>Para los <a href="http://es.wikipedia.org/wiki/Thumbnail" target="_blank">thumbnails</a> usaremos la librería <a href="http://phpimagen.phperu.net/" target="_blank">PHPImagen</a> de nuestro gran amigo <a href="http://www.forosdelweb.com/miembros/okram/" target="_blank">okram</a>. Con ésta podemos crear imágenes nuevas para nuestros thumbnails que se ajusten a cualquier tamaño sin que se distorsionen. <a href="http://sourceforge.net/projects/phpimagen/files/" target="_blank">Bajamos la librería de SourceForge</a> y la incluimos en nuestro script. Para mayor organización voy a crear una carpeta llamanda &#8220;include&#8221; en cual incluiré las librerías necesarias si acaso necesitara alguna más. Para usar la librería debemos primero crear un archivo PHP el cual funcionará como nuestra imagen. Este archivo crea una instancia de la clase Imagen y a ésta le podemos pasar valores de como va a ser nuestra imagen. Este archivo lo he llamado <strong>img.php</strong> (comentado lo mejor que he podido) y lo he puesto en la raiz (root) del proyecto:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

/**
 * @author Myokram
 * @copyright 2007
 */

//si se pide el source
if(isset($_GET['source'])) {
    highlight_file(__FILE__);
    exit;
}

//ruta de la imagen
$imagen = $_GET['file'];

//se busca el tamaño de la imagen
$tama_imag = getimagesize($imagen);
$ancho_img = $tama_imag[0];
$alto_img = $tama_imag[1];

//incluimos la librería
include_once &quot;include/PHPImagen.lib.php&quot;;

//Instanciamos la clase
$imagen = new Imagen($imagen);

//si el ancho es mayor a alcho real de la imagen el ancho sera el ancho real
$nuevo_ancho = ($_GET['ancho'] &lt;= $ancho_img) ? $_GET['ancho'] : NULL;
//si el alto es mayor a alto real de la imagen el alto sera el ancho real
$nuevo_alto = ($_GET['alto'] &lt;= $alto_img) ? $_GET['alto'] : NULL;
//si se desea croppear la imagen se especifica el cut
$cut = (isset($_GET['cut'])) ? true : false;

//Redimension de la imagen. Los parámetros
$imagen-&gt;resize($nuevo_ancho, $nuevo_alto, $cut);

//Si se pide que se baje la imagen
if(isset($_GET['download'])) $imagen-&gt;doDownload();
//si no se pide que se baje se muestra la imagen
else $imagen-&gt;doPrint();

?&gt;
</pre>
<p style="text-align: left;">el root debería verse así:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_01-Oct.-28-14.20.gif"><img class="alignnone size-full wp-image-641" title="ScreenHunter_01 Oct. 28 14.20" src="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_01-Oct.-28-14.20.gif" alt="" width="211" height="169" /></a></p>
<p style="text-align: left;">Una vez tenemos los archivos en su sitio procedemos a alterar el html/php de la lista no-ordenada.  Primero que nada le agregamos la clase &#8220;hoverbox&#8221; para atar la lista al nuevo CSS. Luego usamos algunos párrafos (&lt;p&gt;) para mejor organización. Añadimos enlaces tanto a la imagen como uno nuevo que luego usaremos para borrar la imagen deseada. Este último enlace enviaría la variable &#8220;id&#8221; la cual será igual al id del archivo que queremos borrar y un pequeño código javascript para confirmar que la imagen está siendo borrada. También he añadido la clase &#8220;imagen_grande&#8221; al enlace de la imagen para poder atarla al javascript que usaremos para mostrar las imágenes más grandes. He decidido no incluir el nombre que el usuario decide ponerle a la imagen para poder tener mayor control del  diseño, aunque he dejado el nombre en el ALT Text:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php if ($totalRows_Recordset1 &gt; 0) { // Show if recordset not empty ?&gt;
&lt;ul class=&quot;hoverbox&quot;&gt;
    &lt;?php do { ?&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;imagenes/&lt;?php echo $row_Recordset1['archivo_archivos']; ?&gt;&quot; class=&quot;imagen_grande&quot;&gt;&lt;img src=&quot;img.php?file=imagenes/&lt;?php echo $row_Recordset1['archivo_archivos']; ?&gt;&amp;amp;ancho=100&amp;amp;alto=75&amp;amp;cut&quot; alt=&quot;&lt;?php echo $row_Recordset1['nombre_archivos']; ?&gt;&quot; height=&quot;100&quot; width=&quot;75&quot;&gt;&lt;/a&gt;&lt;/p&gt;
	 &lt;p&gt;&lt;a href=&quot;include/borrar.php?id=&lt;?php echo $row_Recordset1['id_archivos']; ?&gt;&quot; onclick=&quot;javascript: if(!confirm('&amp;#191;Est&amp;#225; seguro?')) return false;&quot;&gt;borrar&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
      &lt;?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?&gt;
&lt;/ul&gt;
&lt;?php
 } // Show if recordset not empty
?&gt;
</pre>
<p>Como pueden ver he enlazado el thumbnail a la imagen original pero el &#8220;src&#8221; (source) del mismo lo he cambiado al archivo <strong>img.php</strong> y le he pasado varios parámetros GET. A continuación discuto los siguientes valores. El &#8220;<a href="http://es.wikipedia.org/wiki/Query_string" target="_blank">Query string</a>&#8221; GET es el siguiente: &#8220;<strong>file=imagenes/&lt;?php echo $row_Recordset1['archivo_archivos']; ?&gt;&amp;amp;ancho=100&amp;amp;alto=75&amp;amp;cut</strong>&#8220;. Separamos los valores por el</p>
<pre class="brush: xml; title: ; notranslate">&amp;amp;</pre>
<p>, el cual es el entity HTML del <strong>&amp;</strong>. Las variables son las siguientes:</p>
<ol>
<li><strong>file</strong> &#8211; Es igual a la ruta de la imagen, en este caso la ruta (imagenes) más la variable del nombre del archivo sacada de nuestra base de datos.</li>
<li><strong>ancho</strong> &#8211; el ancho en pixeles deseado de la imagen, en este caso 100.</li>
<li><strong>alto</strong> &#8211; el altoen pixeles deseado de la imagen, en este caso 75.</li>
<li><strong>cut</strong> &#8211; se incluye si se quiere forzar la imagen a ser del tamaño especificado. el script &#8220;croppea&#8221; la imagen para llevarla a ese tamaño.</li>
</ol>
<p>Para mostrar la imagen usaremos un lightbox cualquiera. En este caso he usado la versión 1.3.2 de  <a href="http://fancybox.net/" target="_blank">Fancybox</a>, un plugin de jQuery el cual crea efectos de lightbox muy atractivos. Incluimos jQuery primero. Yo ya había incluido jquery y el UI de jquery desde google en la primera parte de este artículo. Bajamos Fancybox y agregamos la carpeta completa a nuestroa carpeta &#8220;js&#8221;, donde guardamos todo nuestro javascript. Fancybox también incluye los plugin de <a href="http://gsgd.co.uk/sandbox/jquery/easing/" target="_blank">easing</a> y de <a href="http://brandonaaron.net/code/mousewheel/demos" target="_blank">mousewheel</a>, ambos para jQuery. No tenemos la necesidad de usar el de mousewheel en este tutorial pero sí el de easing. Incluimos tanto el CSS de Fancybox y los plugins de Fancybox y de easing al HTML. Al final yo quedé con algo así:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/jquery-ui-1.8.1.custom.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/general.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;js/jquery.fancybox-1.3.2/fancybox/jquery.fancybox-1.3.2.css&quot;&gt;

&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.fancybox-1.3.2/fancybox/jquery.easing-1.3.pack.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.fancybox-1.3.2/fancybox/jquery.fancybox-1.3.2.pack.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/javascript.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Luego creamos el javascript que se encargará de crear los lightboxes Fancybox. En el archivo &#8220;javascript.js&#8221; que está en el la carpeta &#8220;js&#8221; excribimos:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){

	$('.imagen_grande').fancybox({
		'transitionIn':'elastic',
		'transitionOut':'elastic',
	});

})
</pre>
<p>Si todo sale bien podremos ver el efecto &#8220;lightbox&#8221; de Fancybox al darle clic a las imágenes. Fancybox se encarga de re-dimensionar la imagen de acuerdo a nuestra resolución, algo que no hace el plugin lightbox original.</p>
<p>Sólo nos falta habilitar el enlace de borrar imágenes. Para esto usaremos la función de dreamweaver de borrar record y la modificaremos un poco para que también se borre la imagen real. Hay dos formas de usar la función de borrar de dreamweaver: incluir el script en la misma página donde está lo que se quiere borrar o tener la funcionalidad en una página aparte. Yo voy a optar por la segunda opción en este caso.</p>
<div class="ui-state-highlight ui-corner-all">Recuerden que este tutorial no tiene en cuenta ningún tipo de validación de usuario, por eso cualquier usuario podría usar el script de borrar para borrar cualquier record o archivo. Si usan este tipo de organización para un área administrativa recuerden tomar las medidas de validación de usuario necesarias.</div>
<p>Creamos un archivo PHP nuevo y lo llamamos &#8220;borrar.php&#8221; y lo incluimos en la carpeta &#8220;include&#8221;. Abrimos ese archivo, borramos todo el HTML y vamos al panel de &#8220;Comportamientos del servidor&#8221; (Server Behaviors). Le damos clic al símbolo de más (+) y escogemos &#8220;Eliminar registro&#8221;:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_02-Oct.-28-17.10.gif"><img class="alignnone size-full wp-image-656" title="ScreenHunter_02 Oct. 28 17.10" src="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_02-Oct.-28-17.10.gif" alt="" width="249" height="406" /></a></p>
<p>En la ventana que sale escogeremos &#8220;primary key value&#8221; en el primer campo y después  la conexión correspondiente, la tabla de archivos, el campo del id de la tabla (en este caso id_archivos), escogemos &#8220;numérico&#8221; (numeric), escogemos parámetro URL (ya que enviaremos la variable por medio del URL String), especificamos que la variable se va a llamar &#8220;id&#8221; y por último escogemos la página donde será enviado el usuario después de la operación (en este caso &#8220;../index.php&#8221;).</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_03-Oct.-28-17.11.gif"><img class="alignnone size-full wp-image-657" title="ScreenHunter_03 Oct. 28 17.11" src="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_03-Oct.-28-17.11.gif" alt="" width="604" height="235" /></a></p>
<p>Con esto es suficiente para eliminar un record si enviamos el id correspondiente en el URL Query String. Ahora necesitamos agregar el código que borre la imagen real del disco duro. Para eso necesitamos saber el nombre del archivo que vamos a borrar. Por eso debemos hacer una consulta a la base de datos que devuelva el record que vamos a borrar antes de borrarlo. Para eso, hacemos un recorset de esta con un filtro de que el campo &#8220;id_archivos&#8221; del la tabla &#8220;archivos&#8221; sea igual a la variable URL &#8220;id&#8221;:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_04-Oct.-28-21.10.gif"><img class="alignnone size-full wp-image-660" title="ScreenHunter_04 Oct. 28 21.10" src="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_04-Oct.-28-21.10.gif" alt="" width="489" height="359" /></a></p>
<p>Con este recordset tendremos el siguiente código:</p>
<pre class="brush: php; title: ; notranslate">

$colname_Recordset1 = &quot;-1&quot;;
if (isset($_GET['id'])) {
  $colname_Recordset1 = $_GET['id'];
}

mysql_select_db($TU_BASE_DE_DATOS, $TU_CONECCION);
$query_Recordset1 = sprintf(&quot;SELECT * FROM archivos WHERE id_archivos = %s&quot;, GetSQLValueString($colname_Recordset1, &quot;int&quot;));
$Recordset1 = mysql_query($query_Recordset1, $TU_CONECCION) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

mysql_free_result($Recordset1);
</pre>
<p>Necesitamos mover ese código dentro de la condición del código producido por la función de borrar, osea, después de:</p>
<pre class="brush: php; title: ; notranslate">
if ((isset($_GET['id'])) &amp;&amp; ($_GET['id'] != &quot;&quot;)) {
</pre>
<p>También necesitamos recuperar el nombre del archivo. Podemos arrastrarlo de el panel del Panel Vinculaciones (Bindings Panel). Lo ponemos antes de:</p>
<pre class="brush: php; title: ; notranslate">
mysql_free_result($Recordset1);
</pre>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_06-Oct.-28-21.30.gif"><img class="alignnone size-large wp-image-674" title="ScreenHunter_06 Oct. 28 21.30" src="http://juaniquillo.com/blog/wp-content/uploads/2010/10/ScreenHunter_06-Oct.-28-21.30-1024x468.gif" alt="" width="614" height="281" /></a></p>
<p>Esto nos da la variable que contiene el nombre del archivo, en mi caso:</p>
<pre class="brush: php; title: ; notranslate">
$row_Recordset1['archivo_archivos']
</pre>
<p>Lo mejor es crear una variable para almacenar el nombre y la ruta del archivo. Lo hacemos de esta forma:</p>
<pre class="brush: php; title: ; notranslate">
//variable para almacenar el nobre del archivo
$nombre_archivo = '../imagenes/'.$row_Recordset1['archivo_archivos'];
</pre>
<p>Para borrar el archivo lo mejor es verificar primero si existe para no tener errores PHP. Para eso usamos la función <a href="http://www.php.net/manual/es/function.file-exists.php" target="_blank">file_exists()</a>. Si existe entonces lo borramos con la función <a href="http://www.php.net/manual/es/function.unlink.php" target="_blank">unlink()</a>:</p>
<pre class="brush: php; title: ; notranslate">
//verificamos si el archivo existe. si existe lo borramos
if(file_exists($nombre_archivo)) unlink($nombre_archivo );
</pre>
<p>Ya con ésto la galería queda lista.  Se le podría agregar también una paginación pero eso lo dejo a la discreción de ustedes. La última parte de este tutorial podría ser añadir una paginación de las de Dreamweaver, o una usando la librería <a href="http://phppaging.phperu.net/" target="_blank">PHPaging</a>, también hecha por el gran okran, así como también hablar más acerca de las validaciones PHP y Javascript.</p>
<ul>
<li><a href="http://juaniquillo.com/codigo/dreamweaver/subir_imagenes2/" target="_blank">Demo</a></li>
<li><a href="http://juaniquillo.com/codigo/descargas/subir_imagenes2.zip">Descargar</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2010/10/subir-imagenes-usando-dreamweaver-php-y-mysql-segunda-parte/feed/</wfw:commentRss>
		<slash:comments>109</slash:comments>
		</item>
		<item>
		<title>Resumen (Sept 29 2010)</title>
		<link>http://juaniquillo.com/blog/2010/09/resumen-sept-29-2010/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=resumen-sept-29-2010</link>
		<comments>http://juaniquillo.com/blog/2010/09/resumen-sept-29-2010/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 01:51:29 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Miselaneos]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[resumen]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=610</guid>
		<description><![CDATA[Siento que tengo el blog bastante descuidado así que se me ocurrió hacer un resumen de mis excusas por la cual no he escrito lo que debería, y también mencionar las cosas que he estado trabajando últimamente. Primero que nada quiero que sepan que sé que este hosting es bastante lento. Estoy pensando cambiarme de [...]]]></description>
			<content:encoded><![CDATA[<p>Siento que tengo el blog bastante descuidado así que se me ocurrió hacer un resumen de mis excusas por la cual no he escrito lo que debería, y también mencionar las cosas que he estado trabajando últimamente.</p>
<p>Primero que nada quiero que sepan que sé que este hosting es bastante lento. Estoy pensando cambiarme de hosting el año que viene, o tal vez antes si el tráfico aumenta considerablemente.</p>
<p>Ya he empezado la segunda parte del artículo de <a href="http://juaniquillo.com/blog/2010/07/como-crear-un-sistema-para-subir-imagenes-en-dreamweaver-php-y-mysql/">como subir imágenes usando Dreamweaver</a>. Este cubrirá como borrar tanto los records como las imágenes físicas y también como podemos hacer &#8220;thumbnails&#8221; usando la librería <a href="http://phpimagen.phperu.net/" target="_blank">PHPImagen</a>, creada por <a href="http://www.forosdelweb.com/miembros/okram/" target="_blank">okram</a>. Otra cosa que pienso hacer es trabajar un poco en el diseño final del listado de imágenes, así que también harémos uso del panel CSS de DW. Tenía planeado terminar este artículo a mediados de este mes pero me he atrasado un poco debido a que recientemente cambié de sistema operativo y aproveché para re-estructurar mis sistemas de almacenamiento y respaldos. Ya tengo un disco de 1 Terra para uso diario y uno de 1½ Terra para hacer respaldos, además de uno de 500 gigs y otro de 250 gigs externos para mover información.</p>
<p>Otra cosa que me ha quitado tiempo es el trabajo. Tenemos muchos proyectos en la oficina, algunos bastante interesantes. Uno de ellos es la creación de un sistema de manejo de proyectos que cumpla con las necesidades de la empresa. He tomado <a href="http://www.projectpier.org/" target="_blank">ProjectPier</a> como base y le estoy agregando nueva funcionalidad como:  añadir tiempo a las tareas de los proyecto, un calendario de tareas y un sistema de reportes. ProjectPier está construido usando el patrón <a href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller" target="_blank">MVC</a>, así que creo que me voy a divertir bastante con él.</p>
<p>Creo que es por esto último que estoy aprovechando cualquier tiempo libre que tengo para ponerme al día con todo lo que quiero leer, ver y oír. actualmente estoy leyendo <a href="http://www.amazon.com/gp/product/1430228954?ie=UTF8&amp;tag=teradiassite-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430228954" target="_blank">Beggining WordPress 3</a> y, aunque siento que los primeros capítulos están enfocados hacia usuarios principiantes de wordpress, hay bastante información referentes al funcionamiento del esta última versión de WP. A la vez estoy leyendo <a href="http://es.wikipedia.org/wiki/La_fiesta_del_chivo" target="_blank">La Fiesta del Chivo</a> de Mario Vargas Llosa. Se que es algo antiguo pero no había tenido la oportunidad de leerlo. Gracias a mi hermanita Sheila por prestármelo.</p>
<p>He estado escuchando mucha música, ya que siempre estoy sentado frente a la computadora. No quiero aburrir a nadie con lo que escucho. Sólo dire que en estos momentos escucho <a href="http://en.wikipedia.org/wiki/For_My_Friends" target="_blank">el último disco</a> de <a href="http://www.last.fm/music/Blind+Melon" target="_blank">Blind Melon</a>. (Tienen un nuevo cantante. No creía que alguien remplazara a Shannon Hoon, pero se escucha muy bien.)</p>
<p>También me he estado poniendo al día con el anime. Mouse, Beserk, Durarara, Clannad, Clannad After Story, Negima!?, This Ugly Yet Beautiful World y no me acuerdo que más.</p>
<p>La lista de artículos que tengo planeado para el blog sigue creciendo. Además de los tutoriales de DW y varios artículos acerca de jQuery tengo en mente hacer una lista de consejos de buenas prácticas al escribir HTML y CSS. Les invito a que sigan recomendando cuales temas les gustaría que trate en futuros artículos, ya sea por medio de comentarios o usando el formulario en la página de contacto.</p>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2010/09/resumen-sept-29-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como crear un juego de registro (recordset) sencillo o avanzado usando Dreamweaver CS5</title>
		<link>http://juaniquillo.com/blog/2010/08/crear-recordset-dreamweaver/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=crear-recordset-dreamweaver</link>
		<comments>http://juaniquillo.com/blog/2010/08/crear-recordset-dreamweaver/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 16:45:45 +0000</pubDate>
		<dc:creator>juaniquillo</dc:creator>
				<category><![CDATA[Editores Web]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://juaniquillo.com/blog/?p=523</guid>
		<description><![CDATA[Este artículo es parte de la serie enfocada en Dreamweaver y es, a la vez, una continuación de artículo que explica como configurar una conexión entre DW y MySQL. Debido a ésto último voy a añadir también las instrucciones de como crear una tabla sencilla con 4 campos usando phpMyAdmin. Crear una tabla usando phpMyAdmin [...]]]></description>
			<content:encoded><![CDATA[<p>Este artículo es parte de la serie enfocada en Dreamweaver y es, a la vez, una continuación de artículo que explica <a href="http://juaniquillo.com/blog/2010/08/instalar-wampserver-ntegracion-dreamweaver-cs5/" target="_blank">como configurar una conexión entre DW y MySQL</a>. Debido a ésto último voy a añadir también las instrucciones de como crear una tabla sencilla con 4 campos usando phpMyAdmin.</p>
<h3>Crear una tabla usando phpMyAdmin</h3>
<p>Primero abrimos phpMyAdmin, le damos click a la base de datos que vamos a usar y donde dice: Create new table on database <strong>*el nombre de tu database </strong>escribimos el nombre de la tabla que deseamos crear el campo &#8220;Name&#8221; y &#8220;Number of fields&#8221; especificamos el número de campos de la misma. Siempre puedes agregar o eliminar campos después:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-16-10.39.gif"><img class="alignnone size-large wp-image-530" title="ScreenHunter_01 Aug. 16 10.39" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-16-10.39-1024x192.gif" alt="" width="614" height="115" /></a></p>
<p>En la próxima ventana introduces la información específica de los campos a crearse. En mi caso yo voy a crear 4 campos:</p>
<ol>
<li><strong> id</strong> &#8211; el id de la tabla (integer, incremental).</li>
<li><strong>nombre</strong> &#8211; sevirá de título (varchar, allow null).</li>
<li><strong>descripción</strong> &#8211; descripción mas información (longtext, allow null)</li>
<li><strong>fecha</strong> &#8211; aquí se guardará la fecha en el que se hizo el insert (datime)</li>
</ol>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_07-Aug.-16-10.50.gif"><img class="alignnone size-large wp-image-531" title="ScreenHunter_07 Aug. 16 10.50" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_07-Aug.-16-10.50-1024x343.gif" alt="" width="614" height="206" /></a></p>
<p>Una vez hecho puedes llegar a la tabla dando un click a la base de datos. Si le das click a icono de &#8220;Structure&#8221; se mostrarán los campos dentro de la tabla:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_05-Aug.-16-10.47.gif"><img class="alignnone size-full wp-image-538" title="ScreenHunter_05 Aug. 16 10.47" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_05-Aug.-16-10.47.gif" alt="" width="590" height="130" /></a></p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_06-Aug.-16-10.47.gif"><img class="alignnone size-full wp-image-542" title="ScreenHunter_06 Aug. 16 10.47" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_06-Aug.-16-10.47.gif" alt="" width="634" height="158" /></a></p>
<p>Ahora insertamos información en nuestra nueva tabla (Insert) para tener algo con qué trabajar. Vamos a la pestaña de &#8220;Insert&#8221; y agregamos información adecuada. En mi caso he puesto información genérica. También, en mi caso dejo los id en blanco ya que los he asignado como autoincremental:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_09-Aug.-16-10.52.gif"><img class="alignnone size-full wp-image-539" title="ScreenHunter_09 Aug. 16 10.52" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_09-Aug.-16-10.52.gif" alt="" width="557" height="524" /></a></p>
<h3>Creación de un juego de registros (recordset) sencillo en Dreamweaver</h3>
<p>Pasamos después a Dreamweaver y ahí podremos ver la nueva tabla en el panel de Base de Datos (Databases):</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-16-10.45.gif"><img class="alignnone size-full wp-image-546" title="ScreenHunter_03 Aug. 16 10.45" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-16-10.45.gif" alt="" width="239" height="306" /></a></p>
<p>Para crear un un jugo de registros vamos al panel de Vinculaciones (Bindings) y escogemos Juego de Registros (Recordset):</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_04-Aug.-16-10.45.gif"><img class="alignnone size-full wp-image-547" title="ScreenHunter_04 Aug. 16 10.45" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_04-Aug.-16-10.45.gif" alt="" width="248" height="308" /></a></p>
<p>En la ventana de Recordset defines el tipo de información que quieres extraer de la base de datos:</p>
<ol>
<li><strong>Nombre (Name)</strong>: Se especifica el nombre del recordset. Se puede dejar el que viene ya puesto pero lo mejor es que se ponga un nombre mas descriptivo, &#8216;usuarios1&#8242; por ejemplo. Los nombres de los recorset tienen que ser únicos por páginas y sólo pueden ser letras, números, guión (-) y underscore (_). Nada de caracteres especiales ni empezar el nombre con número.</li>
<li><strong>Conexión (Conection</strong>): Se escoge la conexión</li>
<li><strong>Tabla (Table)</strong>: Se escoge la tabla de la base de datos.</li>
<li><strong>Columnas (Columns)</strong>: En el campo columna se escogen los campos que se van a estar utilizando en el script. También se pueden escoger todos, aunque siempre es mejor sólo utilizar los campos necesarios.</li>
<li><strong>Filtros (Fiters)</strong>: Con el campo filtro hacecemos que la información sea más específica, por ejemplo, si quieres escoger la entrada donde el nombre del usuario sea &#8220;Juan&#8221; puedes fácilmente hacer que el campo nombre concuerde con el la valor entrado &#8220;Juan&#8221;. Puedes también utilizar valores como variables URL o variables enviadas de un formulario, variables de sesión, cookies y variables del ambiente (environment) del servidor.</li>
<li><strong>Ordenar (Sort)</strong>: En el &#8216;sort&#8217; se organiza el orden de los resultados, ascendente o descendente.</li>
</ol>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_12-Aug.-16-10.54_2.gif"><img class="alignnone size-full wp-image-549" title="ScreenHunter_12 Aug. 16 10.54_2" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_12-Aug.-16-10.54_2.gif" alt="" width="533" height="402" /></a></p>
<p>Este es un ejemplo de como escoger campos específicos y como usar los campos de filtro y sort. El la siguiente imagen se escogen sólo los campos &#8220;nombre&#8221; y &#8220;descripcion&#8221; de la tabla &#8220;tabla1&#8243;. Se le ha agregado un filtro para que la consulta solo devuelva los registros donde el valor del campo &#8220;id&#8221; sea igual a la variable de formulario &#8220;id&#8221; y también se ha especificado que el resultado se organice de forma descendente:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-19-00.31.gif"><img class="alignnone size-full wp-image-558" title="ScreenHunter_01 Aug. 19 00.31" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-19-00.31.gif" alt="" width="537" height="409" /></a></p>
<h3>Consultas complejas (modo avanzado)</h3>
<p>En el caso que se quiera hacer consultas complejas (más de un filtro y/o organizaciones de contenido complejas) se utiliza el modo avanzado (advanced). Para poder hacer este tipo de consultas es necesario tener claro como se construye una <a href="http://es.wikipedia.org/wiki/SQL">consulta SQL</a>. Lo más recomendable es estudiar el lenguaje ya que el modo GUI del modo avanzado puede llegar a ser también bastante limitado a veces. Dicho esto, también puedo agregar que el modo avanzado resulta muy útil y es muy fácil de usar una vez se sabe usar. Para usarlo le damos al botón de &#8220;Avanzado&#8221; (Advanced):</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_02-Aug.-19-19.42.gif"><img class="alignnone size-full wp-image-561" title="ScreenHunter_02 Aug. 19 19.42" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_02-Aug.-19-19.42.gif" alt="" width="538" height="404" /></a></p>
<p>Lo primero que vemos es que los dos primeros campos son iguales (nombre y conexión). Los otros campos ha sido removidos y ahora tenemos tres áreas nuevas:</p>
<ol>
<li><strong>SQL</strong>: Área donde escribimos nuestra consulta SQL.</li>
<li><strong>Variables (Variables)</strong>: Área donde creamos las variables que usaremos en los filtros.</li>
<li><strong>Elementos de base de datos (Database Items)</strong>: Las tablas y los campos de la base de datos.</li>
</ol>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-19-19.45_2.gif"><img class="alignnone size-full wp-image-562" title="ScreenHunter_03 Aug. 19 19.45_2" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-19-19.45_2.gif" alt="" width="569" height="417" /></a></p>
<p>Lo importante es saber que el modo avanzado funciona igual que el sencillo. Los botones que están en el área de Elementos de la base de datos son los que agregan elementos a la consulta.</p>
<ul>
<li>El botón <strong>SELECT</strong> tiene que ver con la selección de columnas o de la tabla completa.</li>
<li>Con el botón<strong> WHERE</strong> añades uno o múltiples filtros.</li>
<li>Por último, el botón <strong>ORDER BY</strong> especifica uno o más tipo de como organizar el resultado.</li>
</ul>
<h4>SELECT</h4>
<p>Si queremos hacer una selección de todos los campos de una tabla escogemos la tabla y después le damos click al botón de Select. Por ejemplo,en la siguiente imagen he seleccionado todos los campos de &#8220;tabla1&#8243; :</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-21-13.06.gif"><img class="alignnone size-full wp-image-570" title="ScreenHunter_01 Aug. 21 13.06" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-21-13.06.gif" alt="" width="564" height="413" /></a></p>
<p>De igual forma, si queremos escoger campos individuales damos click al campo y luego al botón SELECT con cada uno de los campos deseados. En el próximo ejemplo he escogido los campos &#8220;id&#8221;, &#8220;nombre&#8221; y &#8220;fecha&#8221;:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_02-Aug.-21-13.16.gif"><img class="alignnone size-full wp-image-571" title="ScreenHunter_02 Aug. 21 13.16" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_02-Aug.-21-13.16.gif" alt="" width="565" height="411" /></a></p>
<h4>WHERE</h4>
<p>Para agregar un filtro lo más recomendable es crear una variable primero. NO es realmente necesario para que funcione el script pero, de esa forma, DW crea el código necesario para validar los valores antes de que estos ínter-actúen con la base de datos. Creamos una variable dándole click al símbolo de más que está en la sección de variables:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-21-19.33.gif"><img class="alignnone size-full wp-image-574" title="ScreenHunter_03 Aug. 21 19.33" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-21-19.33.gif" alt="" width="564" height="413" /></a></p>
<p>En la ventana de &#8220;Añadir variable&#8221; (Add Variable) DW te pide varios campos:</p>
<ol>
<li>Nombre (Name): Nombre de la variable. Es el nombre que usará DW cuando crea la variable. El nombre debe obedecer las reglas de una variable (en este caso, una variable PHP). Sólo letras de la &#8220;<strong>a</strong>&#8221; a la &#8220;<strong>z</strong>&#8220;, números del <strong>0</strong> al <strong>9</strong>, guiones ( &#8211; ) y &#8220;underscores&#8221; ( _ ). No caracteres especiales (ñ, acentos, etcétera).  Por último, se debe comenzar el nombre con una letra.</li>
<li>Tipo (Type): El <a href="http://www.desarrolloweb.com/articulos/1054.php" target="_blank">tipo SQL</a> del valor de la variable. DW los agrupa según el tipo de código que va a crear.</li>
<li>Valor Defecto (Default Value): Es el valor de la variable en caso de que no se especifique o llegue vacía al momento de ejecutar el script. DW usa &#8220;-1&#8243; cuando en código creado usando el modo sencillo. Este valor asegura que la consulta no devuelva ningún resultado. Si necesitas que tu variable tenga un valor defecto puedes cambiarlo a lo que necesitas.</li>
<li>Valor de ejecución (Runtime Value): Es el valor que se usará al momento de ejecución del script. En el modo sencillo DW crea el código dependiendo del tipo de variable. En el modo avanzado se debe agregar el código PHP además del nombre de la variable. Los tipos son los siguiente. Están acompañados con sus respectivos ejemplos de códigos PHP:
<ul>
<li><strong> Variable URL (URL VAriable) (GET)<span style="font-weight: normal;">.</span></strong> Variable pasada a través del &#8220;<a href="http://es.wikipedia.org/wiki/Query_string" target="_blank">query string</a>&#8221;
<pre class="brush: php; title: ; notranslate">$_GET['nombre_de_la_variable']</pre>
</li>
<li><strong>Variable de formulario (Form Variable) (POST)</strong>. Variable pasada a través de un formulario.
<pre class="brush: php; title: ; notranslate">$_POST['nombre_de_la_variable']</pre>
</li>
<li><strong>Cookie (Cookie)</strong>. Variable pasada a través de una cookie.
<pre class="brush: php; title: ; notranslate">$_COOKIE['nombre_de_la_variable']</pre>
</li>
<li><strong>Variable de sesión (Session Variable)</strong>. Variable pasada a través de una sesión.
<pre class="brush: php; title: ; notranslate">$_SESSION['nombre_de_la_variable']</pre>
</li>
<li><strong>Variable de servidor (Server Variable)</strong> . Variable tomada de una de las variables del servidor.
<pre class="brush: php; title: ; notranslate">$_SERVER['nombre_de_la_variable']</pre>
</li>
<li><strong>Variable arbitraria</strong>. También se puede usar una variable que ya ha sido creada anteriormente o función PHP que devuelva un valor.
<pre class="brush: php; title: ; notranslate">$pedro</pre>
<pre class="brush: php; title: ; notranslate">date('Y-m-d H:i:s')</pre>
</li>
</ul>
</li>
</ol>
<p>En el siguiente ejemplo, la variable &#8220;variable1&#8243; es de tipo &#8220;texto&#8221;, su valor defecto es &#8220;-1&#8243; y la variable es enviada vía un formulario:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-22-10.07.gif"><img class="alignnone size-full wp-image-581" title="ScreenHunter_01 Aug. 22 10.07" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_01-Aug.-22-10.07.gif" alt="" width="555" height="405" /></a></p>
<p>Una vez creada la variable podemos agregar un filtro. Seleccionamos el campo que usaremos en el filtro y le damos clic al botón de WHERE:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-22-11.34.gif"><img class="alignnone size-full wp-image-583" title="ScreenHunter_03 Aug. 22 11.34" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_03-Aug.-22-11.34.gif" alt="" width="564" height="414" /></a></p>
<p>Esto agregará el nombre del campo que vamos a usar. La variable y la condición la tenemos que agregar manualmente. Aquí usaremos el <a href="http://dev.mysql.com/doc/refman/5.0/es/comparison-operators.html" target="_self">operador</a> o condición correspondiente dependiendo de los valores que se quieren obtener de la base de datos . En ese caso he usado igual que &#8220;=&#8221; para que la consulta devuelva los registros donde el valor del campo &#8216;nombre&#8221; sea igual a la variable de formulario &#8220;nombre&#8221;:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_04-Aug.-22-11.37.gif"><img class="alignnone size-full wp-image-584" title="ScreenHunter_04 Aug. 22 11.37" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_04-Aug.-22-11.37.gif" alt="" width="564" height="410" /></a></p>
<p>Para usar una constante no es necesario crear una variable ya que ésta no necesita ser validada. Sólo tenemos que agregarla manualmente. Por ejemplo, la siguiente consulta devuelve los registros donde el campo nombre es igual a la constante &#8216;Pedro&#8217;:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_05-Aug.-22-11.48.gif"><img class="alignnone size-full wp-image-586" title="ScreenHunter_05 Aug. 22 11.48" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_05-Aug.-22-11.48.gif" alt="" width="568" height="413" /></a></p>
<p>Lo bueno del modo avanzado es que podemos poner múltiples filtros. Sólo tenemos que seguir creando variables y agregando tablas y condiciones. El próximo ejemplo devuelve los registros donde el valor del campo<strong> nombre</strong> es igual a &#8220;pedro&#8221; y el valor del campo <strong>descripcion</strong> es igual a la variable de formulario &#8220;descripcion&#8221; (variable1):</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_06-Aug.-22-12.06.gif"><img class="alignnone size-full wp-image-589" title="ScreenHunter_06 Aug. 22 12.06" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_06-Aug.-22-12.06.gif" alt="" width="562" height="406" /></a></p>
<p>DW sólo usa el operador lógico &#8221;AND&#8221; (Y). Con este operador se tienen que cumplir todas las condiciones. En el último ejemplo se tienen que cumplir las dos condiciones (filtros). Para más información acerca de otros operadores lógicos visite <a href="http://dev.mysql.com/doc/refman/5.0/es/logical-operators.html" target="_blank">la página de MySQL que trata ese tema</a>.</p>
<div class="ui-state-highlight ui-corner-all centrar">*Nota: Por alguna razón no se pueden crear variables  que no se van a utilizar. DW lanzará un error si existe alguna que no se está usando en la consulta.</div>
<h4>ORDER BY</h4>
<p>Con el botón de ORDER BY se controla la organización del resultado de la consulta. Por ejemplo, para que el resultado se organice con respecto al campo <strong>nombre </strong>escogemos el campo le damos clic al botón de ORDER BY. <strong> </strong>Por alguna razón, DW no incluye una opción para controlar el modo de organización (Ascendente/Descendente) como en el modo sencillo. Si no lo especificamos  la organización siempre será ascendente. Para que sea descendente agregamos &#8220;DESC&#8221; después del nombre del campo. Podemos también agregar organización múltiple de la misma forma que con los filtros. Estas se separan por comas:</p>
<p style="text-align: center;"><a href="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_07-Aug.-22-12.27.gif"><img class="alignnone size-full wp-image-590" title="ScreenHunter_07 Aug. 22 12.27" src="http://juaniquillo.com/blog/wp-content/uploads/2010/08/ScreenHunter_07-Aug.-22-12.27.gif" alt="" width="562" height="411" /></a></p>
<h3>Conclusión</h3>
<p>Como mencioné antes, la mejor forma de construir consultas exitosas a una base de datos es entendiendo como se construye una consulta SQL. DW provee funciones sencillas que ayudan a la construcción de consultas básicas, pero estas sólo pueden ayudar en un limitado número de casos. Conocimiento de los lenguajes envueltos (MySQL y PHP en este caso) son necesarios para consultas y sistemas más complejos. Yo recomiendo <a href="http://www.forosdelweb.com/f21/" target="_blank">el foro de Base de datos de Foros del Web</a> para cualquier tipo de duda relacionada no solo a MySQL, sino también otros servidores de bases de datos.</p>
]]></content:encoded>
			<wfw:commentRss>http://juaniquillo.com/blog/2010/08/crear-recordset-dreamweaver/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
