<?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>Linux, Java y programación &#187; AJAX</title>
	<atom:link href="http://casidiablo.net/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Mon, 08 Mar 2010 03:41:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JBoss Seam Framework + Laboratorio de iniciación</title>
		<link>http://casidiablo.net/jboss-seam-framework-introduccion/</link>
		<comments>http://casidiablo.net/jboss-seam-framework-introduccion/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 07:14:03 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[bpm]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ejb3]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[seam]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3422</guid>
		<description><![CDATA[

Seam es un proyecto desarrollado por JBoss, cuyo lider es Gavin King. Es un completo framework para la creación de aplicaciones web 2.0 que unifica varias tecnologías como AJAX, Enterprise Java Beans (EJB3), Java Server Faces (JSF), Java Portlets and Business Process Management (BPM), Hibernate, y mucho más.
De la Wikipedia:
Seam introduce el concepto de contextos. [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fjboss-seam-framework-introduccion%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22JBoss%20Seam%20Framework%20%2B%20Laboratorio%20de%20iniciaci%C3%B3n%09%22%20%7D);"></div>
<p style="text-align: justify;"><a href="http://www.seamframework.org/">Seam</a> es un proyecto desarrollado por JBoss, cuyo lider es Gavin King. Es un completo framework para la creación de aplicaciones web 2.0 que unifica varias tecnologías como AJAX, Enterprise Java Beans (EJB3), Java Server Faces (JSF), Java Portlets and Business Process Management (BPM), Hibernate, y mucho más.</p>
<p style="text-align: justify;">De la Wikipedia:</p>
<p style="text-align: justify; padding-left: 30px;"><em>Seam introduce el concepto de contextos. Cada componente de Seam existe dentro de un contexto. El contexto conversacional por ejemplo captura todas las acciones del usuario hasta que éste sale del sistema o cierra el navegador &#8211; inclusive puede llevar un control de múltiples pestañas y mantiene un comportamiento consistente cuando se usa el botón de regresar de el navegador.</em></p>
<p style="text-align: justify; padding-left: 30px;"><em>Tú puedes automáticamente generar una aplicación web de altas, bajas, cambio y modificaciones a partir de una base de datos existente utilizando una herramienta de linea de comandos llamada seam-gen incluida con el framework.</em></p>
<p style="text-align: justify; padding-left: 30px;"><em>El desarrollo WYSIWYG es facilitado a través del uso de las JBoss Tools, que es un conjunto de plug-ins diseñados para el entorno integrado de desarrollo Eclipse. Seam puede ser integrado con las bibliotecas de componentes JSF JBoss RichFaces o con ICEsoft ICEFaces. Ambas bibliotecas poseen soporte para AJAX.</em></p>
<p style="text-align: justify;">Actualmente soporta varios contenedores de aplicaciones como JBoss 4 o 5, IBM Websphere, BEA WebLogic, Oracle OC4J y por supuesto Apache Tomcat.</p>
<p style="text-align: justify;">Puedes encontrar ejemplos de proyectos creados con seam y listos para ejecutar dentro del directorio examples de la aplicación.</p>
<p style="text-align: justify;"><strong>Referencias y documentación:</strong></p>
<ul>
<li><a href="http://www.seamframework.org/Home">Página oficial de Seam Framework</a></li>
<li><a href="http://www.jboss.com/products/seam/">Página del producto JBoss Seam</a></li>
<li><a href="http://docs.jboss.com/seam/latest/reference/en-US/html/index.html">Documentación Online mantenida por la comunidad</a></li>
<li><a href="http://docs.jboss.com/seam/">Documentación de JBoss Seam</a></li>
<li><a href="http://www.infoq.com/articles/jboss-seam">Introduction to JBoss Seam [artículo en InfoQ]</a></li>
</ul>
<p style="text-align: justify;">
<h3>Laboratorio de JBoss Seam Framework</h3>
</p>
<p style="text-align: justify;">Con el siguiente laboratorio se pretende dar un punto de partida a la creación de aplicaciones usando Seam. El laboratorio está enfocado al desarrollo sobre Eclipse, que es el IDE que recomiendo para trabajar con Seam.</p>
<p style="text-align: justify;">Este laboratorio está enfocado al uso de Seam para JBoss, aunque con pocas o sin modificaciones puede funcionar en Apache Tomcat. Recordemos además que Seam también soporta los contenedores IBM Websphere, BEA WebLogic y Oracle OC4J.</p>
<p style="text-align: justify;">Nota: todas las pruebas se realizaron sobre Linux (<a href="http://casidiablo.net/category/gentoo/">Gentoo</a> amd64) y <a href="http://opensolaris.org">OpenSolaris</a> 9.6. Sin embargo, hacerlo en Windows con los mismos pasos no debería presentar problemas; solo se debe tener cuidado con las rutas donde se guarden los archivos usados.</p>
<p style="text-align: justify;">
<h3>Prerequisitos</h3>
</p>
<ul>
<li><span style="background-color: #ffffff;"><a href="http://eclipse.org">Eclipse 3.4 o 3.5</a></span></li>
<li><span style="background-color: #ffffff;"><a href="http://seamframework.org/Download">La última versión de JBoss Seam</a> (la más reciente al momento de escribir este documento es la 2.2.0).</span></li>
<li><span style="background-color: #ffffff;"><a href="http://labs.jboss.com/jbossas/downloads/">La última versión de Jboss Server</a> (la más reciente al momento de escribir este documento es la 5.1.0).</span></li>
<li><span style="background-color: #ffffff;">Un gestor de bases de datos. En mi caso he usado MySQL, aunque hay soporte para muchos otros gestores. No olvides además descargar el conector JDBC, en mi caso el mysql-connector-java-bin.jar.</span></li>
</ul>
<p><span id="more-3422"></span></p>
<p style="text-align: justify;">
<h3>Instalación</h3>
</p>
<p style="text-align: justify;">Para instalar Seam y JBoss basta con descomprimir los paquetes que descarguemos de Internet. Yo recomiendo hacerlo en la carpeta /opt en sistemas UNIX/Linux, o directamente en C:/ en sistemas Windows.</p>
<p style="text-align: justify;">
<h3>Creación de un proyecto base para Eclipse</h3>
</p>
<p style="text-align: justify;">SeamFramework nos proporciona una herramienta de línea de comandos para la generación de proyectos base. Vamos al directorio donde lo instalamos y ejecutamos:</p>
<div class="consola">./seam setup</div>
<p style="text-align: justify;">Ahora debemos responder a cada una de las preguntas que nos hace; muchas de ellas las debemos dejar por defecto, así que nos concentraremos solo en aquellas en donde tengamos que cambiar. Resumiendo:</p>
<ul>
<li>El directorio donde se creará el proyecto:
<div class="consola">[input] Enter the directory where you want the project to be created (should not contain spaces) [/home/funtoo/projects] [/home/funtoo/projects]<br />
/home/funtoo/Poli/Componentes/seam-framework/workspace</div>
</li>
<li>El directorio donde se encuentra el JBoss AS:
<div class="consola">[input] Enter your JBoss AS home directory [C:/Program Files/jboss-5.1.0.GA] [C:/Program Files/jboss-5.1.0.GA]<br />
/opt/jboss-5.1.0.GA/</div>
</li>
<li>El nombre del proyecto:
<div class="consola">[input] Enter the project name [myproject] [myproject]<br />
holaseam</div>
</li>
<li>Vamos a desarrollar nuestra aplicación como EAR:
<div class="consola">[input] Is this project deployed as an EAR (with EJB components) or a WAR (with no EJB support)? [war] (ear, [war])<br />
ear</div>
</li>
<li>Definimos el nombre del paquete en base de la aplicación:
<div class="consola">[input] Enter the base package name for your Java classes [com.mydomain.holaseam] [com.mydomain.holaseam]<br />
org.ejemplo.seam</div>
</li>
<li>Los que hacen referencia a los Session Beans o Test Cases los podemos dejar como nos lo pongan. El gestor de base de datos; en este caso usé mysql aunque debería ser practicamente transparente:
<div class="consola">[input] What kind of database are you using? [hsql] ([hsql], mysql, derby, oracle, postgres, mssql, db2, sybase, enterprisedb, h2)<br />
mysql</div>
</li>
<li>Ingresamos la ruta en donde se encuentra el driver JDBC:
<div class="consola">[input] Enter the filesystem path to the JDBC driver jar [] []<br />
/opt/conectores/mysql-connector-java-5.0.8-bin.jar</div>
</li>
<li>Ahora debemos definir la URL de conexión a la base de datos. En este caso, he creado una base de datos llamada ejemplo, y por lo tanto la URL quedaría así:
<div class="consola">[input] Enter the JDBC URL for your database [jdbc:mysql:///test] [jdbc:mysql:///test]<br />
jdbc:mysql://localhost:3306/ejemplo</div>
</li>
<li>Con esta opción se ejecutará un script llamado import.sql cada vez que hagamos un deploy del proyecto. Dicho archivo deberá tener los scripts necesarios para crear tablas y registros. Puesto que en este laboratorio poco vamos a usar MySQL, puedes poner lo que quieras; pero es importante tener en cuenta esta opción a la hora de desarrollar un proyecto.
<div class="consola">[input] Do you want to recreate the database tables and execute import.sql each time you deploy? [n] (y, [n])<br />
y</div>
</li>
</ul>
<p style="text-align: justify;">Ya que hemos configurado lo que será el proyecto, es hora de crearlo. Ejecutamos el comando:</p>
<div class="consola">./seam create-project</div>
<p style="text-align: justify;">Esto creará un proyecto base que puedes abrir con Eclipse, y eso es justo lo que haremos a continuación.</p>
<p style="text-align: justify;">Abrimos eclipse y nos aseguramos que el workspace sea el mismo directorio en el que creamos el proyecto desde Seam. Vamos a la creación de un nuevo proyecto Java:</p>
<p style="text-align: center;"><img title="seam-screenshot" alt="seam-screenshot" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_005.png" width="540" height="402" /></p>
<p style="text-align: justify;">Le damos el mismo nombre que a nuestra aplicación Seam (en este caso holaseam):</p>
<p style="text-align: center;"><img title="seam-screenshot" alt="seam-screenshot" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_006.png" width="524" height="736" /></p>
<p>Y puesto que ya existe un proyecto creado en el workspace muchas de las opciones ya aparecen asignadas. Hacemos clic en Next y vemos que ya hay una estructura de directorios creada con la base del proyecto Seam.</p>
<p style="text-align: center;"><img title="seam-screenshot" alt="seam-screenshot" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_007.png" width="639" height="714" /></p>
<p style="text-align: justify;">Hacemos clic en Finish, y ya podemos comenzar a editar y modificar el proyecto.</p>
<p style="text-align: center;"><img title="seam-screenshot" alt="seam-screenshot" title="screenshot_008" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_008.png" width="573" height="364" /></p>
<p style="text-align: justify;">
<h3>Despliegue del proyecto</h3>
</p>
<p style="text-align: justify;">Primero debemos iniciar el servicio de JBoss. Para ello ejecutamos el archivo run.sh (run.bat en Windows) del directorio bin de Jboss. Este dejará el servicio web corriendo por defecto en el puerto 8080.</p>
<p style="text-align: justify;">Para hacer el despliegue sobre JBoss, usamos un archivo Ant que se generó junto con el proyecto. Dicho archivo nos permite ejecutar tests, hacer (re)despliegues, generar el JavaDoc, entre otras. Así que habrímos el archivo build.xml y nos aseguramos que la vista Outline esté abierta:</p>
<p style="text-align: center; "><a href="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_009.png"><img title="seam-screenshot" alt="seam-screenshot"  src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_009.png" width="600" /></a></p>
<p>Dentro de la vista Outline podemos ver los componentes del archivo build.xml y podemos ejecutarlos con Ant. En este caso, buscamos el componente deploy, hacemos clic derecho, Run As, y Ant Build.</p>
<p style="text-align: center; "><a href="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_010.png"><img title="seam-screenshot" alt="seam-screenshot"  src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_010.png" width="600" /></a></p>
<p style="text-align: justify;">Algunas veces se generan errores al hacer el despliegue:</p>
<p style="text-align: center;"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_011.png"><img title="seam-screenshot" alt="seam-screenshot"  title="screenshot_011" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_011.png" width="478" height="232" /></a></p>
<p style="text-align: justify;">Si es tu caso, deberás eliminar los archivos y directorios que tengan el nombre del proyecto del directorio deploy en JBoss. En mi caso los elimino con este comando:</p>
<div class="consola">rm -rf /opt/jboss-5.1.0.GA/server/default/deploy/holaseam*</div>
<p style="text-align: justify;">Si todo sale bien, cuando hagamos de nuevo deploy veremos algo como esto:</p>
<p style="text-align: center;"><img title="seam-screenshot" alt="seam-screenshot" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_012.png" width="600" /></p>
<p style="text-align: justify;">Es hora de probar la aplicación. Abrimos el navegador en la dirección: http://localhost:8080/holaseam/</p>
<p style="text-align: center;"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_013.png"><img title="seam-screenshot" alt="seam-screenshot" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_013.png" width="712" height="618" /></a></p>
<p style="text-align: center;"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_014.png"><img title="seam-screenshot" alt="seam-screenshot" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_014.png" width="712" height="618" /></a></p>
<p style="text-align: center;"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_015.png"><img title="seam-screenshot" alt="seam-screenshot"  src="http://casidiablo.net/wordpress/wp-content/uploads/2009/11/screenshot_015.png" width="712" height="618" /></a></p>
<p style="text-align: justify;">
<h3>Descargar versión en PDF</h3>
</p>
<p><a href="http://casidiablo.net/descargar/Laboratorio+JBoss+Seam" class="tooltip download" title="Descargar versión en PDF de este artículo">Descargar</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/ajax/" rel="tag nofollow">AJAX</a>, <a href="http://casidiablo.net/tag/bpm/" rel="tag nofollow">bpm</a>, <a href="http://casidiablo.net/tag/eclipse/" rel="tag nofollow">eclipse</a>, <a href="http://casidiablo.net/tag/ejb3/" rel="tag nofollow">ejb3</a>, <a href="http://casidiablo.net/tag/how-to/" rel="tag nofollow">how-to</a>, <a href="http://casidiablo.net/tag/j2ee/" rel="tag nofollow">j2ee</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/jboss/" rel="tag nofollow">jboss</a>, <a href="http://casidiablo.net/tag/jsf/" rel="tag nofollow">jsf</a>, <a href="http://casidiablo.net/tag/manual/" rel="tag nofollow">manual</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a>, <a href="http://casidiablo.net/tag/seam/" rel="tag nofollow">seam</a>, <a href="http://casidiablo.net/tag/tutorial/" rel="tag nofollow">tutorial</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/jboss-seam-framework-introduccion/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ataques web XSS, CSRF y aplicaciones AJAX + JSON [video+paper]</title>
		<link>http://casidiablo.net/web-attacks-ajax/</link>
		<comments>http://casidiablo.net/web-attacks-ajax/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 22:43:20 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[csrf]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[paper]]></category>
		<category><![CDATA[politécnico]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2940</guid>
		<description><![CDATA[


Descargar Paper


	Etiquetas: AJAX, csrf, hacking, json, paper, politécnico, video, xss
]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fweb-attacks-ajax%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ataques%20web%20XSS%2C%20CSRF%20y%20aplicaciones%20AJAX%20%2B%20JSON%20%5Bvideo%2Bpaper%5D%22%20%7D);"></div>
<p><embed src="http://blip.tv/play/gs1Q8+Zbk6Js" type="application/x-shockwave-flash" width="640" height="430" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><a href="http://casidiablo.net/descargar/Paper+AJAX+XSS+JSON" class="tooltip" title="Descargar PDF comprimido">Descargar Paper</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/ajax/" rel="tag nofollow">AJAX</a>, <a href="http://casidiablo.net/tag/csrf/" rel="tag nofollow">csrf</a>, <a href="http://casidiablo.net/tag/hacking/" rel="tag nofollow">hacking</a>, <a href="http://casidiablo.net/tag/json/" rel="tag nofollow">json</a>, <a href="http://casidiablo.net/tag/paper/" rel="tag nofollow">paper</a>, <a href="http://casidiablo.net/tag/politecnico/" rel="tag nofollow">politécnico</a>, <a href="http://casidiablo.net/tag/video/" rel="tag nofollow">video</a>, <a href="http://casidiablo.net/tag/xss/" rel="tag nofollow">xss</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/web-attacks-ajax/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Autocompletar campo de búsquedas en Wordpress usando AJAX</title>
		<link>http://casidiablo.net/autocompletar-busquedas-wordpress-usando-ajax/</link>
		<comments>http://casidiablo.net/autocompletar-busquedas-wordpress-usando-ajax/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 09:25:20 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[autocompletación]]></category>
		<category><![CDATA[busqueda]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1926</guid>
		<description><![CDATA[

El resultado del how-to que voy a describir es el siguiente:

Lo muestro antes que nada para que veas de que estoy hablando, y si te interesa ya seguirás leyendo, sino pues te ahorras tiempo valioso.
La mayor parte del tip lo he tomado de esta entrada (en inglés), aunque le he mejorado algunas cosas que lo [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fautocompletar-busquedas-wordpress-usando-ajax%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Autocompletar%20campo%20de%20b%C3%BAsquedas%20en%20Wordpress%20usando%20AJAX%22%20%7D);"></div>
<p>El resultado del how-to que voy a describir es el siguiente:</p>
<p style="text-align: center;"><img style="border:solid 1px;" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/10/autocompletado.png" alt="autocompletado codigo" /></p>
<p style="text-align: justify;">Lo muestro antes que nada para que veas de que estoy hablando, y si te interesa ya seguirás leyendo, sino pues te ahorras tiempo valioso.</p>
<p style="text-align: justify;">La mayor parte del tip lo he tomado de <a href="http://hackwordpress.com/how-to-create-an-ajax-based-autocompleting-search-field-for-your-wordpress-theme/">esta entrada (en inglés)</a>, aunque le he mejorado algunas cosas que lo hacen mucho más eficiente. La idea, como dice el título, es implementar mediante AJAX un método de autocompletación de palabras cuando nuestros lectores deseen buscar algo. <strong><abbr class="tooltip" title="O sea que si no usas tags, no te va a servir">Todo esto basado en los tags que hayamos asignado a cada post</abbr></strong>.</p>
<p style="text-align: justify;">Necesitaremos entonces seguir estos sencillos 4 pasos:</p>
<p><span id="more-1926"></span></p>
<h3>1. Código PHP</h3>
<p style="text-align: justify;">Debes crear un archivo PHP (llámalo por ejemplo <em>ajax.php</em>), y lo pones en alguna parte de tu servidor (yo recomiendo: la carpeta de tu theme):</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: php;">&lt;?php
if (isset($_POST['search']))
    $search = htmlentities($_POST['search']);
else
   $search ='';
$db = mysql_connect('localhost','usuario','password'); //Don't forget to change
mysql_select_db('nombre base de datos', $db);           //theses parameters
$arreglo = explode(' ', $search);
if($arreglo[count($arreglo)-1]==&quot;&quot; || $arreglo[count($arreglo)-1]==&quot; &quot;){
   mysql_close();
   die();
}
$sql = &quot;SELECT name from wp_terms WHERE name LIKE '%&quot;.$arreglo[count($arreglo)-1].&quot;%'&quot;;
$req = mysql_query($sql) or die();
echo '&lt;ul&gt;';
while ($data = mysql_fetch_array($req))
{
   echo '&lt;li&gt;&lt;a href=&quot;#&quot; onclick=&quot;selected(this.innerHTML);&quot;&gt;'.htmlentities($data['name']).'&lt;/a&gt;&lt;/li&gt;';
}
echo '&lt;/ul&gt;';
mysql_close();
?&gt;</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;"><strong>No te olvides de modificar los datos de usuario y contraseña, así como el nombre de la base de datos</strong>. Este sencillo script se encargará de buscar en la base de datos los tags que coincidan con lo que el usuario está empezando a buscar.</p>
<h3>2. Código JavaScript</h3>
<p style="text-align: justify;">Luego, debes crear un archivo JavaScript (llámalo por ejemplo <em>buscar.js</em>), y ponerlo en alguna parte de tu servidor (yo recomiendo: la carpeta de tu theme):</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: jscript;">var myAjax = ajax();
function ajax() {
   var ajax = null;
   if (window.XMLHttpRequest) {
      try {
         ajax = new XMLHttpRequest();
      }
      catch(e) {}
   }
   else if (window.ActiveXObject) {
      try {
         ajax = new ActiveXObject(&quot;Msxm12.XMLHTTP&quot;);
      }
      catch (e){
         try{
            ajax = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
         }
         catch (e) {}
      }
   }
   return ajax;
}
function request(str) {
   //Don't forget to modify the path according to your theme
   myAjax.open(&quot;POST&quot;, &quot;http://tusitio.com/wp-content/themes/TU_TEMA/ajax.php&quot;);
   myAjax.onreadystatechange = result;
   myAjax.setRequestHeader(&quot;Content-type&quot;, &quot;application/x-www-form-urlencoded&quot;);
   myAjax.send(&quot;search=&quot;+str);
}
function result() {
   if (myAjax.readyState == 4) {
      var liste = myAjax.responseText;
      var cible = document.getElementById('tag_update').innerHTML = liste;
      document.getElementById('tag_update').style.display = &quot;block&quot;;
   }
}
function selected(choice){
   var cible = document.getElementById('s');
      var posc = 0;
      for (var i=cible.value.length-1; i&gt;=0; i--)   {
         var caracter = cible.value[i];
         if (caracter==&quot; &quot;){
            posc = i+1;
            break;
         }
      }
   cible.value = cible.value.substring(0,posc)+&quot;&quot;+choice+&quot; &quot;;
      cible.focus();
   document.getElementById('tag_update').style.display = &quot;none&quot;;
}</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;">Éste se compone de cuatro métodos:</p>
<ol>
<li><code>ajax()</code>, que creará el objeto XMLHTTPRequest.</li>
<li><code>request()</code>, que enviará las peticiones al archivo PHP.</li>
<li><code>return()</code>, que recuperará los datos que envíe el archivo PHP.</li>
<li><code>selected()</code>, que actualizará el campo de búsqueda.</li>
</ol>
<p style="text-align: justify;">Por supuesto debes cambiar el header de tu theme de tal manera que cargue este archivo javascript. Si creaste el archivo en la carperta de tu theme lo tienes fácil, simplemente deberás añadir lo siguiente en el archivo header.php:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: php;">&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('stylesheet_directory'); ?&gt;/buscar.js&quot;&gt;&lt;/script&gt;</pre>
<p><!--INFOLINKS_ON--></p>
<p><strong>No olvides cambiar la ruta donde pusiste el archivo PHP</strong> (línea 25 del archivo <em>buscar.js</em>).</p>
<h3>3. Cambiando el theme</h3>
<p style="text-align: justify;">Ahora es cuando debes cambiar el formulario que tienes por defecto, por uno que implemente llamadas a las funciones javascript del paso anterior. Por lo general tendrás algo como esto:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: xml;">&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;/&quot;&gt;
   &lt;div&gt;
      &lt;input type=&quot;text&quot; value=&quot;&lt;?php the_search_query(); ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; /&gt;
      &lt;input type=&quot;submit&quot; id=&quot;searchsubmit&quot; value=&quot;Buscar&quot; /&gt;
   &lt;/div&gt;
&lt;/form&gt;</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;">Lo cual debes cambiar por esto:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: xml;">&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;/&quot;&gt;
    &lt;div&gt;
   &lt;input type=&quot;text&quot; value=&quot;&lt;?php the_search_query(); ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; onkeyup=&quot;request(this.value);&quot;/&gt;
   &lt;input type=&quot;submit&quot; id=&quot;searchsubmit&quot; value=&quot;Buscar&quot; class=&quot;button&quot; /&gt;
    &lt;/div&gt;
    &lt;div id=&quot;tag_update&quot;&gt;&lt;/div&gt;
&lt;/form&gt;</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;">Como puedes darte cuenta, se añaden esencialmente dos cosas:</p>
<ol>
<li>Una llamada al método <code>request()</code> cada vez que se presione una tecla en el campo de búsqueda.</li>
<li>Una capa &lt;div&gt; que contendrá las palabras claves sugeridas para la búsqueda</li>
</ol>
<h3>4. Añadiendo CSS</h3>
<p style="text-align: justify;">Por último deberás añadir lo siguiente al archivo style.css de tu plantilla:</p>
<p style="text-align: justify;"><!--INFOLINKS_OFF-->
<pre class="brush: css;">#tag_update {
   display: block;
   border-left: 1px solid #373737;
   border-right: 1px solid #373737;
   border-bottom: 1px solid #373737;
   position:absolute;
   z-index:1;
}
#tag_update ul {
   margin: 0;
   padding: 0;
   list-style: none;
}
#tag_update li{
   display:block;
   clear:both;
}
#tag_update a {
   width:134px;
   display: block;
   padding: .2em .3em;
   text-decoration: none;
   color: #fff;
   background-color: #1B1B1C;
   text-align: left;
}
#tag_update a:hover{
   color: #fff;
   background-color: #373737;
   background-image: none;
}</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;">Esto decorará adecuadamente el cuadro donde aparecen las sugerencias.</p>
<h3>Créditos</h3>
<p>Por supuesto el 99% de los créditos es para la persona que diseñó el código AJAX y demás. Aunque cabe resaltar lo que añadí por mi cuenta:</p>
<ul>
<li>Las sugerencias se generan en base a la última palabra escrita, y cuando se selecciona NO borra todo el contenido del cuadro de búsqueda. Esto implicó cambios tanto en el archivo javascript como en el código PHP.</li>
<li>El cuadro de búsqueda es enfocado una vez se selecciona un palabra de las que son sugeridas</li>
</ul>
<p><a class="descargacodigo tooltip" title="Descarga el código fuente del ejemplo" href="http://casidiablo.net/descargar/Busqueda+Wordpress+AJAX">Descargar código fuente</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/ajax/" rel="tag nofollow">AJAX</a>, <a href="http://casidiablo.net/tag/autocompletacion/" rel="tag nofollow">autocompletación</a>, <a href="http://casidiablo.net/tag/busqueda/" rel="tag nofollow">busqueda</a>, <a href="http://casidiablo.net/tag/how-to/" rel="tag nofollow">how-to</a>, <a href="http://casidiablo.net/tag/tip/" rel="tag nofollow">tip</a>, <a href="http://casidiablo.net/tag/wordpress/" rel="tag nofollow">wordpress</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/autocompletar-busquedas-wordpress-usando-ajax/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>
