<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.2" -->
<rss version="0.92">
<channel>
	<title>ESMMUG</title>
	<link>http://www.esmmug.com</link>
	<description>Grupo de Usuarios Macromedia</description>
	<lastBuildDate>Wed, 14 Feb 2007 20:38:48 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>ESMMUG cambia de dominio</title>
		<description><![CDATA[<p>Para adaptarnos a los nuevos tiempos, decidimos cambiar de nombre<br />
<!--more--><br />
Tras la desaparición de Macromedia, nuestro nombre había dejado de tener sentido. Por ello, aprovechamos para cambiar de dominio y desarrollar un nuevo layout. Esperemos que os guste:</p>
<p>podéis leer un comentario sobre las novedades en:<br />
<a href="http://www.dwug.es/go/336">http://www.dwug.es/go/336</a></p>
<p>La nueva URL es, por tanto:<br />
<a href="http://www.dwug.es">http://www.dwug.es</a></p>
<p>Para todos aquellos miembros del foro, no es necesario volver a registrarse, simplemente ir a la url del foro: <a href="http://forum.dwug.es">http://forum.dwug.es</a></p>
<p>Esperamos que os guste el cambio!
</p>
]]></description>
		<link>http://www.esmmug.com/go/334</link>
			</item>
	<item>
		<title>Los Widgets de Spry: El elemento Accordion</title>
		<description><![CDATA[<p>Spry, como todo framework para AJAX de cierto nivel, contiene una serie de widgets que permiten mejorar la presentaci&oacute;n de datos. Uno de ellos es elemento Accordion, que en la versi&oacute;n 1.3 presenta interesantes novedades.<br />
<!--more--><br />
Este elemento Accordion nos permite crear listados que pliegan y despliegan alternativamente a modo de persiana.<br />
Para generarlo, s&oacute;lamente es necesario enlazar con el archivo SpryAccordion.js del framework, lo que nos permite utilizarlo incluso con datos est&aacute;ticos.<br />
La estructura html del elemento es relativamente sencilla</p>
<ul>
<li>Un bloque contenedor</li>
<ul>
<li>Bloque de panel 1</li>
<ul>
<li>Un bloque de pesta&ntilde;a/titulo</li>
<li>Un bloque de contenido</li>
</ul>
<li>Bloque de panel 2
<ul>
<li>Un bloque de pesta&ntilde;a/titulo</li>
<li>Un bloque de contenido</li>
</ul>
</li>
<li>&#8230;Bloque de panel n
<ul>
<li>Un bloque de pesta&ntilde;a/titulo</li>
<li>Un bloque de contenido</li>
</ul>
</li>
</ul>
</ul>
</ul>
<p>Estos bloques no necesitan ser obligatoriamente etiquetas div, sino que Spry es capaz de realizarlos con otros elementos html, como una lista.</p>
<p>Una enlazado al archivo creada la estructura de bloques, s&oacute;lo nos queda instanciar el objeto:<br />
&lt;script&gt;var acordeon1 = new Spry.Widget.Accordion(&quot;acordeon&quot;);&lt;/script&gt;</p>
<p>La asignaci&oacute;n a la variable nos permitir&aacute; realizar otrs acciones posibles, como abrir un determinado panel, crearlos al vuelo&#8230; El valor del par&aacute;metro es la id que asignemos al bloque que actua como contenedor.</p>
<p><a href="/demos/spry_accordion/ejemplo1.html" title="ejemplo 1">En el ejemplo 1 podemos ver la estructura b&aacute;sica de un acorde&oacute;n</a> que utiliza una lista para presentar los datos.<br />
<!--nextpage--><br />
<b>Manipulaci&oacute;n con CSS:</b><br />
Adem&aacute;s de los estilos que definamos para mejorar la apariencia del acorde&oacute;n, Spry utiliza otras 4 clases que podemos aprovechar para modificar la apariencia de los paneles en diferentes estados. Estas 4 clases son:</p>
<ul>
<li>AccordionPanelLabelHover: Pasamos el rat&oacute;n por encima del label</li>
<li>AccordionPanelOpen: El panel se encuentra abierto</li>
<li>AccordionPanelClosed: El panel se encuentra cerrado</li>
<li>AccordionFocused: Nuestro accordion tiene el focus en el documento. Para que se pueda utilizar, es necesario que el bloque contenedor del acorde&oacute;n tenga definido el atributo &#8216;tabindex&#8217;</li>
</ul>
<p>Spry utiliza estas clases de forma din&aacute;mica (a la hora de abrir, cerrar o crear paneles), por lo que su uso permite mejorar a&uacute;n m&aacute;s la apariencia del conjunto.</p>
<p><a href="/demos/spry_accordion/ejemplo2.html" title="ejemplo 2">El Ejemplo 2 muestra el acorde&oacute;n con algunos estilos aplicados</a> y aprovecha las clases generadas por Spry &#8216;AccordionPanelOpen&#8217; y &#8216;AccordionFocused&#8217; para cambiar el color de la pesta&ntilde;a cuando el panel se encuentra abierto y cuando el conjunto gana o pierde el foco. Adem&aacute;s, el uso del atributo tabindex permite el uso de los cursores arriba y abajo para navegar por los paneles y la tecla tab para ganar y perder el foco.<br />
<!--nextpage--><br />
<b>M&eacute;todos extra:</b><br />
Hasta ahora hemos visto c&oacute;mo crear el elemento y c&oacute;mo, utilizando estilos CSS, podemos modificar la apariencia din&aacute;mica del mismo . Sin embargo, sus funcionalidades no terminan ah&iacute;: Spry proporciona una serie de m&eacute;todos JavaScript que nos permiten manipular nuestro Acorde&oacute;n. En caso de que vayamos a ahacer uso de ellos, es importante que nuestro elemento utilice bloques div y no listas. Algunos de estos m&eacute;todos son:</p>
<ul>
<li>openFirstPanel(): Abre el primer panel</li>
<li>openLastPanel(): Abre el &uacute;ltimo Panel</li>
<li>openPreviousPanel(): Abre el panel anerior</li>
<li>openNextPanel: Abre el panel siguiente</li>
<li>addNewPanel(&#8221;label&#8221;, &#8220;contenido&#8221;): Permite crear un nuevo panel</li>
</ul>
<p>Omitiremos cometar las 4 primeras, ya que su uso es bastante obvio. Respecto a la quinta, s&oacute;lamente es necesario definir como primer par&aacute;metro el texto de la pesta&ntilde;a y como segundo, el contenido.</p>
<p><a href="/demos/spry_accordion/ejemplo3.html" title="Ver Ejemplo 3">El ejemplo 3 extiende el anterior</a>, a&ntilde;adiendo botones que permiten navegar por las pesta&ntilde;as y la posibilidad de crear otras nuevas.<br />
<b>NOTA</b>: A la hora de escribir este art&iacute;culo (Spry Beta 1.3), el m&eacute;todo addNewPanel es provisional y sufre un bug que impide su uso. Por ello hemos reemplazado el m&eacute;todo existente por otro que hemos creado y que es completamente funcional. Futuras versiones del framework ampliarán está función.</p>
<p>Hasta aqu&iacute; s&oacute;lo algunas de las posibilidades que ofrece este primer widget de Spry. A medida que avancen las versiones iremos avanzando en el conocimieno de este excelente y sencillo framework para AJAX de Adobe</p>
]]></description>
		<link>http://www.esmmug.com/go/333</link>
			</item>
	<item>
		<title>SubFlash &#8216;06: Definidas las ponencias</title>
		<description><![CDATA[<p>Ya son definitivos las ponencias y sus horarios para los Talleres SubFlash &#8216;06.<br />
El calendario abarca el sábado 19 de Agosto, en turno de mañana y tarde, y la mañana del 20 de Agosto.<br />
<!--more--><br />
El horario es el siguiente:</p>
<ul>
<li>Sabado 19 de Agosto:</li>
<ul>
<li>10:00.- Dirección de Arte en Proyectos (por Marco Antonio Morales)</li>
<li>12:00.- Flex2 (por Joan Garnet)</li>
<li>16:00.- Flash y dispositivos Móviles (por Raul Jiménez y Marcos González) </li>
<li>18:00.-  Sistemas de representación de redes sociales y de información (por Alex Sánchez)</li>
</ul>
<li>Domingo 20 de Agosto:</li>
<ul>
<li>11:00.- AJAX (por Marc Palau)</li>
</ul>
</ul>
<p>Para obtener más información, puede visitarse la web del evento:<br />
<a href="http://www.subflash.com/talleres/2006">http://www.subflash.com/talleres/2006</a></p>
]]></description>
		<link>http://www.esmmug.com/go/332</link>
			</item>
	<item>
		<title>Algo está cambiando en Galicia</title>
		<description><![CDATA[<p>Algo está cambiando, y es que parece dificil juntar a un número importante de profesionales y ponerlos de acuerdo. Esto está sucediendo en Galicia, y es que varios profesionales del sector del Diseño, están creando la Asociación de Diseñadores Gráficos de Galicia.<!--more-->Este mismo fin de semana en Lugo, se le dará nombre a la Asociación, se aprobarán los estatutos y se elegirá a la junta directiva.</p>
<p>Uno de los objetivos de esta Asociación es lograr lo que su homónima en Cataluña ya tiene, la creación del Colegio Profesional de Diseñadores Gráficos Gallegos. Dificil tarea desde luego, pero ganas no faltan.</p>
<p>Como uno de los responsables del proyecto, si resides y/o trabajas en Galicia y te dedicas al diseño, puedes contactar conmigo por email (carlos@cmacias.com) para recibir más información o participar en el proyecto.
</p>
]]></description>
		<link>http://www.esmmug.com/go/331</link>
			</item>
	<item>
		<title>Filtrado no destructivo con Spry</title>
		<description><![CDATA[<p>La ultima versi&oacute;n de Spry (1.1) tiene entre sus novedades la posibilidad de utilizar un filtrado no destructivo, lo que permite permite filtrar datos de forma no permanente, evitando con ello la necesidad de volver a cagar los datos de la fuente xml, tal y como suced&iacute;a hasta ahora.<br />
<!--more--><br />
Spry ofrece ahora ambas posibilidades: Utilizar un filtro destructivo (de manera que los datos no seleccionados dejar&aacute;n estar disponibles hasta que se vuelvan a solicitar al fichero xml) y otro no destructivo, en el que los datos persisten sin ecesidad de recargar.</p>
<p>Para el primero de los casos se mantiene la funci&oacute;n filterData(), que ya exist&iacute;a en las versiones anteriores de Spry. Ahora, se a&ntilde;ade la funci&oacute;n filter(), que permite realizar filtrados en los que los datos no utilizados no desaparecen, sino que se mantienen (de ah&iacute; su definici&oacute;n de filtrado no destructivo).</p>
<p>Este tutorial es un ejemplo del uso de esta funci&oacute;n: Se trata de crear un campo de texto en el queiremos escribiendo texto y que de forma din&aacute;mica, ir&aacute; realizando un filtrado de los datos, los cuales se actualizar&aacute;n en el documento sin necesidad de recargar. Un ejemplo en la vida real puede ser el quehace Google para ir mostrando posibilidades de b&uacute;squeda que coincidan con el texto escrito. Nuestr caso pr&aacute;ctico mostrar&aacute; un listado de productos de Adobe. A medida que escribamos en el campo de texto, se ir&aacute;n eliminando aquellos cuyo nombre no coincida con lo escrito.</p>
<p>El ejemplo en funcionamiento est&aacute; disponible <a href="http://www.esmmug.com/demos/spry/filtrado/index.html">haciendo click aqu&iacute;</a>.<br />
Pusa aqu&iacute; para ver el archivo products.xml.<br />
<a href="http://www.esmmug.com/demos/spry/filtrado/filtrado.zip">Puedes descargarte el ejemplo completo y listo para funcionar desde aqu&iacute;</a>.</p>
<p>Nuestro primer caso, como en toda aplicaci&oacute;n que use Spry, es definir el namespace y llamar a los 2 archivos js (xpath.js y SpryData.js) necesarios. Debemos recordar que a partir de esta versi&oacute;n 1.1, la sintaxis difiere de la utilizada en versiones anterios (para conseguir la validaci&oacute;n como xhtml):</p>
<pre>
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
 &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xmlns:spry=&quot;http://ns.adobe.com/spry&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;filtrado no destructivo&lt;/title&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot; src=&quot;includes/xpath.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot; src=&quot;includes/SpryData.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot;&gt;
var dsProductos = new Spry.Data.XMLDataSet(&quot;products/products.xml&quot;, &quot;products/product&quot;);
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form&gt;
Buscar Producto :
&lt;input type=&quot;text&quot; id=&quot;filterTF&quot; /&gt;
&lt;/form&gt;
&lt;div id=&quot;productsdiv&quot; spry:region=&quot;dsProductos&quot;&gt;
&lt;ul&gt;
&lt;li spry:repeat=&quot;dsProductos&quot;&gt;{name}&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Hasta ahora, simplemente hemos creado una regi&oacute;n repetida (con la etiqueta li) que nos mostrar&aacute; todos los productos obtenidos del fichero xml. Nuestro siguiente paso ser&aacute; a&ntilde;adir una funci&oacute;n que realice el filtrado.<br />
<!--nextpage--><br />
En la primera parte creamos el documento b&aacute;sico que inclu&iacute;a una regi&oacute;n deonde se listaban todos los productos. En este segundo paso vamos a a&ntilde;adir las funciones necesarias para ejecutar el filtrado.<br />
El primer paso es crear la funci&oacute;n principal. La a&ntilde;adiremos dentro de nuestro encabezado:</p>
<pre>
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;title&gt;filtrado no destructivo&lt;/title&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot; src=&quot;xpath.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot; src=&quot;SpryData.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot;&gt;
var dsProductos = new Spry.Data.XMLDataSet(&quot;products.xml&quot;, &quot;products/product&quot;)
var filtrarProductos = function(dataSet, row, rowNumber){
 //capturamos el contenido del cuadro de texto
var elTexto=document.getElementById(&#039;filterTF&#039;).value;
//Creamos la expresion regular con el texto del campo
var miPattern=new RegExp(elTexto,&quot;i&quot;);
//si el campo &#039;name&#039; coincide con la expresion
if (row[&quot;name&quot;].search(miPattern) != -1){
return row;&nbsp;&nbsp;//incluir fila en el listado
}else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return null; //rechazar fila del listado
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}
&nbsp;
&lt;/script&gt;
&lt;/head&gt;
</pre>
<p>No es necesario preocuparse de los 3 par&aacute;metros definidos (dataSet, row, rowNumber), ya que Spry los enviar&aacute; autom&aacute;ticamente a la funci&oacute;n. Lo importante es el contenido de la misma y, sobre todo las 2 primeras lineas, ya que Spry se encarga del resto, incluido el bucle por todas las filas del dataset. No es necesario utilzar los </p>
<p>Finalmente, s&oacute;lo nos queda llamar al m&eacute;todo filter() de Spry.<br />
<!--nextpage--><br />
Ya tenemos todos los elementos necesarios para filtrar los datos, s&oacute;lo nos queda llamar al m&eacute;todo filter() de Spry para que todo funcione.<br />
filter() es un m&eacute;todo vinculado a un dataset que necesita como par&aacute;metro el nombre de la funci&oacute;n encargada de manejar el filtrado. En nuestro caso, ya tenemos ambos elementos: dsProductos y filtrarListado(). Por tanto, el c&oacute;digo ser&aacute;:</p>
<pre>
dsProductos.filter(filtrarProductos);
</pre>
<p>La pregunta ahora es: &iquest;d&oacute;nde colocamos el filtro? La respuesta es sencilla: Vamos a invocarlo cada vez que el usuario escriba algo en el campo de texto:</p>
<pre>
&lt;input type=&quot;text&quot; id=&quot;filterTF&quot; onkeyup=&quot;dsProductos.filter(filtrarProductos);&quot; /&gt;
</pre>
<p>y hemos terminado: Spry se encarga de todo lo dem&aacute;s: recorre el dataset, recupera los valores que coincidan y regenera el listado de elementos li con los valores que coincidad (ya que las regiones creadas por Spry (en nuestro caso, <i>div id=&#8221;productsdiv&#8221; spry:region=&#8221;dsProductos&#8221;</i>) ya incluyen un observer que comprueba las modificaciones y act&uacute;a en consecuencia.</p>
<p>Resumiendo los pasos:</p>
<ol>
<li>Insertar el namespace y los v&iacute;nculos a los archivos js</li>
<li>Crear la regi&oacute;n y a&ntilde;adir el repeat necesario para mostrar todos los elementos.</li>
<li>Escribir una funci&oacute;n que genere el filtrado</li>
<li>Invocar dicha funci&oacute;n mediante el m&eacute;todo filter() del dataset </li>
</ol>
<p>Como pod&eacute;is observar, generar filtrados din&aacute;micos con Spry es una tarea sencilla y que apenas necesita 9 lineas de c&oacute;digo extra para funcionar.</p>
<p><a href="http://www.esmmug.com/demos/spry/filtrado/filtrado.zip">Descargar Ficheros de ejemplo</a>.<br />
<a href="http://www.esmmug.com/demos/spry/filtrado/index.html">Ver ejemplo 1 en funcionamiento</a><br />
<a href="http://www.esmmug.com/demos/spry/filtrado/index2.html">Ver ejemplo 2 en funcionamiento</a>
</p>
]]></description>
		<link>http://www.esmmug.com/go/330</link>
			</item>
	<item>
		<title>Primer meeting de MAUG</title>
		<description><![CDATA[<p>MAUG (Mediterranean Adobe User Group) celebra su primer meeting en Tarragona el pr&oacute;ximo  d&iacute;a 17 de Junio a las 10:30 horas.<br />
<!--more--><br />
El lugar elegido es el <a href="http://www.palaucongrestgna.com/">Palacio Ferial y de Congresos de Tarragona</a>,  con un doble programa:</p>
<p>11.00 L.O.P.D por AdhecOnline.<br />
11.30 Dreamweaver dinámico exclusivo para diseñadores. Dictado por Alejandro Rodríguez, manager del MAUG.</p>
<p>Para saber más del grupo y del evento, puede visitarse su web: <a href="http://www.maug.es">http://www.maug.es</a></p>
<p>Alejandro Rodriguez (aka Simar) es el manager de este nuevo grupo y anteriormente había colaborado con el grupo de usuarios de Argentina. En esta nueva etapa, cuenta como co-managers con Pedro Lopez Pe&ntilde;a y Sergio de Valais.
</p>
]]></description>
		<link>http://www.esmmug.com/go/329</link>
			</item>
	<item>
		<title>Interakt actualiza sus extensiones</title>
		<description><![CDATA[<p><a href="http://www.interaktonline.com">Interak</a>, la empresa que desarrolla extensiones para Dreamweaver tales como KTML, MX Kollection, IMpakt o Phakt acaba de actualizar sus extensiones evitando así incompatibilidades con la nueva actualización de Dreamweaver 8.0.2.<br />
<!--more--><br />
Para acceder a estas actualizaciones es necesario tener cuenta en la web de interakt, y acceder a la zona privada donde obtendremos un listado de las extensiones actualizadas.</p>
<p><a href="http://www.interaktonline.com/Support/Knowledgebase/Technote/Details/217/15/Working+with+the+latest+InterAKT+Extensions+Dreamweaver+8.0.2+compatible.html">Más información</a> en la propia web de <a href="www.interaktonline.com">interakt</a>
</p>
]]></description>
		<link>http://www.esmmug.com/go/328</link>
			</item>
	<item>
		<title>Novedades en Dreamweaver Updater 8.0.2</title>
		<description><![CDATA[<p>La actualizaci&oacute;n a Dreamweaver tiene algunas novedades que afectan a la interfaz de los recordsets y sobre todo al c&oacute;digo para el modelo de servidor PHP/MySQL<br />
<!--more--><br />
La nueva ventana para el modo avanzado de creacion de recordsets presenta variaciones respecto a la anterior.</p>
<p>Si hasta ahora, la definici&oacute;n de par&aacute;metros que crear&aacute;n de forma din&aacute;mica la consulta SQL era un poco complicada de entender, la nueva apariencia mejora la comprensi&oacute;n y edici&#038;ooacute de los mismos, apareciendo a un lado las variables y a su derecha, los par&aacute;metros de las mismas:<br />
<img id="image326" src="http://www.esmmug.com/wp-files/2006/05/802_updater_image01.gif" alt="nuevo recordset" /></p>
<p>Ahora, al pulsar sobre el bot&oacute;n &#8216;Edit&#8230;&#8217; se nos abrir&aacute; una nueva ventana donde definir los valores del par&aacute;metro (hasta ahora se realizaba directamente en la ventana del recordset):<br />
<img id="image327" src="http://www.esmmug.com/wp-files/2006/05/802_updater_image02.gif" alt="Ventana Edicion variables" /></p>
<p>De los campos de texto, el que supone una novedad es el que nos solicita el tipo de valor que aceptar&aacute; el par&aacute;metro (String, Numeric o Date). Es importante seleccionar el correcto porque Dreamweaver utiliza nuevo c&oacute;digo para el recordset con la intenci&oacute;n de prevenir las inyecciones SQL.</p>
<p>No vamos a escribir todo el nuevo c&oacute;digo; simplemente indicaremos que es muy similar al utilizado hasta ahora para los comportamientos de servidor &#8216;insertar datos&#8217; y &#8216;actualizar datos&#8217;. A&ntilde;ade una funci&oacute;n GetSQLValueString() que identifica el tipo de valor para pas&aacute;rselo a la consulta (si el valor es numeric s&oacute;lo aceptar&aacute; n&uacute;meros, si es String, envolver&aacute; el texto en comillas&#8230;)</p>
<p>L&oacute;gicamente, aquellos recordsets basados en las versiones anteriores no ser&aacute; correctamente interpretados en el panel de server behaviors, ya que &eacute;stos utilizaban un c&oacute;digo diferente.
</p>
]]></description>
		<link>http://www.esmmug.com/go/325</link>
			</item>
	<item>
		<title>Adobe Live 2006: 8 de Junio en Barcelona</title>
		<description><![CDATA[<p>Adobe Live! es un evento internacional que se viene celebrando anualmente en el Reino Unido, Francia, Alemania y Holanda y este año 2006, por primera vez, estará también en España. <b>Cerca de 30 sesiones distintas y una zona de exposición permanente</b>, para que tu elijas la guerra que más te interesa. Diseño para impresión, Web, Video, Fotografía o incluso telefonía móvil. ¡No te pierdas la Revolución el d&iacute;a 8 de Junio<br />
<!--more--></p>
<p>En Adobe Live! - podrás conocer de la mano de técnicos expertos o de visionarios y emprendedores las últimas tendencias, tecnologías y armas que te ayudarán a ganar la batalla de la creatividad.</p>
</p>
<ul>
<li>Ven a descubrir <b>Creative Suite 2</b>, <b>Macromedia Studio 8</b> y <b>Production Studio</b> - desde una perspectiva diferente, conoce los secretos y los trucos mejor guardados que te ayudarán a conseguir mejores resultados, más rápidamente.</li>
<li><b>Charlas que te inspiren</b>: De poco sirven las herramientas sin una buena idea. Queremos ayudarte a encontrar la inspiración con ideas innovadoras y arriesgadas, de la mano de personas que, como tú, han ganado ya algunas batallas.</li>
<li><b>Trucos y Técnicas</b>: Sesiones lideradas por reconocidos especialistas de producto.</li>
<li><b>Sesiones de Partners tecnológicos</b>: Descubre los ordenadores más potentes, las pantallas de última generación, los sistemas de impresión más avanzados, las tabletas más precisas, las cámaras fotográficas con más prestaciones o las soluciones de software que te aportarán las mejores garantias para alcanzar la victoria.</li>
<li><b>Experiencias de usuario</b>: Aprende cómo otros usuarios trabajan, crean, disfrutan y descubren oportunidades de negocio en un mundo competitivo.
</li>
<li><b>Descubre los flujos de trabajo más avanzados e innovadores</b>: Flujos de preimpresión, flujos editoriales, flujos de gestión de color. Deja que tu creatividad fluya de principio a fin y que los procesos no sean un obstáculo para lograr la victoria.
</li>
<li>Aprovecha para intercambiar opiniones con otros profesionales mientras saboreas un café o repones fuerzas con un zumo de frutas. <b>Café y zumos disponibles todo el día</b>.
</li>
</ul>
<p>Las plazas son limitadas. <a href="http://events.adobe.co.uk/events/cgi/register.cgi?country=es&#038;eventid=3338&#038;venueid=3373">¡Inscríbete ahora mismo!.</a>
</p>
]]></description>
		<link>http://www.esmmug.com/go/324</link>
			</item>
	<item>
		<title>Aprendiendo Spry: Mi primera aplicaci&#243;n</title>
		<description><![CDATA[<p>Spry facilita a los no expertos la creaci&oacute;n de aplicaciones web que hagan uso de AJAX. En este art&iacute;culo veremos c&oacute;mo crear una vista maestro/detalle a partir de un archivo XML es realmente sencillo.<br />
<!--more--><br />
Para crear nuestra aplicaci&oacute;n, el primer paso es descargarse los arhcivos que componen Spry de la url <a href="http://labs.adobe.com/technologies/spry/">http://labs.adobe.com/technologies/spry/</a></p>
<p>De todos los archivos que encontramos, solo necesitaremos dos: SpryData.js y xpath.js. Guardaremos ambos en una carpeta (que llamaremos &#8217;scripts) en el directorio de nuestro documento principal.</p>
<p>Crearemos un fichero xml que guarde datos de nuestros productos: productos.xml, que gurdaremos en una carpeta llamada &#8216;xml&#8217;. El c&oacute;digo actual del documento es:</p>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;
&lt;productos&gt;
&nbsp;
&nbsp;&nbsp;&lt;producto&gt;
&nbsp;&nbsp;&lt;nombre&gt;Radiador Solar&lt;/nombre&gt;
&nbsp;&nbsp;&lt;descripcion&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;![CDATA[Aprovecha el calor del sol para calentar tu hogar]]&gt;
&nbsp;&nbsp;&lt;/descripcion&gt;
&nbsp;&nbsp;&lt;precio&gt;99.99&lt;/precio&gt;
&nbsp;&nbsp;&lt;/producto&gt;
&nbsp;
&nbsp;&nbsp;&lt;producto&gt;
&nbsp;&nbsp;&lt;nombre&gt;Nevera Invernal&lt;/nombre&gt;
&nbsp;&nbsp;&lt;descripcion&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;![CDATA[Aprovecha el fr&amp;iacute;o invernal para mantener tu comida]]&gt;
&nbsp;&nbsp;&lt;/descripcion&gt;
&nbsp;&nbsp;&lt;precio&gt;199.99&lt;/precio&gt;
&nbsp;&nbsp;&lt;/producto&gt;
&nbsp;
&nbsp;&nbsp;&lt;producto&gt;
&nbsp;&nbsp;&lt;nombre&gt;Reloj para Dietas&lt;/nombre&gt;
&nbsp;&nbsp;&lt;descripcion&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;![CDATA[Que tu estomago no te enga&amp;ntilde;e: Este reloj te avisar&amp;aacute;
&nbsp;&nbsp;&nbsp;&nbsp; cuando realmente tengas hambre]]&gt;
&nbsp;&nbsp;&lt;/descripcion&gt;
&nbsp;&nbsp;&lt;precio&gt;29.95&lt;/precio&gt;
&nbsp;&nbsp;&lt;/producto&gt;
&nbsp;
&lt;/productos&gt;
</pre>
<p>En Dreamweaver, crearemos un nuevo documento y lo guardaremos como &#8217;spry_sample.html&#8217;.</p>
<p>Al termina estos 2 pasos, nuestra estructura es la siguiente</p>
<p>Carpeta Raiz:</p>
<ul>
<li>spry_sample.html</li>
<li>scripts</li>
<ul>
<li>SpryData.js</li>
<li>xpath.js</li>
</ul>
<li>xml</li>
<ul>
<li>productos.xml</li>
</ul>
</li>
</ul>
<p>Para terminar este primer paso, crearemos en nuestro archivo dos enlaces a los archivos de la carpeta scripts. Nuestro encabezado queda:</p>
<pre>
&lt;head&gt;
&lt;title&gt;Mi primer archivo con spry&lt;/title&gt;
&lt;script type=&quot;text/javascipt&quot; src=&quot;scripts/xpath.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascipt&quot; src=&quot;scripts/SpryData.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
</pre>
<p>(NOTA: Es importante que el primer archivo al que enlacemos sea xpath.js, ya que el segundo, SpryData.js, depende del mismo)<br />
<!--nextpage--><br />
<b>Creando el DataSet</b><br />
Tras haber enlazado ambos archivos procederemos a crear el DataSet.<br />
Por DataSet conocemos el juego de registros que Spry obtiene del archivo xml y que &#8216;dibuja&#8217; de forma virtual una tabla a la que posteriormente tendremos acceso para aplicar filtros, ordenar datos&#8230; Esta es una de las primeras ventajas de Spry: nos genera una presentaci&oacute;n virtual de los datos que nos es familiar donde, en vez de nodos, los datos nos aparecen como campos y filas.</p>
<p>Vamos a crear nuestro DataSet: Despu&eacute;s de las llamadas a los scripts, escribiremos:</p>
<pre>
&lt;head&gt;
&lt;title&gt;Mi primer archivo con spry&lt;/title&gt;
&lt;script type=&quot;text/javascipt&quot; src=&quot;scripts/xpath.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascipt&quot; src=&quot;scripts/SpryData.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!&#45;-
var dsProductos = new Spry.Data.XMLDataSet(&quot;productos.xml&quot;, &quot;productos/producto&quot;)
&#45;-&gt;
&lt;/script&gt;
&lt;/head&gt;
</pre>
<p>Analicemos la l&iacute;nea:<br />
var dsProductos es el nombre con el que definimos nuestro dataset<br />
new Spry.XMLDataSet crea el dataset y necesita 2 par&aacute;metros:</p>
<ul>
<li>var dsProductos es el nombre con el que definimos nuestro dataset    </li>
<li> new Spry.XMLDataSet crea el dataset y necesita 2 par&aacute;metros:
<ul>
<li>Ruta al fichero xml (productos.xml) </li>
<li>Nodo del xml a partir del cual queremos obtener los datos (en nuestro caso &#8216;productos/producto&#8217;). La forma de definirlo es similar a la que utilizamos para indicar la ruta a un arhivo. Como nomra general, se trata&acute;ra del primer nodo que se repite. </li>
</ul>
</li>
</ul>
<p>Por tanto, la declaraci&oacute;n del script indica que hemos creado un dataset, llamado dsProductos, que lee el archivo productos.xml y extrae los datos de cada nodo llamado &#8216;producto&#8217; .</p>
<p>Ya tenemos todo lo necesario en nuestro encabezado. A continuaci&oacute;n crearemos una tabla para listar los productos.<br />
<!--nextpage--><br />
<b>Crear la tabla de Datos</b><br />
A partir de ahora, s&oacute;lo tenemos que centrarnos en el cuerpo de nuestro documento. Para ello, crearemos un bloque div que alojar&aacute; una tabla donde los mostraremos.</p>
<p>En el bloque div, deberemos realizar 2 pasos:</p>
<ul>
<li>indicarle que vamos a utilizar el datasource &#8216;dsproductos&#8217; utilizando el atributo &#8217;spryregion&#8217;</li>
<li>Asignarle una id que nos permita aplicarle un estilo css</li>
</ul>
<p>Este ser&aacute; el c&oacute;digo sobre el que trabajemos:</p>
<pre>
&lt;body&gt;
&lt;div spryregion=&quot;dsProductos&quot; id=&quot;productos&quot;&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>A continuaci&oacute;n, a&ntilde;adiremos una tabla dentro del div donde mostrar el producto y el precio:</p>
<pre>
&lt;body&gt;
&lt;div spryregion=&quot;dsProductos&quot; id=&quot;productos&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;producto&lt;/th&gt;
&lt;th&gt;precio&lt;/th&gt;
&lt;/tr&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;{nombre}&lt;/td&gt;
&lt;td&gt;{precio}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Es decir, para indicar d&oacute;nde debe aparecer cada elemento del archivo xml, s&oacute;lo tenemos que envolver su etiqueta xml correspondiente entre llaves: {nombre} y {precio}.</p>
<p>Si probamos el c&oacute;digo anterior s&oacute;lo nos aparecer&aacute; el primer  producto de nuestro xml: en las 2 im&aacute;genes inferiores pod&eacute;is ver c&oacute;mo aparece dentro de Dreamweaver y c&oacute;mo se ve en el navegador:<br />
<img id="image320" src="http://www.esmmug.com/wp-files/2006/05/spry_img2.gif" alt="spry1" /><br />
<img id="image321" src="http://www.esmmug.com/wp-files/2006/05/spry_img1.gif" alt="spry2" /></p>
<p> El siguiente paso ser&aacute; crear una regi&oacute;n repetida que nos muestre todos los productos. Para ello, Spry ofrece 2 posibilidades, pero aqu&iacute; utilizaremos la m&aacute;s sencilla: El atributo <b>spryrepeatchildren</b>.<br />
Este atributo, asignado a una etiqueta, hace que todo los elementos que se encuentran dentro de ella se repitan tantas veces como elementos devuelva el archivo xml. En nuestro caso, tenemos una tabla con un elemento TBODY por lo que, para repetir sus filas, solo tenemos que a&ntilde;adir dicho atributo a la TBDODY, lo que har&aacute; que cada fila de su interior se repita tantas veces como elementos tenga el xml:</p>
<pre>
&lt;body&gt;
&lt;div spryregion=&quot;dsProductos&quot; id=&quot;productos&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;producto&lt;/th&gt;
&lt;th&gt;precio&lt;/th&gt;
&lt;/tr&gt;
&lt;tbody spryrepeatchildren=&quot;dsProductos&quot;&gt;
&lt;tr&gt;
&lt;td&gt;{nombre}&lt;/td&gt;
&lt;td&gt;{precio}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Al ejecutarlo en el navegador, nos aparecer&aacute; la tabla que hemos creado:<br />
<img id="image322" src="http://www.esmmug.com/wp-files/2006/05/spry_img3.gif" alt="spry3" /><br />
Nuestro siguiente paso ser&aacute; crear otro bloque donde se nos muestre la descripci&oacute;n del producto<br />
<!--nextpage--><br />
<b>Creando el bloque detalle</b><br />
Hasta ahora hemos creado los enlaces a los archivos js utilizados por spry, hemos creado una tabla donde mostrar los datos y hemos insertado la etiqueta <strong>spryrepeatchildren</strong> para repetir los resultados. El siguiente pas&oacute; ser&aacute; a&ntilde;adir un nuevo div donde mostrar la descripci&oacute;n del producto seleccionado en dicha tabla.</p>
<p>Hemos visto como Spry utiliza el atributo &#8217;spryregion&#8217; para indicar una regi&oacute;n donde vamos a mostrar datos del xml. Para indicar un bloque donde mostrar un registro concreto, Spry utiliza el atributo &#8217;spraydetailregion&#8217; que lleva como valor (de nuevo) el dataset del que obtenemos los datos. Para llamar al campo que queremos mostrar, utilizamos de nuevo las llaves {}:</p>
<pre>
&lt;div sprydetailregion=&quot;dsProductos&quot;&gt;{descripcion}&lt;/div&gt;
</pre>
<p>Nuestro cuerpo tiene ahora este aspecto:<br />
<img id="image323" src="http://www.esmmug.com/wp-files/2006/05/spry_img4.gif" alt="spry4" /></p>
<p>Deberemos ahora crear los enlaces desde cada art&iacute;culo para que se nos muestre el detalle cuando pulsamos sobre el mismo. Spry utiliza el m&eacute;todo <b>nombreDataSet.setCurrentRow(&#8217;{ds_RowID}&#8217;)</b>, donde s&oacute;lo tendremos que cambiar nomBreDataSet por el nombre del nuestro. Nuestro documento ya es 100% operativo:</p>
<pre>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Mi primer archivo con spry&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/xpath.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/SpryData.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var dsProductos = new Spry.Data.XMLDataSet(&quot;xml/productos.xml&quot;, &quot;productos/producto&quot;)
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div spryregion=&quot;dsProductos&quot; id=&quot;productos&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;producto&lt;/th&gt;
&lt;th&gt;precio&lt;/th&gt;
&lt;/tr&gt;
&lt;tbody spryrepeatchildren=&quot;dsProductos&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href=&quot;JavaScript:;&quot; onclick=&quot;dsProductos.setCurrentRow({ds_RowID})&quot;&gt;{nombre}&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;{precio}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div sprydetailregion=&quot;dsProductos&quot;&gt;{descripcion}&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Para terminar, el encabezado de la tabla nos permitir&aacute; ordenar los datos por nombre o por precio<br />
<!--nextpage--><br />
<b>Ordenar Datos</b><br />
Nuestro documento ya est&aacute; operativo, pero vamos a a&ntilde;adir un extra: vamos a convertir los encabezados (nombre y precio) en enlaces que nos permitan ordenar los datos del xml seg&uacute;n una u otra columna.<br />
Spry a&ntilde;ade un m&eacute;todo: <b>nombreDataSet.sort(&#8217;nombreDelCampo&#8217;)</b>, donde nombreDataSet equivale al dataset que estamos utilizando y nombreDelCampo indica el campo a utilizar para ordenar:</p>
<pre>
&lt;body&gt;
&lt;div spryregion=&quot;dsProductos&quot; id=&quot;productos&quot;&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a href=&quot;JavaScript:;&quot; onclick=&quot;dsProductos.sort(&#039;nombre&#039;)&quot;&gt;producto&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;JavaScript:;&quot; onclick=&quot;dsProductos.sort(&#039;precio&#039;)&quot;&gt;precio&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tbody spryrepeatchildren=&quot;dsProductos&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href=&quot;JavaScript:;&quot; onclick=&quot;dsProductos.setCurrentRow({ds_RowID})&quot;&gt;{nombre}&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;{precio}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div sprydetailregion=&quot;dsProductos&quot;&gt;{descripcion}&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Por defecto, el m&eacute;todo sort() considera la columna como texto, por lo que, al intentar ordenar un campo num&eacute;rico la ordenaci&oacute;n ser&aacute; equivocada (comenzar&aacute; por los n&uacute;meros que comiencen por 1, luego por 2&#8230; independientemente de la cantidad: 1200 aparecer&aacute; por delante de 200)</p>
<p>C&oacute;mo solucionarlo? S&oacute;lo es necesario indicar que nuestra columna va a contener datos num&eacute;ricos. Para ellos deberemos volver al encabezado y utilizar el m&eacute;todo setColumnType(&#8221;columna&#8221;,&#8221;tipo&#8221;). Los dos tipos aceptados por sort() son &#8216;number&#8217;, &#8217;string&#8217; y &#8216;date&#8217;:</p>
<pre>
&lt;title&gt;Mi primer archivo con spry&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/xpath.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/SpryData.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!&#45;-
var dsProductos = new Spry.Data.XMLDataSet(&quot;xml/productos.xml&quot;, &quot;productos/producto&quot;);
dsProductos.setColumnType(&quot;precio&quot;, &quot;number&quot;);
&#45;-&gt;
&lt;/script&gt;
&lt;/head&gt;
</pre>
<p>Y hemos terminado. <a href="http://www.esmmug.com/archivos/spry_demo.zip">Hemos preparado los archivos necesarios en un fichero zip listo para descargar y utilizar &ugrave;lsando aqu&iacute;</a>. No es necesario utilzar un servidor de prueba (En este caso,  Internet Explorer mostrar&aacute; la advertencia de contenido bloqueado).</p>
<p> <a href="http://www.esmmug.com/demos/spry_demo/index.html">Tambi&eacute;n pod&eacute;is ver el ejemplo que hemos creado pulsando aqu&iacute;</a>.</p>
]]></description>
		<link>http://www.esmmug.com/go/319</link>
			</item>
</channel>
</rss>
