<?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"
	>

<channel>
	<title>Maestros del Web &#187; Juan Manuel Lemus</title>
	<atom:link href="http://www.maestrosdelweb.com/author/juan-manuel-lemus/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maestrosdelweb.com</link>
	<description>Un espacio para los entusiastas del web</description>
	<pubDate>Fri, 05 Sep 2008 14:24:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Escribiendo aplicaciones sociales con Google OpenSocial</title>
		<link>http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/</link>
		<comments>http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 18:00:14 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/</guid>
		<description><![CDATA[Una aplicación social es una forma de Google Gadget que contiene el soporte para la API JavaScipt de OpenSocial; que se centra en las personas, permitiendo compartir información personal y de actividades con sus amigos y conocidos.

Siguiendo con nuestra serie de artículos sobre Google OpenSocial la cual inicio con OpenSocial: introducción a la API social [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Una aplicación social es una forma de Google Gadget que contiene el soporte para la API JavaScipt de OpenSocial; que se centra en las personas, permitiendo compartir información personal y de actividades con sus amigos y conocidos.</span></p>
<p><span id="more-4027"></span></p>
<p>Siguiendo con nuestra serie de artículos sobre Google OpenSocial la cual inicio con <a href="http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/">OpenSocial: introducción a la API social de Google</a> y <a href="http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/">Primeros pasos con OpenSocial</a> ahora aprenderemos un poco más sobre las aplicaciones sociales con Google OpenSocial.</p>
<p>Para escribir una aplicación social, es necesario que: tengamos acceso a un contenedor que soporte OpenSocial, como <a href="http://Orkut.com">Orkut.com</a> y un conocimiento básico sobre el modo de desarrollo de un Google Gadget.</p>
<p>Todas las llamadas a la API de OpenSocial son asíncronas y requerirán de un soporte del lado del servidor para recibir y enviar información sobre las consultas.</p>
<h3>Importando la librería OpenSocial:</h3>
<div class="codigo">
<pre>&lt;ModulePrefs title="Title of Your Application"&gt;
  &lt;Require feature="opensocial-0.5"/&gt;
&lt;/ModulePrefs&gt;</pre>
</div>
<p>Agregamos como parámetro <code>FEATURE = “OPENSOCIAL-0.5”</code> a la etiqueta <strong>REQUIRE</strong>. Un ejemplo sencillo: listando amigos.</p>
<p>Para recibir información debemos crear un objeto <strong>DataRequest</strong> mediante la función <code>opensocial.newDataRequest()</code>. Una vez creado utilizamos la función <code>DataRequest.add(request)</code> para definir cada tipo de información que queremos recibir.  </p>
<p>Después de agregar las petición individuales, procedemos a invocar <code>DataRequest.send(callback)</code>. El parámetro de la función indica la función que será ejecutada una vez que se haya recibido la información del servidor. La función toma un parámetro <strong>DataResponse</strong>, que es el resultado de la petición:  </p>
<div class="codigo">
<pre>function onLoadFriends(dataResponse) {     // do something with the dataResponse   }
 /**
  * Request for friend information when the page loads.
  */
  function getData() {
    document.getElementById('message').innerHTML = 'Requesting friends...';
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
    req.add(req.newFetchPeopleRequest ('VIEWER_FRIENDS'), 'viewerFriends');
    req.send(onLoadFriends);
  };</pre>
</div>
<p>El último parámetro en la función <code>newFetch*Request()</code> es una variable utilizada para recibir la información de la petición.  OpenSocial define los siguientes roles:</p>
<ul>
<li><strong>Viewer: </strong>el usuario autenticado en el navegador.</li>
<li><strong>Owner:</strong> el usuario al que le pertenece el Gadget en cuestión.</li>
<li><strong>Friends:</strong> usuarios a los que el propietario o visor han agregado a la lista de contactos.</li>
</ul>
<p>Ahora, veremos las instrucciones de código dentro de la función <code>onLoadFriends()</code>:</p>
<div class="codigo">
<pre>/**
  * Parses the response to the friend information request and generates
  * html to list the friends by their display name.
  *
  * @param {Object} dataResponse Friend information that was requested.
  */
  function onLoadFriends(dataResponse) {
    var viewer = dataResponse.get('viewer').getData();
    var html = 'Friends of ' + viewer.getDisplayName();
    html += ':&lt;br&gt;&lt;ul&gt;';
    var viewerFriends = dataResponse.get('viewerFriends').getData();
    viewerFriends.each(function(person) {
      html += '&lt;li&gt;' + person.getDisplayName();
    });
    html += '&lt;/ul&gt;';
    document.getElementById('message').innerHTML = html;
  };</pre>
</div>
<p>El parámetro <strong>dataResponse</strong>  pasado en la función contiene la información de la respuesta del servidor.  La función <code>DataResponse.get(key)</code> regresa cada uno  de las peticiones individuales realizadas. El ejemplo completo quedaría de la siguiente manera:</p>
<div class="codigo">
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;Module&gt;
 &lt;ModulePrefs title="List Friends Example"&gt;
   &lt;Require feature="opensocial-0.5"/&gt;
 &lt;/ModulePrefs&gt;
 &lt;Content type="html"&gt;

 &lt;![CDATA[

 &lt;script type="text/javascript"&gt;

 /**
  * Request for friend information when the page loads.
  */
  function getData() {
    document.getElementById('message').innerHTML = 'Requesting friends...';
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
    req.add(req.newFetchPeopleRequest ('VIEWER_FRIENDS'), 'viewerFriends');
    req.send(onLoadFriends);
  };

 /**
  * Parses the response to the friend information request and generates
  * html to list the friends along with their display name and picture.
  *
  * @param {Object} dataResponse Friend information that was requested.
  */
  function onLoadFriends(dataResponse) {
    var viewer = dataResponse.get('viewer').getData();
    var html = 'Friends of ' + viewer.getDisplayName();
    html += ':&lt;br&gt;&lt;ul&gt;';
    var viewerFriends = dataResponse.get('viewerFriends').getData();
    viewerFriends.each(function(person) {
      html += '&lt;li&gt;' + person.getDisplayName() + '&lt;/li&gt;';
    });
    html += '&lt;/ul&gt;';
    document.getElementById('message').innerHTML = html;
  };
  _IG_RegisterOnloadHandler(getData);

  &lt;/script&gt;
  &lt;div id="message"&gt; &lt;/div&gt;
  ]]&gt;
  &lt;/Content&gt;
&lt;/Module&gt;</pre>
</div>
<h3>Trabajando con información persistente:</h3>
<p>OpenSocial soporta guardar y obtener información por usuario y por gadget.  La información almacenada siempre será en formato de cadena de texto, que puede ser tratada como una cadena de texto en formato JSON.</p>
<h3>Actividades:</h3>
<p><a href="http://code.google.com/apis/opensocial/">OpenSocial</a> también permite compartir información sobre eventos y actividades.  Esto podría expresearse como un activity stream; un feed en donde cada entrada representa un evento. El uso de OpenSocial abre una nueva gama de aplicaciones de colaboración de usuarios en línea y aumenta las características de las aplicaciones.  </p>
<p>El uso de OpenSocial abre una nueva gama de aplicaciones de colaboración de usuarios en línea y aumenta las características de las aplicaciones.  Esto es solo una pequeñas reseñas del potencial de esta nueva herramienta.  Para mayor información pueden consultar <a href="http://code.google.com/apis/opensocial/">el sitio</a> del proyecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Primeros pasos con OpenSocial</title>
		<link>http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/</link>
		<comments>http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 18:16:35 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/</guid>
		<description><![CDATA[OpenSocial es una API sencilla de utilizar, aún en fase de pruebas, pero con un gran potencial de conectar a todos en todas partes. Para entender el impacto de OpenSocial debemos analizar desde el punto de vista de un usuario de Internet.  Qué es lo que realmente quiere una persona “común” cuando usa Internet. [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">OpenSocial es una API sencilla de utilizar, aún en fase de pruebas, pero con un gran potencial de conectar a todos en todas partes. Para entender el impacto de OpenSocial debemos analizar desde el punto de vista de un usuario de Internet.  Qué es lo que realmente quiere una persona “común” cuando usa Internet.  </span></p>
<p><span id="more-4021"></span></p>
<p>Fuera del ámbito de desarrollo podemos afirmar que la gran mayoría de las personas quieren conectarse con otros, crear grupos, compartir aficiones y encontrar información de su interés. El punto de afirmación es el gran éxito de las <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-tanto-saben-las-redes-sociales-de-nosotros/">redes sociales</a>.  La mayoría de personas quiere compartir con sus amigos.  La genialidad de las aplicaciones en estos grupos reside en que tan sencillo y potente me permite conocer lo que quiero saber.</p>
<p>Ahora bien, volviendo al objeto de nuestro estudio, después del repaso del por qué hacer aplicaciones sociales, veamos los cimentos de <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>.  Como comentamos en el <a href="http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/">artículo anterior de la serie</a>, OpenSocial permite el uso de un conjunto de funciones especiales para crear aplicaciones sociales que podrán interoperar con muchos sitios que adopten esta misma API (que son ya varios e importantes, exceptuando <a href="http://www.facebook.com/">FaceBook</a>). </p>
<p>Hay dos maneras de accesar a la API de OpenSocial: utilizando <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript</a> del lado del cliente o <code>RESTful?</code> del lado del servidor.</p>
<h3>JavaSript API:</h3>
<p>La API de JavaScript utiliza <a href="http://code.google.com/apis/opensocial/docs/javascript/reference/">opensocial.*namespaces</a> y permite el acceso a tres principales áreas:</p>
<ul>
<li>Gente: información sobre una determinada persona y sus relaciones con otros.</li>
<li>Actividades: permite publicar y ver actualizaciones de lo que la “gente” esta haciendo.</li>
<li>Persistencia: un simple arreglo asociativo independiente del servidor.</li>
</ul>
<p>Algunas de las ideas del uso de esta serie de funciones son:</p>
<ul>
<li>Construir aplicaciones que no necesiten ser almacenadas en nuestro servidor.</li>
<li>Construir aplicaciones que incluyan componentes almacenados en el servidor para tareas de sincronización.</li>
<li>Crear un nuevo conjunto de aplicaciones con nuevas funcionabilidades para nuestros sitios.</li>
<li>Escribir una aplicación que pueda “correr” en varios sitios.</li>
</ul>
<p>La API OpenSocial para JavaScript está diseñada para utilizar tecnologías estándar basadas en el Web, permitiendo utilizar librerías desarrollas en lenguaje JavaScript estándar.  El paquete incluye un sistema completo de manejo de funciones asíncronas para <a href="http://www.maestrosdelweb.com/editorial/ajax/">AJAX</a>.</p>
<p>El paquete <code>RESTful</code> provee funciones complementarias a las funciones de la API JavaScript.  La herramienta permite entre otras cosas:</p>
<ul>
<li>Interacciones del lado del servidor basadas en el protocolo <a href="http://www.ietf.org/rfc/rfc4287.txt">RESTful AtomPub</a>.</li>
<li>Auntenticación vía <a href="http://oauth.net/core/1.0/">OAuth</a> </li>
</ul>
<h3>Usando la API de OpenSocial:</h3>
<p>Otras consideraciones adicionales son listadas en la página del <a href="http://code.google.com/apis/opensocial/">proyecto OpenSocial</a>.  Entre las más importantes destacan:</p>
<ul>
<li>Las aplicaciones son diseñadas de la misma manera de los Google Gadgets; mediante el edtior de texto favorito o utilizando Google Gadget Editor.</li>
<li>OpenSocial utiliza JavaScript, <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML </a>y <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a> estándar; no es necesario el uso de plug-ins.</li>
<li>Nuestras aplicaciones pueden ser almacenadas en los servidores de Google (según determinadas políticas) o en nuestros propios servidores.</li>
<li>Es posible embeber <a href="http://www.maestrosdelweb.com/editorial/flash/">Flash</a> en nuestras aplicaciones sociales.</li>
<li>Para el desarrollo podemos utilizar librerías JavaScript como Dojo, Prototype, JQuery, GWT o la que nosotros consideremos más apropiada. Igualmente, podemos utilizar lenguajes de programación del lado del servidor como <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby on Rails</a>, Java, etc.</li>
</ul>
<h3>Primer ejemplo, creando un Google Gadget:</h3>
<p>Como mencionamos anteriormente, las aplicaciones sociales están basadas en la misma tecnología que utilizan los Google Gadgets.  Ahora, veamos el primer ejemplo de como crear un simple Gadget:</p>
<div class="codigo">
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;Module&gt;
  &lt;ModulePrefs title="hello world example" /&gt;
  &lt;Content type="html"&gt;
     &lt;![CDATA[
       Hello, world!
     ]]&gt;

  &lt;/Content&gt;
&lt;/Module&gt;</pre>
</div>
<p>Algunas consideraciones sobre este ejemplo son:</p>
<ul>
<li>Un Google Gadget está desarrollado en lenguaje XML.  La primera línea denota este punto y debe  estar siempre presente en todo documento.</li>
<li>La etiqueta MODULE indica que el archivo contiene un Gadget.</li>
<li>La etiqueta MODULEPREFS contiene información sobre el Gadget como título, descripción, autor, etc.</li>
<li>La línea &lt;CONTENT TYPE = “HTML”&gt; indica que el Gadget contiene información en formato HTML.</li>
<li>Lo siguiente es el cuerpo del Gadget en formato HTML, predefinido con la clausura CDATA utilizada en documentos XML.</li>
</ul>
<p>Para obtener más información sobre Google Gadgets puedes vistar la página del proyecto en <a href=" http://code.google.com/apis/gadgets/docs/gs.html">Google Code</a>. En el <a href="http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/">último artículo</a> de la serie, se tratará exclusivamente de la creación de una aplicación social utilizando Google OpenSocial.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OpenSocial: introducción a la API social de Google</title>
		<link>http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/</link>
		<comments>http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 16:05:53 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[APIs]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[opensocial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/</guid>
		<description><![CDATA[La tan famosa Web 2.0 se cimenta en la interacción del usuario a la creación de contenidos y servicios que cada vez más; ofrecen a los navegantes poder interactuar con otras personas, compartir aficiones, ideas, deseos e información personal.  La guerra de las redes sociales a tomado un nuevo rumbo; ahora ganará el que [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">La tan famosa <a href="http://www.maestrosdelweb.com/editorial/web2/">Web 2.0</a> se cimenta en la interacción del usuario a la creación de contenidos y servicios que cada vez más; ofrecen a los navegantes poder interactuar con otras personas, compartir aficiones, ideas, deseos e información personal.  La guerra de las redes sociales a tomado un nuevo rumbo; ahora ganará el que sepa compartir.</span><span id="more-3826"></span></p>
<p><img src='http://www.maestrosdelweb.com/images/opensocial.jpg' alt='Open social' style="float:right;padding:5px" />Todos conocemos a más de una red social de gran éxito.  En la actualidad la disputa por el primer lugar está con las <a href="http://www.maestrosdelweb.com/editorial/redessociales/">redes sociales</a> <a href="http://www.facebook.com">FaceBook</a> y <a href="http://MySpace.com">MySpace</a> a la cabeza y Google se ha sumado lanzando <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> que no es una nueva red social, si no una plataforma de desarrollo, que permite a los sitios sociales administrar una API para conocer los perfiles de sus usuarios en otros sitios y <a href="http://www.maestrosdelweb.com/editorial/redessociales/">redes sociales</a>.  </p>
<p>La propuesta parece ser muy original y esta teniendo gran aceptación.  Google OpenSocial fue lanzado el 1 de noviembre de 2007 y desde su comienzo ya contaba con una alianza con los principales sitios sociales ha excepción de FaceBook.</p>
<p>Google OpenSocial provee un set de funciones especiales para el desarrollo de aplicaciones sociales que pueden interactuar en múltiples sitios.  El desarrollo de estar aplicaciones sería sencillo de realizar bajo las tecnologías <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript </a>y <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>.</p>
<p>Google <a href="http://orkut.com">Orkut</a> (una red social iniciada por un empleado de la compañía) ha sido uno de los primeros sitios que permite a los desarrolladores, probar las aplicaciones basadas en OpenSocial.  La iniciativa pretende que las aplicaciones puedan ser almacenadas en los servidores de las redes sociales o en los propios servidores, una idea muy parecida al modo de funcionamiento de las aplicaciones en FaceBook.</p>
<p>Una de las ventajas que señalan los encargados del proyecto en Google, es que OpenSocial es un modelo de programación sencillo que ayudará a los programadores y a los sitios web; por que a los primeros los ayudará a crear aplicaciones que trabajen con cualquier sitio que use la API.  Y a los segundos, les permitirá ofrecer estos servicios a sus usuarios como añadido.</p>
<h3>Algunos aspectos importantes antes de iniciar:</h3>
<p>Las aplicaciones de OpenSocial utilizan la arquitectura de <a href="http://desktop.google.com/plugins/">Google Gadgets</a> pero con el añadido de poder utilizar las funciones específicas para OpenSocial.  Es decir que antes de iniciar a desarrollar con OpenSocial, deberemos investigar como programar bajo Google Gadgets.</p>
<p>Por ende, al igual que Google Gadgets, una aplicación bajo OpenSocial, está desarrollada mediante documentos en formato <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a> con HTML/JavaScript como parte del cuerpo del documento. Como se comentaba más arriba, uno de los primeros ambientes de desarrollo es Google Orkut.  Una primera idea de la manera en que los desarrolladores podrán probar sus aplicaciones es:</p>
<ul>
<li>Abrir la URL <a href="http://sandbox.orkut.com">sandbox.orkut.com</a></li>
<li>Seleccionar Applications en en panel lateral izquierdo</li>
<li>Pegar la URL de la ubicación del Gadget en la caja de texto Add an application by url</li>
</ul>
<p>Luego de que hemos instalado la aplicación podemos utilizar y testear la aplicación. Una nota importante es que los archivos de nuestro proyecto deberán estar públicos y accesibles mediante una URL.  Podremos instalarlo en un servicio compartido, nuestro servidor o en servicios de alojamiento como <a href="http://pages.google.com/">Google Pages</a>.  </p>
<p>Si hacemos cambios en nuestra aplicación puede que el contenedor de Orkut lo muestre cacheado; por lo que una solución propuesta es que agreguemos una variable en la URL como aleatoria. <a href="http://www.maestrosdelweb.com/editorial/usointernet/">Internet está cambiando</a> el modelo de negocio de muchos sitios y empresas.  En la actualidad, la Web 2.0 demanda un acercamiento entre los usuarios de los servicios y las redes sociales sin duda son la más viva expresión de esta demanda.  </p>
<p>Poco a poco nos acercamos al escenario de un mundo más conectado, mediante Internet.  Con OpenSocial, podemos interactuar desde nuestra red social favorita con nuestros amigos en otro sitio de interés, de una manera más transparente. </p>
<p>Google OpenSocial es un claro competidor del modelo de FaceBook. La pregunta está en que haremos los desarrolladores frente a estar propuestas.  Poder aprovechar el poder de ambas será crucial para poder integrar nuevos servicios a nuestros proyectos. </p>
<h3>Lecturas recomendadas:</h3>
<p>Para avanzar más sobre el tema te invitamos que leas los artículos: <a href="http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/">Primeros pasos con OpenSocial </a>y <a href="http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/">Escribiendo aplicaciones sociales con Google OpenSocial</a> que es parte de está serie de artículos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hojas de estilo con YAML</title>
		<link>http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/</link>
		<comments>http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/#comments</comments>
		<pubDate>Tue, 25 Dec 2007 07:00:28 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/</guid>
		<description><![CDATA[YAML es un framework de desarrollo para CSS,  el objetivo de utilizar esta herramienta es ayudar a los diseñadores a realizar hojas de estilo de una manera más ágil y estándar para los múltiples navegadores.  YAML combina una serie de características bastantes interesantes que sin duda nos harán más sencillo el trabajo a [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">YAML es un framework de desarrollo para CSS,  el objetivo de utilizar esta herramienta es ayudar a los diseñadores a realizar hojas de estilo de una manera más ágil y estándar para los múltiples navegadores.  YAML combina una serie de características bastantes interesantes que sin duda nos harán más sencillo el trabajo a la hora de diseñar con <a href="http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/">CSS</a>. </span><span id="more-3636"></span></p>
<p>Existen bastantes plataformas de desarrollo para diversas tecnologías.  Los más sonados son los que interactuan del lado del servidor y en el nivel de programación.  Pero <a href="http://www.yaml.org">YAML</a> es digno de mención por que realmente nos facilita la labor de realizar hojas de estilo.  </p>
<p>No debemos confundir el lenguaje de marcado YAML (Yet Another Markup Language) superconjunto de <a href="http://www.yaml.de">JSON con YAML</a> (Yet Another Multicolumn Layout).  Entre las principales características del framework están: </p>
<ul>
<li>Un esquema definido de plantillas que incluye una cabecera, un pie de página y un área para una o más columnas muy propio de las nuevas tendencias de diseño.</li>
<li>Compatibilidad con la mayoría de los navegadores utilizando la plantilla por defecto proporcionada en la distribución.</li>
<li>Esquemas de diseños fijos o fluidos.</li>
</ul>
<p>Lo interesante de esta herramienta es que cuando el diseñador inicia a crear la hoja de estilo lo hace con un esquema ya fijado y con la compatibilidad multinavegador. Esta última característica es muy importante a mi parecer. Posteriormente y con el transcurso del diseño de la plantilla el diseñador puede ir restando elementos innecesarios dentro de la hoja de estilo. Pero es importante resaltar que YAML no es una plantilla prediseñada. </p>
<h3>Estructura del paquete: </h3>
<p>El paquete de distribución incluye la carpeta <strong>YAML/</strong> que contiene los archivos necesarios para trabajar con la herramienta.  Las demás carpetas son <strong>DOCUMENTATION/</strong>, <strong>EXAMPLES/</strong> y <strong>TOOLS/</strong>.  Dentro de la carpeta YAML están las siguientes hojas de estilo. </p>
<ul>
<li><strong>/yaml: </strong>contiene los archivos <code>central_draft.css</code> y <code>markup_draft.css</code>.  Esta carpeta es la carpeta principal del framework.  El primer archivo embebe todos los componentes CSS necesarios para trabajar y el segundo muestra el código fuente de la estructura de YAML.</li>
<li><strong>/yaml/core: </strong>contiene los archivos <code>base.css</code>, <code>iehacks.css</code>, <code>print_base.css</code>, <code>slim_base.css</code>, <code>slim_iehacks.css</code> y <code>slim_print_base.css</code>.  Como su nombre lo indica, estos archivos son los componentes base del framework.  El primer archivo incluye toda la definición CSS para elaborar un diseño a tres columnas.  El segundo (<code>iehacks.css</code>) contiene todos los &#8220;ajustes&#8221; necesarios para la correcta visualización en el navegador Internet Explorer 5 al 7 independientemente del diseño elegido. Y el tercero proporciona soporte para CSS Print.</li>
<li><strong>/yaml/screen:</strong> componentes CSS para el diseño en pantilla.  Incluye los archivos basemod_draft.css y content_default.css.</li>
<li><strong>/yaml/navigation:</strong> componentes para la definición de menús de navegación horizontal y vertical.</li>
<li><strong>/yaml/print:</strong> hojas de estilo con valores por defecto para la definición de la versión imprimible de la página.</li>
<li><strong>/yaml/patches:</strong> mas &#8220;ajustes&#8221; para Internet Explorer.</li>
</ul>
<h3>¿Cómo empezar a utilizar nuestra plantilla? </h3>
<p>Cuando iniciamos el diseño, lo primero que debemos hacer es agregar nuestra plantilla como recurso de hoja de estilo, generalmente utilizando el atributo link. Esta hoja de estilo principal contiene nuestro diseño y la incorporación de las otras hojas de estilo que son parte de YAML mediante la regla <code>@import</code>. </p>
<div class="codigo">
<pre>&lt;head&gt;
      ...
      &lt;link href = "css/layout_3col_standard.css" rel = "stylesheet"
            type = "text/css"/&gt;
...
&lt;/head&gt;
/* import core styles | Basis-Stylesheets */
@import url(../yaml/core/base.css);
/* import screen layout | Screen-Layout einbinden */
@import url(../yaml/navigation/nav_shinybuttons.css);
@import url(screen/basemod.css);
@import url(screen/content.css);
/* import print layout | Druck-Layout einbinden */
@import url(../yaml/print/print_003_draft.css); </pre>
</div>
<h3>Reglas de oro para usar YAML correctamente </h3>
<p>Las siguientes reglas resumen los principios básicos para el buen desarrollo con YAML:</p>
<ul>
<li>YAML no es una plantilla prefabricada.
<li>
<li>YAML está basado en el principio TOP-DOWN (iniciar el desarrollo de la hoja de estilo con definiciones de propiedades estándard para todos los navegadores).</li>
<li>Todas las plantillas YAML necesitan de tres componentes <code>básicos: base.css</code>, <code>iehacks.css</code> y <code>print_base.css</code>.</li>
<li>Se debe separar correctamente los archivos del framework, de los propios de nuestro diseño incluyendo los archivos modificados del framework.</li>
<li>Lee el manual de documentación de YAML antes de iniciar el desarrollo con la herramienta.</li>
</ul>
<h3>El YAML Builder</h3>
<p>Adicionalmente en el sitio del proyecto hay un enlace al <a href="http://builder.yaml.de">YAML Builder</a>. Esta aplicación web nos permite definir plantillas en tiempo real y de una manera más gráfica simplificando aún más el proceso de desarrollo de la hoja de estilo. Luego que hemos terminado nos permite obtener una copia de la plantilla lista para poder ser utilizada. </p>
<h3>Conclusiones </h3>
<p>La idea de utilizar frameworks es debido a la necesidad de agilizar los tiempos de desarrollo de las herramientas.  YAML es una muy buena propuesta; útil para aquellos desarrolladores CSS.  </p>
<p>La herramienta permite realizar nuestras hojas de estilo de una manera más sencilla, rápida y elegante, combinando propiedades generales y un buen soporte para los navegadores con lo cual no tendremos que ser nosotros los que nos preocupemos por esos detalles que antes nos consumían tanto tiempo valioso. </p>
<p>Les invito a probar por ustedes mismo la herramienta.  Para mayor información sobre el proyecto pueden dirigirse a la <a href="http://www.yaml.de">página web</a> en donde encontrarán el manual de documentación, los archivos del framework y el vínculo al YAML Builder.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CSS 3: las nuevas propiedades</title>
		<link>http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/</link>
		<comments>http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 07:00:04 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/</guid>
		<description><![CDATA[Las posibilidades que permitirá la nueva versión de CSS tiene el potencial de cautivar a más de un desarrollador.  En el siguiente artículo veremos una lista de estas nuevas propiedades, ejemplos de su funcionamiento y algunas ideas prácticas de como utilizarlas en nuestros proyectos, cuando vea la luz. 
En el artículo sobre CSS 3: [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Las posibilidades que permitirá la nueva versión de CSS tiene el potencial de cautivar a más de un desarrollador.  En el siguiente artículo veremos una lista de estas nuevas propiedades, ejemplos de su funcionamiento y algunas ideas prácticas de como utilizarlas en nuestros proyectos, cuando vea la luz. </span><span id="more-3635"></span></p>
<p>En el artículo sobre <a href="http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/">CSS 3: más social que nunca</a>, hablé sobre las novedades a grandes rasgos del nuevo CSS 3, ahora trataré de detallarlas un poco más con ejemplos de código. Las nuevas propiedades han sido agrupadas en varios módulos según sus prestaciones. La siguiente lista de nuevas propiedades ha sido extraída de <a href="http://www.css3.com">CSS3</a>.: </p>
<h3>Nuevas propiedades</h3>
<ul>
<li><strong>Bordes:</strong> border-color,  border-image, border-radius, box-shadow.</li>
<li><strong>Backgrounds:</strong> background-origin, background-clip, background-size, layering multiple background images.</li>
<li><strong>Color:</strong> HSL colors, HSLA colors, RGBA colors opacity.</li>
<li><strong>Texto:</strong> text-shadow, text-overflow.</li>
<li><strong>Interface:</strong> box-sizing, resize.</li>
<li><strong>Selectores:</strong> attribute selectors.</li>
<li><strong>Formatos:</strong> media queries, multiple column layout, speech.</li>
</ul>
<h3>Backgrounds y Borders: </h3>
<p>Entre las principales características destacan que se podrá agregar múltiples background a un objeto, los borders podrán ser redondos con posibilidad de indicar el radio de curvatura. </p>
<p><strong>HTML:</strong> </p>
<div class="codigo">
<pre>&lt;div class="vcard" vcard"&gt;
      &lt;div class="addr-bl" bl"&gt;
            &lt;div class="addr-tr" tr"&gt;
…
            &lt;/div&gt;
      &lt;/div&gt;
&lt;/div&gt; </pre>
</div>
<p><strong>CSS: </strong></p>
<div class="codigo">
<pre>.vcard {
      background-color: #000;
      background-image:
      url(a-grad.gif),
      url(a-bl.gif),
      url(a-tr.gif);
      background-repeat:
      repeat-x,
      no-repeat,
      no-repeat;
      background-position:
      0 0,
      100% 0,
      100%;
}
</pre>
</div>
<p>Pueden darse cuenta que en este caso, los múltiples background son agregadas mediante coma ( , ).  El nivel de precedencia es de menos a más, es decir, el que está de último es el background de encima. </p>
<h3>Multi-column Layout </h3>
<p>Ahora será más sencillo crear diseños con múltiples columnas sin etiquetas adicionales.  Esta característica me ha parecido extraordinaria y muy útil. En el primer ejemplo, vemos la implementación de esta opción en la versión actual de <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a>.  Para este caso, debemos crear dos clases CSS y dos objetos DIV para simular la multi-columna. </p>
<div class="codigo">
<pre>&lt;div class="entry-content" content"&gt;
      &lt;div class="col first"&gt;
…
     &lt;/div&gt;
      &lt;div class="col"&gt;
…
      &lt;/div&gt;
&lt;/div&gt; 

.entry-content .col {
      float: left;
      width: 467px;
      margin-left: 30px;
} 

.entry-content .first {
      margin-left: 0;
} </pre>
</div>
<p>Y en CSS 3 la definición es más sencilla y requiere menos procesamiento </p>
<div class="codigo">
<pre>&lt;div class="entry-content" content"&gt;
…
&lt;/div&gt; 

.entry-content {
      column-count: 2;
      column-gap: 30px;
} </pre>
</div>
<h3>Advanced Layout:</h3>
<p>Esta nueva característica permitirá organizar los elementos en pantalla de una mejor manera y combinarlos de diferentes maneras sin etiquetas adicionales. </p>
<h3>Grid Positioning: </h3>
<p>Dará la posibilidad que agregar reglas con cuadrículas invisibles para maquetar páginas con un aspecto como libro o revista y jugar con el tamaño y las propiedades de los objetos para hacer que los elementos &#8220;floten&#8221; entre las posiciones. </p>
<div class="codigo">
<pre>
&lt;div class="entry-content"&gt;

      &lt;h2&gt;What is Sushi?&lt;/h2&gt;
…
            &lt;img src="sushi.jpg" class="photo" alt="" /&gt;
… 

&lt;/div&gt;
.entry-content {
      grid-columns:
            (30px * *)[4];
      grid-rows:
            9em 33.3% *;
      column-count: 4;
      column-gap: 30px;
} 

.entry-content h2 {
      float: page top left;
      width: 6gr;
      height: 1gr;
      margin-left: -30px;
} 

.entry-content img.photo {
      float: page bottom left;
      float-offset: 4gr 1gr;
} </pre>
</div>
<p>La respuesta a la pregunta de que si el ejemplo anterior es bastante confuso de entender a simple vista es, sí.  En palabras en un poco confuso explicarlo, pero el ejemplo anterior muestra un diseño con cuatro columnas, una foto en medio de la columna 2 y 3 y un titulo de página, todo al más puro estilo de una revista.  Así que ya no hay excusas que poner cuando el diseñador nos proponga hacer algo así en <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>. </p>
<h3>Selectors: </h3>
<p>El concepto de selector es un poco complicado de explicar, y todo debido a que este tipo de propiedades son muy poco utilizadas.  Algunos ejemplos de selector que si utilizamos son: <code>:hover</code> y <code>:visited</code> (los selector de hipervínculos).   Este tipo de selector podrían ser utilizados en otros elementos y de hecho así puede ser, a excepción del navegador Internet Explorer que no los soporta. Los nuevos selector serían: </p>
<ul>
<li><strong>E:only-of-type:</strong>  un elemento que es único en su tipo.</li>
<li><strong>E:not(s):</strong> un elemento que no coincide con los selector simples.</li>
<li><strong>E ~ F:</strong>  un elemento F precedido de un elemento E.</li>
<li><strong>E:nth-child:</strong>  un objeto que es el enésimo hijo del nodo padre.</li>
<li><strong>E:nth-last-child:</strong> un objeto que es el último hijo del nodo padre.</li>
<li><strong>E:nth-of-type:</strong> un elemento que es el enésimo nodo hijo de otro elemento.</li>
<li><strong>E.first-of-type:</strong> el primer elemento de un tipo. </li>
</ul>
<p>Las posibilidades para el uso de selector son realmente muchas. Ahora faltará que la nueva versión de CSS 3 este lista para poder empezar a utilizarla en nuevos desarrollos. </p>
<h3>Lecturas recomendadas: </h3>
<ul>
<li><a href="http://www.css3.com">css3.com</a></li>
<li><a href="http://www.creatingsexystylesheets.com">creatingsexystylesheets.com</a></li>
<li><a href="http://www.alistapart.com">alistapart.com</a></li>
<li><a href="http://www.trascendingcss.com/support">trascendingcss.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CSS 3: más social que nunca</title>
		<link>http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/</link>
		<comments>http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 07:00:33 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/</guid>
		<description><![CDATA[Después de varios años trabajando con la especificación de CSS 2, la Web se prepara para un cambio en el modo de trabajar con hojas de estilo.  Esta nueva versión viene cargada con grandes novedades y más social que nunca. 
CSS 3 ofrecerá grandes cambios y características largamente esperadas por nosotros los webmasters.  [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Después de varios años trabajando con la especificación de CSS 2, la Web se prepara para un cambio en el modo de trabajar con hojas de estilo.  Esta nueva versión viene cargada con grandes novedades y más social que nunca. </span><span id="more-3555"></span></p>
<p>CSS 3 ofrecerá grandes cambios y características largamente esperadas por nosotros los webmasters.  Lo veremos por todos lados y no viene solo; viene acompañado de HTML 5 y XHTML 2. Los cambios en estas tecnologías obedecen al fenómeno de la <a href="http://www.maestrosdelweb.com/editorial/web2/">Web 2.0</a> y a las recomendaciones del creador de la World Wide Web, <a href="http://www.maestrosdelweb.com/actualidad/tim-berners-lee-hablando-del-social-graph/">Tim Berners Lee</a> de llevar a la Web a la máxima expresión del concepto de <a href="http://www.maestrosdelweb.com/editorial/web-semantica-y-sus-principales-caracteristicas/">semántica</a>. </p>
<h3>Las ventajas de CSS 3:</h3>
<p>CSS 2 fue lanzado en 1997 y después de 10 años y alguna que otra actualización, el modelo y propiedades necesita un lavado de cara para obedecer a las demandas del medio.  A pesar de eso, realmente debemos mencionar que aún conserva muchas ventajas.   </p>
<p>Las ventajas principales en esta nueva versión son la inclusión de nuevas propiedades especialmente en cuanto al aspecto gráfico (recordemos que <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> también es utilizado para describir estilos para medios de audio) aunque se prevean mejores sustanciales en otros medios como el de sonido.  </p>
<p>La actualización incluirá los tan esperados bordes redondeados, textos con sombras,  la capacidad de asignar múltiples fondos, un mejor manejo de tablas incluyendo el estilo zebra, multi-columnas, etc. El modelo conservará muchas de las actuales propiedades y trabajará con nuevos selectores.  </p>
<p>También se habla del hecho de que con estas nuevas propiedades la carga de la página deberá descender pues el hecho de que muchos de los efectos estén ahora bajo control del <a href="http://www.maestrosdelweb.com/editorial/%C2%BFcomo-elegir-un-navegador-web/">navegador</a> hará que los recursos visuales e imágenes que ahora empleamos ya no tengan razón de seguir siendo utilizados. </p>
<h3>Capacidades visuales avanzadas:</h3>
<p>CSS 3 contiene varias mejoras en cuanto a interfaz gráfica, posicionamiento y tamaño de los objetos, usando condiciones de alineación para cada uno.  El objetivo es que sea más sencillo posicionar los controles dentro de la página y que cuenten con otras características como desplazamiento. </p>
<h3>Hojas de Estilo Aural:</h3>
<p>Pretende utilizar las opciones de ciertos dispositivos con capacidades de reproducción de sonido.  El módulo de audio podría agregar sonidos de fondo o efectos de transición que se activarían mediante determinado evento.  Otras propiedades permitan controlar la posición del sonido que se está reproduciendo, etc. </p>
<h3>Bordes y Fondos: </h3>
<p>Las nuevas capacidades de CSS 3 permitirían entre otras cosas usar imágenes para los bordes, redondear y/o agregar sombras. Posicionamiento de elementos en pantalla:  se podrá controlar de mejor manera los objetos y su dirección (horizontal o vertical).  </p>
<p>Además, se quiere incluir el módulo de paginación para crear pies de página, referencias cruzadas y construir cabeceras para títulos de secciones.  También se desea introducir una nueva propiedad para dividir secciones en columnas. </p>
<h3>Fuentes: </h3>
<p>Nuevas funciones sobre todo encaminadas a brindar un mejor soporte a múltiples lenguajes.  Se pretende volver a incluir el <code>@font-face</code> para utilizar fuentes externas. </p>
<p>Otros cambios sustanciales serían un mejor modelo para trabajar CSS con <a href="http://www.maestrosdelweb.com/editorial/dom/">DOM</a> incluyendo la posibilidad de cambiar valores a las propiedades, uso de <strong>NAMESPACES</strong> como <a href="http://www.maestrosdelweb.com/editorial/desarrollo-web/xml/">XML</a> y la inclusión de un mejor soporte para manejo de expresiones matemáticas. </p>
<h3>Roadmap de soporte de CSS 3 para los navegadores </h3>
<p>Lo que deberemos tomar en cuenta es que antes de saltar a empezar a migrar nuestro sitio a la versión CSS 3 la mayoría de los navegadores ya hayan implementado parte de estas nuevas especificaciones.   </p>
<p>Actualmente el desarrollo va con el navegador <a href="http://www.maestrosdelweb.com/actualidad/2228/">Opera</a> a la cabeza seguido de WebKit.  Opera 9.x incluso ya viene con soporte para los nuevas etiquetas de HTML 5. <a href="http://www.Mozilla.com">Mozilla</a> y <a href="http://www.maestrosdelweb.com/editorial/microsoft/">Microsoft</a> aún no han presentado mayores cambios en sus exploradores <a href="http://www.maestrosdelweb.com/editorial/firefox/">Firefox</a> e Internet Explorer, respectivamente.   </p>
<p>Por otro lugar el equipo de desarrollo de WebKit (donde podemos incluir a Konqueror y Safari) estado trabajando en dar soporte a estas nuevas propiedades.   Los cambios también incluyen el regreso de la propiedad <code>@font-face</code> que permite la carga de un recurso tipográfico (es decir una fuente TTF) como de una imagen se tratase.  </p>
<p>Esta propiedad fue incluida en la especificación de CSS 2.0 y eliminada de la lista bajo la excusa de no ser utilizada.  Los primeros en brindar el soporte a esta propiedad es el equipo de WebKit mediante un plugin. </p>
<h3>Qué esperar con CSS 3</h3>
<p>Esperamos que en el 2008 la mayoría de navegadores incluyan dentro de alguna actualización el soporte nativo para CSS 3 y las nuevas versiones de <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> y <a href="http://www.maestrosdelweb.com/editorial/haciaxhtml/">XHTML</a>. Por lo pronto, debemos de esperar un poco más, leyendo uno que otro documento que sale al respecto para prepararnos por que la salida de esas nuevas versiones esta mas cerca cada día. </p>
<p>El tema sobre CSS 3 es más extenso, así que hemos preparado varios artículos que te guiarán paso a paso sobre sus propiedades y aprovechamiento. Además, un ejemplo sobre una futura implementación dentro de hojas de estilo CSS 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Maquetando con hojas de estilo</title>
		<link>http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/</link>
		<comments>http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 07:00:31 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[Maquetación]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/</guid>
		<description><![CDATA[En la actualidad se ha vuelto muy famoso el concepto de separación de estructura y diseño (HTML de CSS). Hasta que punto debe ser llevado este modo de estructurar un sitio y que ventajas ofrece son solo algunas de las preguntas que trataremos de resolver en este artículo. 
CSS nació de la propuesta de dividir [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">En la actualidad se ha vuelto muy famoso el concepto de separación de estructura y diseño (HTML de CSS). Hasta que punto debe ser llevado este modo de estructurar un sitio y que ventajas ofrece son solo algunas de las preguntas que trataremos de resolver en este artículo. </span><span id="more-3493"></span></p>
<p><a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> nació de la propuesta de dividir la estructura del documento de su diseño.  La problemática que se venía dando en el viejo orden era que los documentos eran muy difíciles de mantener.  Si por ejemplo, suponemos un sitio con alrededor de 100 o más documentos el cambiar el diseño a cada uno era muy laborioso.</p>
<p>De esto ha pasado algún tiempo y las exigencias han cambiado.  El uso de CSS se ha hecho más cotidiano tanto que ya es un estándar.  Como en todo desarrollo, cuando separamos componentes estamos ahorrándonos tiempo y esfuerzo.  CSS es ideal para todos los proyectos no importando su tamaño.</p>
<h3>Clases y valores por defecto:</h3>
<p>Hace algún tiempo leí acerca de este tema en el sitio de Shapead y me llamó la atención tanto, que preparé la traducción.  A manera general el tema mostraba las razones para definir valores por defecto para la hoja de estilo que estamos utilizando.  </p>
<p>Como muchos sabemos existe un gran variedad de navegadores en el mercado y cada uno trabaja de manera distinta.  Aparte de que cada navegador tiene características particulares, trae consigo distintos valores por defecto para los documentos.  </p>
<p>La gran ventaja de utilizar esta técnica es que nos permite llevar el desarrollo de nuestra plantilla de una manera más estándar.  Por ejemplo, es recomendable definir los valores por defecto de los márgenes y de las sangrías, el tipo de letra, el interlineado, etc. Para que todos los navegadores muestren en la misma posición los elementos en pantalla.</p>
<p>Además es un técnica interesante el ir creando clases generales con nombres característicos que establezcan valores como el texto de decoración de la letra, el espaciado, etc. Con lo cual nos evitamos ir definiendo mismas propiedades para elementos distintos.</p>
<p>También, podemos definir y reutilizar valores de clases para ir creando los estilos en una especie de propiedades con herencia y que conforme vaya especializándose el diseño para un objeto; se vaya añadiendo propiedades específicas para el mismo.</p>
<h3>Técnicas para modelar la hoja de estilos:</h3>
<p>Es gracioso que cada webmaster tenga un modo particular de modelar su hoja de estilos.  Existen varios puntos a cubrir como:</p>
<p><strong>El orden en que se escriben las clases  y propiedades:</strong> una de las técnicas más populares es ir dividiendo por secciones a la vez de ir comentando ciertos puntos y clases dentro del CSS.  También podemos encontrar el caso de ordenar las clases por tipo y alfabéticamente (tanto nombres de clases como propiedades).</p>
<p>Crear un archivo CSS aparte por cada navegador con ajustes a las clases CSS que definitivamente no pudieron estandarizarse o utilizar los famosos hacks por navegador (una medida algo desesperada; aunque divertida).<br />
<strong><br />
Los nombres de las clases:</strong> casi todos coinciden en que es importante que los nombres de las clases sean descriptivos y que denoten incluso el ámbito en el que actúan en la página.  Una buena técnica podría ser ir definiendo la clase de lo general a lo específico como: <code>news_title_tiny</code> ó <code>administrator_menu_subitem</code>.</p>
<h3>Hojas de estilo para varios navegadores:</h3>
<p>Al tener tantos navegadores con diferentes características es inevitable que el diseño que estamos realizando no se vea bien en alguno de ellos.  En mi caso; cada vez que voy realizando cambios en la hoja de estilo voy probando continuamente en cada uno de los navegadores como se muestra la página.</p>
<p>Una buena implementación de CSS no contendrá ajustes o hacks.  Aunque muchas veces esto es inevitable, es necesario que conforme nuestra experiencia avanza, vayamos disminuyendo el uso de este tipo de técnicas que muchas veces se salen de los estándares.</p>
<p>Si separamos correctamente <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> de CSS, cuando quitemos la referencia a la hoja de estilo, este deberá verse y leerse de manera vertical sin ningún tipo de diseño.   Esto es una característica que  también nos permitirá aplicar de mejor manera las técnicas SEO.</p>
<h3>Algunas propiedades olvidadas de CSS 2</h3>
<p>Para quienes utilizamos editores con soporte CSS y la característica <strong>Smart Tags</strong> el ver propiedades que nunca utilizamos en la lista seguro que nos intriga.  Por qué será que casi nunca las utilizamos: talvez es desconocimiento o simplemente su uso está fuera de foco.  Para cualquiera de los dos casos aquí preparo una lista de algunos de esos elementos perdidos en CSS 2:</p>
<ul>
<li><strong>azimuth:</strong> indica el ángulo horizontal o lateral del sonido en hojas de estilos Aural.</li>
<li><strong>caption-sice:</strong> al igual que la anterior pertenece al orden de las propiedades para hojas de estilo Aural. Su objetivo es posicionar el elemento caption de una tabla arriba o abajo.</li>
<li><strong>clip:</strong>  esta propiedad me ha llamado mucho la atención. El objetivo de la misma es mostrar una región  de un elemento posicionable (con atributo position: absolute).  En CSS 2 la única forma que admite es un rectángulo pero se tienen planes de extender el soporte a otras formas.  Me ha parecido muy parecida, en cuanto a manejo y comprensión al elemento MAP.</li>
<li><strong>column-span:</strong> el equivalente a COLSPAN para elementos TD.</li>
<li><strong>content:</strong> este atributo es bastante peculiar y definitivamente sale del estándar de separar el contenido del diseño.  Funciona solamente con las seudoclases cue-before y cue-after.  Su objetivo es poder incluir contenido HTML antes o después de la definición del objeto.</li>
<li><strong>direction:</strong> permite definir la posición del texto de un elemento: es decir ya sea de izquierda a derecha o viceversa.  Actualmente no es soportada por ningún navegador.</li>
<li><strong>elevation:</strong> tiene un funcionamiento similar a azimuth.</li>
<li><strong>filter: </strong>para muchos no es una propiedad desconocida.  Es la encargada de aplicar filtros de efectos a los elementos CSS y solo está disponible para Internet Explorer.  Con ella se logra es famoso efecto de transparencia de imágenes PNG en versiones anteriores a Internet Explorer 7.</li>
<li><strong>letter-spacing:</strong> establece un espacio de separación entre letras.</li>
<li><strong>orphans:</strong> indica el número mínimo de línea que debe tener un párrafo que debe ser visible en la parte inferior de la página cuando ocurre el salto de página.  Generalmente utilizado para impresiones.
<li>
<li><strong>page-break-after, page-break-before:</strong> define el comportamiento del contenido para el salto de página cuando el documento es enviado a la impresora.</li>
<li><strong>pause, pitch, play-during, richness, speak, stress y voice-family:</strong> controles del sonido para hojas de estilo tipo Aural.</li>
<li><strong>size:</strong> define el tamaño y la orientación del papel para la impresión.</li>
<li><strong>text-indent:</strong> determina el tamaño de la sangría en la primera línea del párrafo.</li>
<li><strong>widows:</strong> el mismo propósito de orphans, pero en la posición de arriba del elemento.</li>
</ul>
<h3>Conclusiones:</h3>
<p>CSS es muy interesante y posee muchas cualidades.  CSS no es solamente utilizado para hacer el diseño de la página sino también de otros elementos como la versión imprimible y herramientas para voz.  Muchos dicen acerca de la necesidad de diseñar la versión imprimible de la página.  Ahora que vimos los elementos olvidados también podemos incluir la versión escuchada.</p>
<p>CSS está evolucionando y ahora esta próximo el lanzamiento de la tan esperada versión 3 que incluye muchas nuevas características ya solicitadas hace mucho tiempo incluyendo el regreso de <code>@font-face</code> para aquellos amantes de la era <a href="http://www.maestrosdelweb.com/editorial/web2/">Web 2.0</a> y de las tipografías.</p>
<p>NOTA: para quienes no sabíamos que eran las hojas de estilo Aural (así como yo, antes de escribir este artículo), les comento que este tipo de CSS es utilizado cuando la hoja de estilo describe las propiedades del sonido.  Como podemos recordar CSS puede ser utilizado en el medio de Internet, para Impresiones y para describir el comportamiento en medios de reconocimiento de voz y sonidos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smarty: otras alternativas y proyectos similares</title>
		<link>http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 07:00:43 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smartyotras-alternativas-y-proyectos-similares/</guid>
		<description><![CDATA[Existen muchos sistemas de plantillas en todos los lenguajes para desarrollo en Internet. En este artículo veremos algunas alternativas de Smarty para desarrolladores en PHP y proyectos similares para plataformas como Ruby, Java y ASP.Net. 
Concluimos con nuestra serie sobre Smarty en donde hemos abordado los temas sobre, Smarty: razones para utilizar plantillas en mis [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Existen muchos sistemas de plantillas en todos los lenguajes para desarrollo en Internet. En este artículo veremos algunas alternativas de Smarty para desarrolladores en PHP y proyectos similares para plataformas como Ruby, Java y ASP.Net. </span><span id="more-3462"></span></p>
<p>Concluimos con nuestra serie sobre Smarty en donde hemos abordado los temas sobre, <a href="http://www.maestrosdelweb.com/editorial/smarty-plantillas/">Smarty: razones para utilizar plantillas en mis proyectos</a>, <a href="http://www.maestrosdelweb.com/editorial/smarty-instalacion/">Smarty: requerimientos, instalación y aprende a programar</a>, <a href="http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/">Smarty: a nivel avanzado</a> y ahora hablaremos de sus alternativas.</p>
<h3>Sistemas de Plantillas en PHP</h3>
<h3>Savant:</h3>
<p>El proyecto <a href="http://www.phpsavant.com/">Savant</a> es un sistema de plantillas que me ha parecido bastante interesante.  Savant está basado en el paquete PEAR. A diferencia de <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a> el archivo de plantilla no es un archivo con una sintáxis diferente sino otro archivo PHP.  </p>
<p>Una ventaja en cuando a rendimiento, aunque definitivamente  podría generar problemas en especial si lo utilizamos en un proyecto donde el encargado de la integración con <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> no es conocedor de <a href="http://www.maestrosdelweb.com/editorial/phpintro/">lenguaje PHP</a>. </p>
<p>Tiene varias similitudes con Smarty en cuanto a convención de nombre de funciones del objeto y al manejo de concepto de carpeta de plantillas.  El hecho de que la plantilla final sea PHP permite que pueda utilizar las variables y funciones de nuestro script original, pero a mi parecer también genera una gran vulnerabilidad. </p>
<p><strong>Ejemplo: Script PHP</strong> </p>
<div class="codigo">
<pre>&lt;?php
//  this gets the template output from the template search path.
$output = $tpl-&gt;fetch('template.tpl.php');
// this would display another template from a subdirectory
// in the template search path.
$output = $tpl-&gt;fetch('subdir/anotheryawiki_storelate.tpl.php');
// an alternative method: set the default template
// and then return the default script output.
$tpl-&gt;setTemplate('template.tpl.php');
$output = $tpl-&gt;fetch();
?&gt;</pre>
</div>
<p><strong>Plantilla:</strong></p>
<div class="codigo">
<pre>&lt;html&gt;
      &lt;!-- template source --&gt;
      &lt;?php include $this-&gt;loadTemplate('header.tpl.php') ?&gt;
      &lt;h2&gt;Main Content&lt;/h2&gt;
      &lt;p&gt;Your name is &lt;?php echo $this-&gt;name ?&gt;, right?&lt;/p&gt;
      &lt;?php include $this-&gt;loadTemplate('footer.tpl.php') ?&gt;
&lt;/html&gt;</pre>
</div>
<h3>Sistemas de plantillas para Ruby</h3>
<h3>Canny:</h3>
<p>Esta fantástica implementación del motor de plantillas Smarty para lenguaje <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a>. Los desarrolladores del proyecto han cuidado que la aplicación sea igual en cuanto ha implementación de lógica de programación y sobre todo que las plantillas que han sido creadas para Smarty puedan utilizar <a href="http://canny.sourceforge.net/index.shtml">Canny</a> como motor de compilación.  </p>
<p>Aunque hay algunas variantes a nivel de plantilla sobre todo por el manejo que se le da a los tipos de datos. Realmente un gran proyecto. </p>
<p><strong>Ejemplo: Script Ruby</strong> </p>
<div class="codigo">
<pre>#!/usr/bin/env ruby
require "Canny"
# Inicia el objeto Canny y asigna los directorios de plantilla
C = Canny.new
C.template_dir = 'templates'
C.compile_dir  = 'templates_c'
name = 'Canny user'
people = [
          {'name' =&gt; 'John Doe', 'city' =&gt; 'New York', 'zip' =&gt; '10000'},
          {'name' =&gt; 'Jane Doe', 'city' =&gt; 'Los Angeles', 'zip' =&gt; '90000'},
      ]
fruits = ['Apple', 'Orange', 'Banana', 'Strawberry', 'Cherry', 'Lemon', 'Lime']
def my_modifier(str, params=[])
     if params[0] == &#8216;pie&#8217;
          str += &#8221; Pie&#8221;
     elsif params[0] == &#8220;smoothie&#8221;
          str += &#8221; Smoothie&#8221;
     else
          str
     end
end
Canny.register_modifier(&#8217;my_modifier&#8217;, &#8216;my_modifier&#8217;)
C.assign(&#8217;name&#8217;, name)
C.assign(&#8217;people&#8217;, people)
C.assign(&#8217;fruits&#8217;, fruits)
C.display(&#8217;example.tpl&#8217;)</pre>
</div>
<p><strong>Ejemplo: Plantilla</strong> (prácticamente es la misma sintáxis que Smarty). </p>
<div class="codigo">
<pre>Hello { $name }.
&lt;br /&gt;
&lt;br /&gt;
{ foreach from=$fruits item=fruit }
     { if $fruit == "Apple" or $fruit == "Cherry" }
          { $fruit|my_modifier:"pie" }
     {else}
          { $fruit|my_modifier:"smoothie" }
     {/if}
     &lt;br /&gt;
{/foreach}
{ foreach name=people from=$people item=person }
     { $canny.foreach.people.iterator } { $person.name|upper } lives in { $person.city|upper }.
     &lt;br /&gt;
{/foreach}
&lt;br /&gt;
&lt;br /&gt;
{ include file="example_show_total.tpl" total=$canny.foreach.people.total }</pre>
</div>
<h3>XTemplate:</h3>
<p>Esta es otra alternativa en lenguaje Ruby,  <a href="http://xtemplate.sourceforge.net/index.html">XTemplate</a> es un sistema de plantillas basado en XML. Su funcionamiento en bastante interesante aunque, por lo que he visto en cuanto al modo de funcionamiento y su sintáxis es viable en proyectos robustos y con un grupo de profesionales en manejo de estructuras con XML.   </p>
<p>Los ejemplos que he consultado para hacer esta pequeña reseña no dan muestras de ser un sistema que separe las plantillas en archivos aparte, aunque si es muy seguro que se logre emular esta opción mediante inclusiones de scripts.  </p>
<p><strong>Ejemplo: Ruby</strong></p>
<div class="codigo">
<pre>
require 'xtemplate'
data = {
  'members' =&gt; [
    {"name" =&gt; "name1", "age" =&gt; 20},
    {"name" =&gt; "name2", "age" =&gt; 23},
    {"name" =&gt; "name3", "age" =&gt; 30},
  ],
  &#8216;operators&#8217; =&gt; [
    {"name" =&gt; "op1", "age" =&gt; 28},
    {"name" =&gt; "op2", "age" =&gt; 32},
    {"name" =&gt; "op3", "age" =&gt; 24},
  ],
} </pre>
</div>
<p><strong>Ejemplo: de la Plantilla </strong>(dentro del mismo script) </p>
<div class="codigo">
<pre>text = &lt;&lt;EOF
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;members xmlns:xt="http://xtemplate.sourceforge.net/xtemplate"&gt;
  &lt;member xt:id="/members{push(stack1)}|/operators{pop(stack1);sort(age)}/name"&gt;
  &lt;/member&gt;
  &lt;xt:value-of id="/members{push(stack2)}" /&gt;
  &lt;xt:value-of id="/members{push(stack2)}" /&gt;
  &lt;member xt:id="/operators{pop_all(stack2)}/name"&gt;
  &lt;/member&gt;
  &lt;xt:value-of id="/members{push(stack3)}" /&gt;
  &lt;xt:value-of id="/members{clear_stack(stack3)}" /&gt;
  &lt;member xt:id="/operators{pop_all(stack3)}/name"&gt;
  &lt;/member&gt;
&lt;/members&gt;
EOF
t = XTemplate::XMLTemplate.new(text)
print(t.expand(data))</pre>
</div>
<p><strong>Ejemplo: salida </strong></p>
<div class="codigo">
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;members&gt;
  &lt;member&gt;name&amp;&lt;/member&gt;
  &lt;member&gt;name&amp;&lt;/member&gt;
  &lt;member&gt;name&amp;&lt;/member&gt;
&lt;/members&gt; </pre>
</div>
<p>En cuanto al manejo de sintáxis lo veo bastante interesante, con fuertes tendencias a la generación de archivos XML o con marcado.  Una característica es que la plantilla puede utilizar marcado XML o YAML (recordemos que Ruby viene con un Parser integrado de YAML).</p>
<h3>Motores de plantillas en lenguaje Java</h3>
<h3>Velocity: </h3>
<p>Proyecto impulsado por The Apache Foundation Software. <a href="http://velocity.apache.org">Velocity</a>  es un sistema basado en Java que permite a los diseñadores importar métodos en lenguaje Java a la plantilla para generar documentos HTML, SQL, PostScripts, etc. </p>
<h3>FreeMaker: </h3>
<p><a href="http://java-source.net/open-source/template-engines/freemarker">FreeMaker</a>, es otro sistema de plantillas para Java que permite generar documentos en formato HTML, RTF, PostScript, TeX, etc) y que permite ser integrado con Java Servlets, XML, Python y otras tecnologías. </p>
<h3>ASP.Net y Joel.Net, plantillas free open-source </h3>
<p>Joel.Net es un sistema bastante interesante de plantillas para ASP.Net.  Actualmente trabaja en VB.Net y C#.  Este software es lanzado bajo licencia JPL.  La instalación del componente es bastante sencilla y muy parecida a la instalación de otros módulos en Visual Studio.Net aunque tambíen puede ser instalado como módulo independiente. </p>
<p><strong>Ejemplo:</strong> </p>
<div class="codigo">
<pre>&lt;!-- template.html --&gt;
&lt;HTML&gt;
  &lt;HEAD&gt;&lt;TITLE&gt;No Title&lt;/TITLE&gt;&lt;/HEAD&gt;
  &lt;BODY bgcolor="#FFFFFF"&gt;
    &lt;TABLE border="0"&gt;
      &lt;TR&gt;
        &lt;TD&gt;&lt;tem:navigation&gt;navigation&lt;/tem:navigation&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;tem:main /&gt;&lt;/TD&gt;
      &lt;/TR&gt;
      &lt;TR&gt;&lt;TD colspan="2"&gt;
        &lt;tem:footer&gt;Copyright joel.net 2003.&lt;/tem:footer&gt;
      &lt;/TD&gt;&lt;/TR&gt;
    &lt;/TABLE&gt;
    &lt;BR&gt;&lt;BR&gt;
  &lt;/BODY&gt;
&lt;/HTML&gt;
&lt;!-- page.aspx --&gt;
&lt;%@ Register TagPrefix="cc1" NameSpace="template" Assembly="template" %&gt;
&lt;cc1:template id="Template1" runat="server" path="./template.html" /&gt;
&lt;asp:Panel id="tem_main" runat="server"&gt;
  &lt;B&gt;This should go in the main section!&lt;/B&gt;
&lt;/asp:Panel&gt; </pre>
</div>
<h3>Conclusiones </h3>
<p>Hemos visto sólo algunos de la gran diversidad de proyectos similares a Smarty en diversos lenguajes.  La mayoría emplean una sintáxis similar de plantillas y otros como el caso de Java que utiliza XML para definir la plantilla (que en modo particular me a parecido bastante interesante).  </p>
<p>También, vale la pena mencionar a Joel.Net que es un sistema bastante sencillo de utilizar para desarrolladores en ASP.Net y cuyo punto a favor es el ser libre y código abierto. Cada uno de los desarrollos en distinto y las alternativas vistas aquí son válidas. </p>
<p>En modo muy personal optaría por Smarty en desarrollo con PHP pues a demostrado ser un sistema muy bueno y con grandes prestaciones.  Igualmente, su proyecto en Ruby, Canny merece ser considerado para desarrolladores en este lenguaje. </p>
<p>Cada grupo deberá escoger el que más considere adecuado para su proyecto. Incluso, muchos optarán por no utilizar ningún sistema de plantillas. Eso queda muy a discreción del grupo de programadores. Aunque el proyecto sea algo pequeño, siempre es una buena práctica utilizar plantillas para separar la lógica de programación y el diseño. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smarty: a nivel avanzado</title>
		<link>http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 20:26:32 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smarty-a-nivel-avanzado/</guid>
		<description><![CDATA[Smarty es una herramienta que permite crear plantillas, personalizar, adaptar y distribuir funcionabilidades complejas dentro de un marco de desarrollo limpio.  Smarty cuenta con una sintáxis propia que lo hace muy atractivo de utilizar y sencillo en especial para diseñadores web. 
Siguiendo con nuestra serie de artículos: Smarty: razones para utilizar plantillas en mis [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Smarty es una herramienta que permite crear plantillas, personalizar, adaptar y distribuir funcionabilidades complejas dentro de un marco de desarrollo limpio.  Smarty cuenta con una sintáxis propia que lo hace muy atractivo de utilizar y sencillo en especial para diseñadores web. </span><span id="more-3421"></span></p>
<p>Siguiendo con nuestra serie de artículos: <a href="http://www.maestrosdelweb.com/editorial/smarty-plantillas/">Smarty: razones para utilizar plantillas en mis proyectos</a>, <a href="http://www.maestrosdelweb.com/editorial/smarty-instalacion/">Smarty: requerimientos, instalación y aprende a programar</a>, ahora nos corresponde hablar sobre Smarty pero a nivel avanzado. <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a> cuenta con estructuras de control propias, cuando compilamos nuestra plantilla, verificará que no haya sido procesada antes, haciendo que la carga sea más rápida.</p>
<p>En la carpeta definida para los archivos compilados de las plantillas encontraremos el código <a href="http://www.maestrosdelweb.com/editorial/como-optimizar-tus-aplicaciones-php/">PHP</a>. Lo que demuestra que aunque la plantilla original tenga una sintaxis distinta, el archivo generado y ejecutado es un archivo PHP.  </p>
<h3>Calificadores Smarty </h3>
<p>En todo lenguaje existen los calificadores, que permiten hacer comparaciones entre variables.  Smarty tiene los propios un tanto distintos a los que estamos acostumbrados: </p>
<p><strong>Tabla: </strong>para los operadores lo recomendable es utilizar las alternativas, pero también es permitido utilizar los calificadores originales. Para los operadores <strong>AND / OR</strong> puede utilizarse el operador lógico <strong>(and / or)</strong> o <strong>&#038;&#038; (and) /  | | (or)</strong>. </p>
<h3>Estructuras de control en Smarty </h3>
<div class="codigo">
<pre>Sentencia IF:
{if $name eq "Fred"}
      Welcome Sir.
{elseif $name eq "Wilma" or $name eq "Vilma"}
      Welcome Ma'am.
{else}
      Welcome, whatever you are.
{/if} </pre>
</div>
<h3>Sentencia SECTION: </h3>
<p>Las <strong>section</strong> del template son usadas para realizar un ciclo <code>(loop)</code> de un arreglo de datos. Todas las etiquetas <code>{section}</code> deben tener su par <code>{/section}</code>. Los parámetros requeridos son <code>name y loop</code>. El nombre de la <strong>section</strong> puede ser el que usted quiera, formado por letras, números y subrayados. </p>
<p>Las <strong>sections</strong> pueden ser anidadas pero diferenciando unas de otras. Las variables del <strong>loop</strong> (normalmente una matriz de valores) determina el número de veces del <code>loop</code> de la <strong>section</strong>. </p>
<p>Cuando estuviera mostrando una variable dentro de una section, el nombre de la <strong>section</strong> debe estar al lado de la variable dentro de corchetes <strong>[]</strong>. <code>sectionelse</code> es ejecutado cuando no hubiera valores para la variable del <code>loop(ciclo)</code>. </p>
<div class="codigo">
<pre>&lt;?php
      $data = array(1000,1001,1002);
      $smarty-&gt;assign('custid',$data);
?&gt;
{* este ejemplo imprime todos los valores del arreglo *}
{section name = customer loop = $custid}
      id: {$custid[customer]} &lt;br /&gt;
{/section}
&lt;hr /&gt;
{* imprime todos los valores del arreglo en orden descendente *}
{section name=foo loop=$custid step=-1}
      {$custid[foo]} &lt;br /&gt;
{sectionelse}
      no hay valores en la variable
{/section} </pre>
</div>
<p>También, puede hacerse un ciclo sin un arreglo para tratar. Este ejemplo iniciará el contador en 10 e irá de 2 en 2 hasta el número 20: </p>
<div class="codigo">
<pre>{section name = foo start = 10 loop = 20 step = 2}
      {$smarty.section.foo.index}
{/section} </pre>
</div>
<h3>Sentencia FOREACH: </h3>
<p>Los ciclos <strong>foreach</strong> son una alternativa para <code>loop {section}</code>. Foreach es usado para pegar cada elemento de una matriz asociativa simple. La sintaxis para <code>foreach</code> es mucho más simple que <code>section</code>, pero tiene la desventaja de que solo puede ser usada en una única matriz, la etiqueta <code>{foreach}</code> debe tener su par <code>{/foreach}</code>. </p>
<p>Los parámetros requeridos son <strong>from e item</strong>, el nombre del ciclo <code>foreach</code> puede ser cualquier cosa que usted quiera, hecho de letras, números y subrayados. Los ciclos  <code>foreach</code> pueden ser anidados, y el nombre de los ciclos anidados, debe ser diferente uno de otro. La variable <code>from</code> (normalmente una matriz de valores) determina el número de veces del ciclo  <code>foreach</code>, el cual será ejecutando cuando no hubiran más valores en la variable<code> from</code>. </p>
<div class="codigo">
<pre>
&lt;?php
      $arr = array( 1001,1002,1003);
      $smarty-&gt;assign('custid', $arr);
?&gt;
{* este ejemplo muestra todos los valores de la matriz $custid *}
{foreach from = $custid item = curr_id}
      id: {$curr_id}&lt;br /&gt;
{/foreach} </pre>
</div>
<p>Recordemos que para arreglos asociativos, el signo de separación es el punto <strong>( . )</strong>.  Además, existe un conjunto de propiedades disponibles dentro del ciclo, como el número de interacción, la llave asociativa, etc. </p>
<h3>Otras funciones dentro de la plantilla Smarty: </h3>
<p>Smarty tiene un conjunto de funciones integradas bastante grandes,  enumerar cada una de ellas con sus características y mostrar un ejemplo, haría que este artículo fuese demasiado extenso.  A continuación, muestro un listado de algunas funciones interesantes y una pequeña descripción: </p>
<ul>
<li><strong>include_php: </strong> Incluye un archivo PHP dentro de la plantilla.  Util para obtener información de otros recursos.</li>
<li><strong>capture:</strong> es usado para recolectar toda la salida del template en una variable en lugar de mostrarla.</li>
<li><strong>ldelim, rdelim:</strong> son usados para escapar delimitadores en el template, en nuestro caso &#8220;{&#8221; or &#8220;}&#8221;.</li>
<li><strong>literal:</strong> permite que un bloque de texto sea tomado literalmente, no siendo interpretado por Smarty.
<li><strong>php:</strong> incrusta código PHP dentro de la plantilla.  No recomendado.</li>
<li><strong>assign:</strong>  Es usado para definir valores a las variables de template durante la ejecución del template.</li>
<li><strong>cycle: </strong>es usado para hacer un ciclo a través de un conjunto de valores. Esto hace mas fácil alternar entre dos o mas colores en una tabla, o ciclos a travéz de una matriz de valores.</li>
<li><strong>html_*:</strong>  funciones especiales para tratamiendo de cuadros de selección, imágenes, listas de selección, cuadros de fecha, etc.</li>
<li><strong>math:</strong> soporte para definición de funciones matemáticas.</li>
<li><strong>mailto: </strong>soporte automátizado para creación de vínculos de correo electrónico con posibilidad de codificación. </li>
</ul>
<h3>Extendiendo Smarty con Plugins: </h3>
<p>Smarty puede ser personalizado, agregando nuevos plugins con lo cual automatizamos funciones para ser utilizadas dentro del template.   </p>
<p>Podemos agregar nuestros propios scripts para extender: funciones, modificadores, funciones de bloque, funciones de compilación, prefiltros, postfiltros, filtros de salida, recursos e inserts.  Generalmente escribiremos funciones y modificadores. </p>
<h3>Nombres convencionales </h3>
<p>Los archivos y funciones de Plugin deben seguir una convención de apariencia muy especifica a fin de que pueda ser localizada por el Smarty. Los archivos de plugin deben ser nombrados de la siguiente forma: type.name.php. Donde <code>type</code> es uno de los siguientes tipo de plugin: </p>
<ul>
<li>function</li>
<li>modifier</li>
<li>block</li>
<li>compiler</li>
<li>prefilter</li>
<li>postfilter</li>
<li>outputfilter</li>
<li>resource</li>
<li>insert </li>
</ul>
<p>Algunos ejemplos: <code>function.html_select_date.php</code>, <code>resource.db.php</code>, <code>modifier.spacify.php</code>. Las funciones de plugin dentro de los archivos de plugin deben ser nombradas de la siguiente forma: <code>smarty_type _name() </code>.</p>
<div class="codigo">
<pre>&lt;?php
      /*
       * Smarty plugin
       * -------------------------------------------------------------
       * File: function.eightball.php
       * Type: function
       * Name: eightball
       * Purpose: outputs a random magic answer
       * -------------------------------------------------------------
       */
      function smarty_function_eightball($params, &#038;$smarty)
      {
            $answers = array('Yes',
                             'No',
                             'No way',
                             'Outlook not so good',
                             'Ask again soon',
                             'Maybe in your reality');
            $result = array_rand($answers);
            return $answers[$result];
      }
?&gt;
Question: Will we ever have time travel?
Answer:   {eightball}. </pre>
</div>
<p>Ahora bien, debemos reconocer que no existe solamente Smarty como motor de plantillas, sino que existen muchas más alternativas de proyectos con características similares y otras funcionabilidades.</p>
<p>En el próximo artículo y final de la serie sobre Smarty, enumeraremos cuales son esas alternativas junto con sus principales características. En fin, <a href="http://smarty.php.net">Smarty </a>demuestra ser una herramienta valiosa, open-source y  con una gran capacidad de expansión.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smarty: requerimientos, instalación y aprende a programar</title>
		<link>http://www.maestrosdelweb.com/editorial/smarty-instalacion/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smarty-instalacion/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 07:00:08 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/smarty-instalacion/</guid>
		<description><![CDATA[Smarty es una herramienta ideal como motor de plantillas, aprender su funcionamiento y las capacidades con las que cuenta, nos ayudará al rendimiento en el proceso del desarrollo de una aplicación web.
En el artículo Smarty: razones para utilizar plantillas en mis proyectos les hablé sobre las principales características y razones por las que es importante [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Smarty es una herramienta ideal como motor de plantillas, aprender su funcionamiento y las capacidades con las que cuenta, nos ayudará al rendimiento en el proceso del desarrollo de una aplicación web.</span><span id="more-3381"></span></p>
<p>En el artículo <a href="http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smarty-razones-para-utilizar-plantillas-en-mis-proyectos/">Smarty: razones para utilizar plantillas en mis proyectos</a> les hablé sobre las principales características y razones por las que es importante conocer Smarty. También hablamos acerca de sus capacidades de una manera muy general.  En este nuevo artículo veremos por qué considerar Smarty para nuestros proyectos y cómo empezar a utilizarlo. </p>
<h3>Requerimientos </h3>
<p>Smarty requiere un servidor web corriendo <strong>PHP 4.0.6 o posterior</strong>.  Para obtener los archivos debemos <a href="http://smarty.php.net">descargarlos</a> desde la página del proyecto <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a>.  Ahí se encontrará la última versión del mismo. </p>
<h3>Método de instalación </h3>
<p>Existen varios métodos para instalar Smarty en nuestro proyecto, cuando hemos descargado el paquete comprimido, encontraremos una serie de carpetas.  Los scripts del sistema están en el directorio de distribución <code>/LIBS/</code>.  Smarty puede ser instalado en una carpeta fuera del directorio raíz dentro de nuestro servidor (configurando la directiva <code>include_path</code> en el archivo <code>php.ini</code>) o estar en una carpeta dentro de la estructura de directorios del sitio.  Lo importante es que cuando creemos el objeto referencia, el interprete pueda localizar el archivo base <code>Smarty.class.php</code>:  </p>
<div class="codigo">
<pre>&lt;?php
      # Ejemplo de inclusión del archivo Smarty.class.php y creación del
      # objeto Smarty
      require('/path/relativo|absoluto/Smarty.class.php');
      $smarty = new Smarty;
?&gt;</pre>
</div>
<p>Smarty utiliza cuatro directorios para procesar las plantillas: <code>templates/</code>, <code>templates_c/</code>,<code> cache/ </code>y <code>configs/</code>.  Los directorios <code>templates_c/</code> y <code>/cache</code> necesitan permisos de lectura y escritura. Estos directorios son por defecto, pero cuando se crea la instancia del objeto, pueden definirse en tiempo de ejecución: </p>
<div class="codigo">
<pre>&lt;?php
      require('Smarty.class.php');
      $smarty = new Smarty;
      $smarty->template_dir = '/smarty/templates/';
      $smarty->compile_dir = '/smarty/compiles/';
      $smarty->config_dir   = '/smarty/configs/'
      $smarty->cache_dir    = '/smarty/cache/';
      $smarty->assign('name','Ned');
      $smarty->display('index.tpl');
?&gt;</pre>
</div>
<h3>Sintáxis básica: </h3>
<p>Todas las etiquetas del template deben estar marcadas por delimitadores. Por defecto, estos delimitadores son <code>{ y }</code>. En Smarty, todo el contenido fuera de los delimitadores es mostrado como contenido estático o igual (sin cambios). Cuando Smarty encuentra etiquetas en el template, trata de interpretarlos e intenta mostrar la salida apropiada en su lugar.   </p>
<p>Cuando incluimos código en <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript </a>o <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> dentro de la plantilla provocaremos un error.  Esto suelen pasar por que este código utiliza también las llaves.  La solución a este problema consiste en separar este código en archivos y utilizar el método estándar de <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML </a> para su inclusión o la utilización de bloques <code>{literal} {/literal}</code> para agruparlos.  Este bloque indica al motor de Smarty que no interprete el contenido del mismo. </p>
<p>Los comentarios son delimitados por <code>{* y *}</code>.  Las variables son referenciadas con el signo de <code>( $ )</code> y las constantes con signo de numeral: </p>
<ul>
<li><code>{ * foo * }</code>  <-- comentario de plantilla, no se muestra en HTML</li>
<li><code>{$foo}</code>   <-- desplegando el valor de la variable</li>
<li><code>{$foo[4]} </code>  <-- desplegando el quinto elemento del arreglo</li>
<li><code>{$foo.bar} </code>  <-- mostrando el valor de la llave "bar"</li>
<li><code>{$foo.$bar}</code>  <-- mostrando el valor de la llave correspondiente al valor de la variable "bar"</li>
<li><code>{$foo->bar}</code>  <-- desplegando el valor de la propiedad bar (objeto)</li>
<li><code>{$foo->bar()} </code> <-- desplegando el valor que regresa la función "bar()"</li>
<li><code>{#foo#}</code>   <-- mostrando el valor de la constante "foo" </li>
</ul>
<p>Generalmente los valores de constantes son definidos en archivos de configuración almacenados en la carpeta <code>/configs/</code> del directorio donde está trabajando Smarty y tienen una configuración especial.  Su utilización es importante por muchos motivos, incluyendo texto en otros lenguajes o configuraciones de colores, frases cortas, etc.  Para cargar un archivo de configuración dentro de la plantilla puede utilizarse la función: <code>{config_load file="foo.conf"} </code></p>
<p>Dentro del archivo de configuración, la definición de las constantes puede ser: </p>
<ul>
<li> pageTitle       = &#8220;This is mine&#8221;</li>
<li>bodyBgColor     = &#8220;#eeeeee&#8221;</li>
<li>tableBorderSize = &#8220;3&#8243;</li>
<li>tableBgColor    = &#8220;#bbbbbb&#8221;</li>
<li>rowBgColor      = &#8220;#cccccc&#8221; </li>
</ul>
<h3>Funciones: </h3>
<p>Cada etiqueta Smarty muestra una variable o utiliza algún tipo de función. Las funciones son procesadas y mostradas colocando atributos de la función entre delimitadores.  Los atributos en las funciones son colocados al mismo formato que los atributos <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>: </p>
<div class="codigo">
<pre>
{include file="header.tpl"}
{include file="header.tpl" attrib_name="attrib value"}
{include file=$includeFile}
{include file=#includeFile# title="Smarty is cool"}
{html_select_date display_days=yes}
&lt;select name="company"&gt;
{html_options options=$choices selected=$selected}
&lt;/select&gt; </pre>
</div>
<h3>La variable reservada {$smarty} </h3>
<p>Esta variable es de un caso especial dentro de la plantilla.  Desde esta variable podemos acceder a objetos dentro de la plantilla, sentencias, bloques de instrucciones, variables y constantes de <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, también proporciona un método para acceder a las constantes de archivos cargados  y otras propiedades.  Para mayor información, es recomendable leer el documento de ayuda de Smarty. </p>
<h3>Modificadores de variables </h3>
<p>Dentro de la plantilla podemos hacer modificaciones a las variables enviadas desde PHP.  Smarty proporciona estos para trabajar dentro de la plantilla.  Para aplicar un modificador, es necesario especificar el valor seguido por <code>|</code> (pipe) y el nombre del modificador. Si un modificador necesita parámetros estos siguen al nombre del modificador y son separados por <code>:</code> (dos puntos). </p>
<div class="codigo">
<pre>{* aplicar modificador a la variable *}
{$title|upper}
{* modificador con atributos *}
{$title|truncate:40:"..."} </pre>
</div>
<p>También es posible combinar modificadores.  Simplemente basta con colocar el siguiente con la misma sintáxis; separados por <code>|</code>(pipe). </p>
<h3>Conclusiones </h3>
<p>Este tipo de herramientas facilitan mucho el trabajo a los desarrolladores,  lo importante es obtener de ellos todo el potencial.  Utilizando Smarty en nuestros proyectos nos será de mucho beneficio, al desarrollar con la herramienta podemos separar la lógica de programación de la presentación y además involucrar a los diseñadores dentro del proceso.  </p>
<p>Las plantillas pueden incluir programación pero al estar vinculada casi por completo a la presentación es mucho más fácil de comprender para los diseñadores, porque no incluye elementos confusos.  Además, el diseñador puede hacer los cambios que quiera sin depender del programador. </p>
<p><em>NOTA: los ejemplos incluidos en este artículo fueron extraídos del manual de referencia de Smarty. </em></p>
<h3>Lecturas recomendadas:</h3>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/smarty-razones-para-utilizar-plantillas-en-mis-proyectos/">Smarty: razones para utilizar plantillas en mis proyectos</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">¿Qué es Smarty?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smarty-instalacion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smarty: razones para utilizar plantillas en mis proyectos</title>
		<link>http://www.maestrosdelweb.com/editorial/smarty-plantillas/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smarty-plantillas/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 07:01:30 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smarty-plantillas/</guid>
		<description><![CDATA[Una de las prácticas más importantes dentro del mundo del desarrollo web es la separación del diseño y la programación.  El programador y el diseñador suelen ser personas distintas e Internet maneja un propio concepto de desarrollo gráfico muy diferente a la programación de aplicaciones de escritorio. 
A muchos programadores se nos ha inculcado [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Una de las prácticas más importantes dentro del mundo del desarrollo web es la separación del diseño y la programación.  El programador y el diseñador suelen ser personas distintas e Internet maneja un propio concepto de desarrollo gráfico muy diferente a la programación de aplicaciones de escritorio. </span><span id="more-3380"></span></p>
<p>A muchos programadores se nos ha inculcado este concepto, solemos trabajar en grupos de profesionales conformados por desarrolladores y diseñadores gráficos.  Luego,  que el diseñador a elaborado su propuesta gráfica, su diseño pasa al departamento de desarrollo para que a partir del mismo se elabore la programación. </p>
<p>Muchos profesionales de Internet suelen dedicarse al desarrollo de sitios, otros al desarrollo de aplicaciones.  Para ambos casos el diseño juega un papel muy importante.  Los que se dedican a la elaboración de sitios web, en muchos de los casos utilizan herramientas de terceros como <a href="http://www.maestrosdelweb.com/editorial/que-es-joomla/">Joomla!</a>, <a href="http://www.drupal.org.es/">Drupal</a>, <a href="http://www.maestrosdelweb.com/editorial/wordpress/">WordPress</a> (por mencionar algunos). </p>
<p>Estas herramientas de uso general suelen incluir un sistema de plantillas para manejar una diversidad mayor de diseños. Cada uno, utiliza un motor diferente que realiza su cometido. Lo importante es destacar que estas soluciones utilizan un sistema de plantillas o diseños para cambiar la cara del sitio que se esta administrando.</p>
<h3>Por qué es importante utilizar un sistema de plantillas </h3>
<p>La principal razón es que de esta manera ahorramos tiempo cuando depuramos la aplicación.  Una mala práctica de desarrollo consiste en embeber código de programación junto con el diseño y la maquetación.  La mayoría de lenguajes de programación permiten esta práctica.  El utilizar plantillas es importante por muchas razones: </p>
<ul>
<li>Es más sencillo darle mantenimiento a un script que solo incluye programación.</li>
<li> Dependiendo de nuestra programación, nuestra aplicación no depende del diseño y permite cambiarlo sin tener que hacer cambios dramáticos en la parte de programación.</li>
<li> Ambos profesionales pueden dedicarse a su área de experiencia.  Los programadores desarrollan y los diseñadores crean la vista de cara al usuario.</li>
</ul>
<h3>¿Qué es Smarty? </h3>
<p>En el caso particular de programación en <a href="http://www.maestrosdelweb.com/editorial/phpintro/">lenguaje PHP</a> existen muchas soluciones para el manejo de plantillas.  <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a> es un proyecto muy importante dentro del universo de paquetes desarrollados en PHP.  Smarty es un motor de plantillas muy potentes y versátil con capacidades de expansión a través de submódulos, extensiones y funciones.  </p>
<p>Los desarrolladores de Smarty supieron implementar un diseño de arquitectura de programación basado en el concepto de que una aplicación debe separar correctamente su lógica de programación de su diseño. Smarty incorpora una sistema de patrones de sintáxis para que dentro de la plantilla podamos incluir manejo y manipulación de variables; es decir dentro de una plantilla de Smarty puede hacerse programación. </p>
<p>Es importante mencionar que muchos proyectos importantes utilizan Smarty para el manejo de plantillas.  Además, hay implementaciones de Smarty en otros lenguajes de programación como el caso de  Canny desarrollado en <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a> y que puede interpretar las plantillas de Smarty. </p>
<p>Aparte de las ventajas antes mencionadas, Smarty es ideal para que los encargados del diseño puedan involucrase también en el desarrollo. Al separar la programación y  diseño, los diseñadores pueden participar lo cual permite que el proceso del proyecto sea mucho más rápido a la vez que da al diseñador un panorama mejor en cuanto a su arquitectura. </p>
<h3>Empezando a utilizar Smarty </h3>
<p>En su modo más sencillo, Smarty recibe variables para su impresión dentro de la plantilla.  Smarty trabaja a través de un objeto clase, las funciones más utilizadas serán: </p>
<div class="codigo">
<pre>$smarty->assign("ID_EN_PLANTILA", "VARIABLE"):  agrega la variable dentro del indice de variables de Smarty.
$smarty->display("NOMBRE_PLANTILLA"): despliegua y procesa la plantilla
</pre>
</div>
<h3>Ejemplo de inicialización de la variable de Smarty: </h3>
<div class="codigo">
<pre># Incluye la clase de Smarty
require "Smarty/libs/Smarty.class.php";                  

# Inicia el objeto
$smarty = new Smarty(); 

# Indica los directorios
$smarty->template_dir = "templates/";
$smarty->compile_dir  = "compiles/";
$smarty->caching      = false;
$smarty->cache_dir    = "cache/";
$smarty->config_dir   = "configs/"; 

# Manda variables a la plantilla
$smarty->assign("MY"        , $_SESSION["my"]);
$smarty->assign(&#8221;TITLE_PAGE&#8221;, &#8220;Smarty: Template Engine&#8221;); 

# Indica la plantilla
$smarty->assign(&#8221;template.tpl&#8221;); </pre>
</div>
<h3>Conceptos para la creación de plantillas en Smarty</h3>
<p>En el ejemplo anterior se ilustra el método de inicialización del objeto de Smarty, la cual es bastante sencilla.  Ahora bien, Smarty utiliza principalmente cuatro directorios: </p>
<p><strong>template_dir: </strong> El directorio donde se almacenan las plantillas.</p>
<p><strong>compile_dir:</strong> el directorio donde se almacenan los archivos compilados.  Este directorio debe tener permisos de lectura y escritura en el servidor.  Smarty utiliza un sistema bastante peculiar para compilar las plantillas.   La clase lee el archivo de la plantilla y cuando la compila, deja indicado dentro del archivo la fecha de generación.  Cuando se le vuelve a pasar al objeto que se procese la página, el motor verifica esa fecha y si no ha sufrido cambios, no lo procesa.  Esto es importante, por que de esta manera no compila algo ya listo para ser utilizado y ahorra tiempo en el servidor.</p>
<p><strong>config_dir:</strong>  ya se menciono que Smarty tiene una sintáxis propia.  Los archivos de configuración son un agregado del sistema.  El objetivo es que dentro de estos se almacenen valores de configuración que no cambian pero que es importante que permanezcan como valores de constante.  Dentro de estos archivos pueden  clasificarse las constantes en secciones y dentro del TPL pueden referenciarse de un modo particular. </p>
<h3>Conceptos: </h3>
<p>Una plantilla puede incluir varias plantillas con lo cual se consigue una estructura de árbol,  independiente del script. Smarty trabaja con todos los tipos de datos nativos en PHP.  Otras implementaciones en otros lenguajes podrían variar en este funcionamiento.</p>
<p>La sintaxis de Smarty es muy similar a la de PHP, aunque con modificaciones.  Por ejemplo las instrucciones se delimitan con llaves <code>(  { } )</code> ,  pueden agregarse comentarios dentro de la plantilla <code>(  { *    * }  )</code> , existen las estructuras de control<code> IF y FOREACH</code> (para el manejo de variables tipo Array) y otras variaciones de estructuras de control. Las variables se representan con el signo de <code>( $ )</code>.</p>
<p>Existen funciones para manipulación de datos, generalmente suelen invocarse después de la referencia a la variable, a través del carácter <code>( | )</code>, y los parámetros después de <code>( : )</code>.  Ejemplo: <code>{$MY->username[strlen} </code></p>
<h3>Consejos: </h3>
<p>Aunque puede incluirse código de PHP dentro de la plantilla, esta práctica no es recomendada. Una buena práctica de programación consiste en enviar variables en arreglos sin ningún tratamiento en <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> para que la plantilla proceda a tratarla. Como se describió anteriormente, puede incluirse plantillas dentro de plantillas.  Esto puede resultan beneficioso para optimizar aún más la plantilla, incluyendo porciones de plantilla en varios archivos. </p>
<p>Smarty es una gran solución de motor de plantillas.  Contiene una gran arquitectura que puede ser ampliada según nuestras necesidades.  Esta ha sido solo una pequeña introducción al paquete.  En próximos artículos describiremos a mayor detalle cada una de las características dentro del sistema para que obtengamos el máximo desempeño del mismo. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smarty-plantillas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Maquetación de la aplicación (Quinto Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/#comments</comments>
		<pubDate>Thu, 01 Nov 2007 07:00:56 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/</guid>
		<description><![CDATA[XHTML, CSS y JavaScript son las tecnologías envueltas en el nivel de presentación de cara al usuario final, tres aspectos fundamentales independientes de las tecnologías detrás que apoyaron la presentación del contenido en el navegador.
Finalizamos con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre Desarrollo multinivel para aplicaciones basadas [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">XHTML, CSS y JavaScript son las tecnologías envueltas en el nivel de presentación de cara al usuario final, tres aspectos fundamentales independientes de las tecnologías detrás que apoyaron la presentación del contenido en el navegador.</span><span id="more-3326"></span></p>
<p>Finalizamos con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a>, <a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de programación (Segundo Nivel:L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/">Estructura de contenidos (Tercer Nivel:L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/">Diseño Gráfico (Cuarto Nivel: L5)</a> y terminamos con la Maquetación de la aplicación.</p>
<p>Nuestro usuario final estará en contacto con nuestra aplicación através del navegador y las tecnologías que soporta son XHTML, CSS y JavaScript, principalmente.  Para muchos de los diseñadores y programadores esta parte envuelve un cierto grado de expectación.</p>
<p>Al existir tantas alternativas de <a href="http://www.maestrosdelweb.com/editorial/%C2%BFcomo-elegir-un-navegador-web/">navegadores</a>, debemos tener especial cuidado en que nuestro sitio sea &#8220;renderizado&#8221; por la mayoría de ellos. El que nuestro sitio este accesible para la mayoría es importante; que este accesible para todos es trascendental (en este aspecto, me refiero a lo estupendo que es, que se vea bien en todos). </p>
<p>Las diferencias en el modo de trabajo de cada uno hace que para muchos  profesionales de integración y maquetación, sea un completo dolor de cabeza, el tratar de dar soporte a cada uno, con sus diferencias.  Pero debemos de recordar que nuestra misión es que nuestro proyecto pueda ser visto por nuestros usuarios, sin importar su sistema operativo, navegador y configuraciones especiales.  </p>
<p>Es perfectamente comprensible que creamos que existe mucha dificultad en lograr el soporte para todos.  Esta será una labor constante; reparando y probando el desempeño del sitio en diversas configuraciones poco a poco y corrigiendo los fallos que puedan existir.</p>
<h3>Maquetar para múltiples dispositivos</h3>
<p>Este tema puede llegar a ser un tanto controversial.  ¿Por qué deberíamos preparar nuestro sitio para que sea visto en diferentes dispositivos? ¿Vale la pena hacer un esfuerzo en que mi proyecto pueda verse en un computador, un teléfono o mi iPod?.  En mi opinión la respuesta es afirmativa, según mis perspectivas de proyecto.</p>
<p>El maquetar para más de un explorador ya es un reto en si; el hacerlo para teléfonos con acceso a Internet de alta velocidad, hace que mi aplicación sea y se vea más potente. Pero, ¿Cómo puede maquetarse para múltiples dispositivos?.</p>
<p>La respuesta es usar plantillas y dotar a la aplicación de un sistema de detección del explorador y/o dispositivo.  Por ello, es importante que si vamos a realizar una aplicación bajo esta estos paradigmas, las salidas deben ser en un formato estándar, con el cual, al cambiar entre distintos temas, no estemos redundando en programación, duplicando scripts, etc.</p>
<p>Existen en la actualidad, varios sistemas de manejo de plantillas.  Para los desarrolladores en <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, el más conocido es <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a>.  Este sistema de plantillas trabaja bajo una estupenda metodología de separación del contenido del diseño, dotando al archivo de la plantilla de un conjunto de etiquetas, que le permite agregar programación y trabajando con las variables enviadas desde el lenguaje.</p>
<p>Existen otros sistemas de plantillas en diferentes lenguajes.  Muchos <a href="http://www.maestrosdelweb.com/editorial/los-frameworks-de-php-agilizan-tu-trabajo/">frameworks</a> ya cuentan con un sistema de plantillas diseñado para aprovechar las características del lenguaje y hacer más fácil el crear temas y hacer la maquetación del sitio.  </p>
<p>Yo doy un voto a la forma en que trabaja Smarty, también existe un sistema de plantillas bajo <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a> que interpreta el formato de archivo de Smarty. Una idea en cuanto al uso de varias plantillas es que se concentra en un archivo la información que va a salir en determinado momento (podría ser un archivo por salida o por proporción de contenido a volcar) y que el archivo que contiene la salida pueda determinar el tema que hay que desplegar.</p>
<p>Cuando diseñamos un tema para el navegador y posteriormente lo maquetamos debemos tomar en cuenta varios aspectos:</p>
<ul>
<li>Utilizar con cuidado los tamaños de los elementos.  En la actualidad, el estándar de navegación en tamaño de resolución de pantalla es 1024&#215;768.  Muchos desarrolladores cuentan con monitores con una capacitad mayor.  Es recomendable que maquetemos a esta resolución estándar y que nuestro sitio se vea con un diseño adaptativo.  Algunos expertos recomiendan el uso de valores <strong>em</strong> en vez de valores en <strong>pixeles</strong> para que el texto se adapta al tamaño de la resolución.</li>
<li>Cuando maquetemos, hagamoslo según los estándares.  La utilización de estándares asegurará que el navegador tratará el documento de una mejor manera. Pero no nos asegura un 100% de soporte.</li>
</ul>
<h3>Maquetación para una actualización</h3>
<p>El ejemplo más claro en cuanto al factor de diseño y maquetación es el cambio de paradigma del modelo convencional basado en una estructura de tablas a la actual, basada en contenedores fluidos y div&#8217;s. </p>
<p>El formato HTML como tal va camino a una profunda reestructuración y actualización del modelo (HTML 5 y XHTML 2), dejando fuera ciertos elementos considerados obsoletos e introduciendo otros nuevos, llamados etiquetas semánticas.  El desarrollo de cualquier proyecto debe contemplar la actualización para el futuro, tanto del diseño como de la parte estructural del lenguaje que lo sustenta.  Esto nos dice que no debemos dejar abandonado el proyecto.</p>
<p>Además, también debemos contemplar los cambios que se producen a nivel de exploradores.  Lo que funcionaba perfectamente en la versión anterior del programa, pueda que en la nueva funcione de manera distinta.  </p>
<p>Por ejemplo:  la versión 6 o anterior de Internet Explorer no contaba con soporte nativo para el despliegue de imágenes en <a href="http://www.maestrosdelweb.com/editorial/migrardegifapng/">formato PNG</a>; sino a través de un filtro, podría lograrse el tan esperado efecto de transparencia.  </p>
<p>Esto causo que por largo tiempo, las páginas <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML </a>no pudieran incluir imágenes en este formato.  La solución a este caso fue el uso de tecnologías como <a href="http://www.maestrosdelweb.com/editorial/flash/">Flash</a> (que incluía otros efectos). Otro ejemplo es el tan sonado caso Microsoft-EOLAS, por el cual Microsoft tendrá que modificar el comportamiento de los objetos embebidos como QuickTime, Java Applets, Flash, etc. Incrustandoles un marco de activación.</p>
<p>Todos estos cambios que se vienen en nuevas versiones hacen que la experiencia del usuario cambie.  Debemos estar atentos a ellos para solucionarlos. Como conclusión a esta sección del artículo puedo inferir que preparar la maquetación para una actualización simplemente nos ayudará a mejorar, agilizar y optimizar los cambios futuros que debamos desarrollar.  </p>
<h3>Separación completa del esquema HTML, CSS y JavaScript</h3>
<p>Al fin llegamos a la parte práctica del artículo.  ¿Por qué separar la maquetación en HTML, CSS y JavaScript?. La respuesta es bastante obvia.  Para mejorar el rendimiento.  Los beneficios son bastantes, igual que los retos:</p>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> proporciona la estructura</li>
<li><a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> define el diseño de los elementos</li>
<li><a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript</a> le da una funcionabilidad adicional</li>
</ul>
<p>Al separar la presentación al usuario estamos:</p>
<ul>
<li>Mejorando el rendimiento dado que consumimos menos ancho de banda en transferencia.</li>
<li>Reutilizando código, diseño, etc.</li>
<li>Agilizando el proceso de actualización.  El tiempo que nos lleve realizar la actualización es directamente proporcional al número de archivos que debamos cambiar para realizar dicha actualización.</li>
</ul>
<p><a href="http://www.maestrosdelweb.com/util/maquetacion-l5.zip">Descargar el ejemplo.</a></p>
<p>En el modelo L5 la maquetación es la fase última de desarrollo del proyecto.  Hasta aquí hemos realizado un gran esfuerzo para construir una aplicación que cumpla con las expectativas de nuestro cliente y usuarios, a la vez que sea robusta y este bien estructurada.</p>
<p>Hemos aplicado una metodología de desarrollo clara, sencilla y basada en muchos conceptos nuevos y otros que posiblemente ya hemos escuchar, pero que ya enfocados sobre el modelo son simples de entender y aplicar.  </p>
<p>El propósito fundamental de esta guía fue proponer el <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">modelo L5</a> como un esquema de separación de las capas de desarrollo de proyectos para Internet. La oportunidad está abierta para aquellos que sepan llevar a cabo proyectos importantes, sostenibles y estables.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Diseño Gráfico (Cuarto Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 07:00:38 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Diseño]]></category>

		<category><![CDATA[Editorial]]></category>

		<category><![CDATA[Usabilidad]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/</guid>
		<description><![CDATA[Hasta hace poco los diseños elegantes en colores sobrios y la utilización de tecnologías externas como Flash eran el referente del diseño para Internet, ahora se habla de la Web 2.0 y los diseños han cambiado drásticamente.
Siguiendo con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre Desarrollo multinivel para [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Hasta hace poco los diseños elegantes en colores sobrios y la utilización de tecnologías externas como Flash eran el referente del diseño para Internet, ahora se habla de la Web 2.0 y los diseños han cambiado drásticamente.</span><span id="more-3327"></span></p>
<p>Siguiendo con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a>, <a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de programación (Segundo Nivel:L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/">Estructura de contenidos (Tercer Nivel:L5)</a> y ahora abordaré el Cuarto Nivel: L5 dedicado al diseño gráfico.</p>
<p>Ahora, parece ser que la tendencia de desarrollo esta muy ligada a lo casual, con colores pastel, letras grandes, muy al estilo tipográfico y de revistas.  Es increíble como los gustos han cambiado en tan poco tiempo; y seguirán cambiando en lo futuro. </p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-01.jpg' alt='diseno1' /></p>
<p>Al parecer en Internet la tendencias de la utilización de gráficos estáticos está volviendo con un toque  moderno y suelto. Si estamos dedicados al desarrollo y seguimiento de un proyecto publicado en Internet, una aplicación para clientes y todo aquel proyecto que esté en comunicación con usuarios fuera del ámbito administrativo, estar atento a las tendencias de diseño, es muy importante:</p>
<ul>
<li>Indica a nuestros usuarios que la aplicación está siendo supervisada y no es un proyecto que se ha descuidado o abandonado.  </li>
<li>Ayuda a mejorar la experiencia del usuario y llegar a un grado mayor de <a href="http://www.maestrosdelweb.com/editorial/usabilidad/">usabilidad</a>.</li>
</ul>
<p>Podría también decirse que ayuda a que el proyecto se vea más fresco e incluso a la moda en diseño, aunque sea una aplicación con bastante recorrido en <a href="http://www.maestrosdelweb.com/editorial/usointernet/">Internet</a>.</p>
<h3>Expresando el contenido de una manera gráfica</h3>
<p>Ahora, dejando un poco de lado la parte de las tendencias y centrándonos en la parte tal cual de la elaboración de diseño, debemos siempre recordar que sea cual sea nuestra inspiración de diseño, finalmente este deberá adaptarse al contenido real de la página y al público  que este enfocado.</p>
<p>Los diseñadores deberían trabajar conjuntamente con los encargados del contenido y los profesionales encargados de la maquetación final del sitio o aplicación.  Esto con el objetivo de que el diseñador sepa del contenido que debe incluirse en el diseño y que conozca las limitaciones del medio de Internet.</p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-03.jpg' alt='diseno2' /></p>
<p>Un error que suele cometerse con bastante regularidad en el desarrollo para Internet es que los diseñadores suelen ser los primeros en el orden de elaboración de proyectos.  Generalmente los encargados del diseño suelen presentar sus propuestas de diseño  antes de lo que realmente se deberían de presentar en detrimento de los encargados de la maquetación del sitio.  </p>
<p>El resultado es de esperarse:  diseños completamente fuera de la realidad de Internet, muy difíciles de plasmar en <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>; a veces con mucho contenido dinámico, animaciones y distractores. Por suerte, muchos profesionales del diseño en la actualidad, ya no suelen cometer estas faltas. </p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-35.jpg' alt='diseno6' /></p>
<p>Aquí sería conveniente que los diseñadores trabajen conjuntamente con el resto del equipo asignado para el proyecto, para tomar ideas de ellos y cuando haya un consenso de los diseños propuestos, mostrárselos al cliente para su aprobación.</p>
<p>Un buen diseño se acoplará al contenido del sitio y le dará la marca distintiva de originalidad que debe estar presente en todo proyecto para Internet.  Los diseños simples siempre serán una buena opción, aunque para ciertos casos es interesante probar elementos nuevos.</p>
<p>La regla general será hacer diseños agradables en donde la distribución del contenido este en el ángulo de la página donde cumpla su cometido fundamental.</p>
<h3>Factores de diseño para un proyecto dinámico y escalable</h3>
<p>Lo fundamental en todo diseño para Internet es la sencillez, es decir que no este cargado con elementos que distraigan o estén fuera de lugar, eso es elemental.  Las ventajas se centran en que un diseño sencillo es más apreciado que un diseño complejo con tantos detalles.  </p>
<p>Además, los beneficios que también implica incluyen un menor consumo de ancho de banda en el producto final. Como en todo lo anteriormente dicho, el uso de <a href="http://www.maestrosdelweb.com/editorial/flash/">Flash</a> debería estar restringido al mínimo o para salir de la monotonía de las imágenes GIF y que nunca se coloque información o contenido dentro; en especial si este contenido ayuda al posicionamiento del sitio en motores de búsqueda.</p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-39.jpg' alt='diseno4' /></p>
<p>También es importante tomar en cuenta la <a href="http://www.maestrosdelweb.com/editorial/usabilidad/">usabilidad</a>: la buena distribución del contenido, la inclusión de guías para localizar de manera fácil lo que el navegante está buscando, el uso de estándares de diseño como la inclusión de un vínculo en el logotipo para ir a la página de inicio o la simple presencia del famoso puntero de la &#8220;manita&#8221; para señalar vínculos.  Otra sugerencia es &#8220;ponerse del lado del usuario&#8221;.</p>
<p>Pienso que un diseño cumple con su misión cuando un navegante nuevo (entiéndase que nunca ha entrado a nuestro sitio con anterioridad) puede encontrar lo que busca en el menor tiempo requerido por que los elementos gráficos simplemente le guían, que gusta del diseño y que se toma el tiempo de colocarlo como marcador.  </p>
<p>El diseño siempre será fundamental en todo proyecto para Internet.  Un proyecto sin un buen diseño simplemente no servirá por que no hay atractivo en usarlo.  Y un diseño sin un buen contenido simplemente será una imagen bonita.  La tarea es trabajar conjuntamente y dejar que los profesionales trabajen en su área, siempre listos a escuchar a sus compañeros de equipo con los que tienen que trabajar para lograr el mejor resultado.</p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-241.jpg' alt='diseno5' /></p>
<p>Cuando <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">propuse L5 como un modelo de desarrollo</a>, deje como cuarto nivel al diseño de la interfaz, porque muchos profesionales de Internet envueltos en el desarrollo pueden  tener mucha experiencia en todas las áreas.</p>
<p>Pero el diseño es un área más con la que contará nuestra aplicación y solamente puede ser elaborado por profesionales con la sensibilidad única que se necesita para darle a nuestro proyecto ese toque de genialidad gráfica y artística.</p>
<p>Las imágenes proporcionadas en este artículo fueron extraídas del artículo: <a href="http://www.smashingmagazine.com/2007/07/04/inspiration-package-usable-elegant-inspiring-design-showcase">Inspiration Package: 60+ Usable &#038; Elegant Designs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Estructura de contenidos (Tercer Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 07:00:10 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/</guid>
		<description><![CDATA[Entre los objetivos de cada una de las aplicaciones que podamos construir, se contempla el distribuir la información con la que contemos en nuestra base y mostrar el contenido que nuestros usuarios requieren para satisfacer sus necesidades.
El contenido que se maneja dentro de la aplicación es fundamental para que los usuarios consideren atractivo ingresar a [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Entre los objetivos de cada una de las aplicaciones que podamos construir, se contempla el distribuir la información con la que contemos en nuestra base y mostrar el contenido que nuestros usuarios requieren para satisfacer sus necesidades.</span><span id="more-3223"></span></p>
<p>El contenido que se maneja dentro de la aplicación es fundamental para que los usuarios consideren atractivo ingresar a él. Es por ello que en el Modelo L5 es un aspecto que debe ser profundamente evaluado.</p>
<h3>La importancia del Contenido en el Modelo L5: </h3>
<p>En el <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">modelo L5</a> el contenido es el punto de unión entre la tecnología del Servidor y las tecnologías del cliente.  Muchas veces, para nuestros usuarios no importará la programación que haya sido envuelta en la generación del contenido, lo importante son los resultados.</p>
<p>Al dividir el modelo en cinco fases, agregué una especial, para hablar acerca del contenido.  El contenido que hemos extraído desde nuestra Base de Datos y hemos procesado dentro de la <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de Programación</a>, debe ser estructurado de una manera especial, para poder ser presentado al usuario final de la manera correcta. </p>
<p>El contenido, no debe ser estimado como el simple producto de nuestra labor, dentro de nuestra aplicación sino como el final de la misma.  Cuando hablo de la finalidad, me refiero a que es el valor y utilidad que le da a nuestra aplicación. </p>
<h3>Por qué trabajar con un modelo estándar basado en XML</h3>
<p><a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a> es un formato de documento, creado y pensado para la estructuración y el modelado de información.  No es una tecnología como <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a> ó <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a>. </p>
<p>XML simplifica en muchos casos la manipulación de la información dentro de los medios de almacenamiento y recuperación.  Todos sabemos que se basa en la definición de etiquetas y su estructuración a través de un modelo jerárquico. </p>
<p>Su uso en la generación del contenido que debemos presentar indicaría que no importará que tecnología apoyo su formación.  Siempre y cuando el formato del documento XML generado sea el mismo la aplicación podrá seguir operando sin ningún cambio aparente. </p>
<p>Existen diversas tecnologías derivadas de XML como los formatos SVG, MathML, RDF, XBL; cada una con una función específica, que nos ayudará en determinadas necesidades. Hay diferentes razones, por las que el uso de XML sea valioso en nuestros proyectos: </p>
<ul>
<li>Es un estándar.</li>
<li>Independiza la presentación del contenido de la tecnología empleada para generarlo, es decir, independiza la tecnología de servidor, de la tecnología del explorador.</li>
<li>Su uso nos permitirá hacer que módulos desarrollados en otros lenguajes puedan comunicarse con otros módulos, sin necesidad de hacer configuraciones adicionales.</li>
<li>Se adapta a nuestras necesidades, un documento XML, puede ser estructurado de diversas maneras y ampliado en su estructura, para que puedan ser agregados nuestros registros de campos y valores, sin que esto comprometa el uso que le da otros módulos que operaban con esa estructura antes de su cambio.</li>
</ul>
<p>Por tanto, es recomendable el uso de XML dentro de L5, su implementación en cualquier lenguaje de scripting es bastante sencilla, dada la multitud de módulos o parsers que existen en la actualidad para muchas plataformas. </p>
<h3>Formateo del documento XML </h3>
<p>Ahora bien, el siguiente paso sería el parseo del documento XML anteriormente generado.  Este  puede ser realizado por un lenguaje de scripting (que podría ser el mismo empleado para generar el XML, con el agravante que para muchos esto podría resultar en una redundancia y complejidad, dentro del proceso) o por el lenguaje del explorador a través de XSL o el mismo <a href="http://www.maestrosdelweb.com/editorial/diez-funciones-imprescindibles-en-javascript/">JavaScript </a> según sea la necesidad y el objeto del formato del documento. </p>
<p>En la primera opción: el parseo y recuperación de la información, en un formato nativo para el lenguaje de scripting, la razón fundamental es principalmente por la problemática que puede operar en sitios de Internet.  </p>
<p>La optimización para motores de búsqueda hace necesario que las páginas sean servidas como tal, en cuanto a su contenido que es el que interesa al motor de búsqueda. Si utilizásemos XSL para transformar el documento XML el motor de búsqueda no podría interpretar correctamente la página y esto sería en detrimento del posicionamiento del sitio. </p>
<p>Ahora bien la optimización en cuanto al uso de XSL podría ser utilizada en administradores o en herramientas web, que no requieran posicionamiento.  Pero, debemos de tener en cuenta el soporte de esto en navegadores.  En la actualidad, el mejor soporte es logrado en productos de la suite Mozilla. Pero también cuenta con el mismo soporte Internet Explorer, Opera y Safari.</p>
<h3>Optimización para múltiples dispositivos </h3>
<p>Otra ventaja importante es que cuanto separamos el contenido del diseño e incluso del <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> logramos que con implementaciones,  el <a href="http://www.maestrosdelweb.com/editorial/tu-sitio-web-en-dispositivos-moviles/">contenido se adapte a diversidad de dispositivos</a>. Si hablamos de navegadores también podemos incluir el uso de plantillas, diseños, skins y templates.  Una idea sería que un sitio sea personalizable en este aspecto. </p>
<p>Ahora, si nos referimos a múltiples dispositivos,  estamos indicando que nuestro sitio este disponible no solo vía un ordenador, sino a través de otros dispositivos con acceso a Internet, unidades móviles, teléfonos, etc. </p>
<p>Las nuevas tendencias muestran que Internet cobrará mayor auge y que el acceso no se hará solamente por computadores sino dispositivos, como teléfonos celulares, unidades móviles y cualquier dispositivo con acceso a Internet de alta velocidad vía Wi-Fi.</p>
<p>Un ejemplo claro, son las unidades iPhone y el nuevo iPod Touch, otras como el Blackberry y otros dispositivos.  Dependiendo del nivel de alcance y los servicios que quiera ofrecer nuestra aplicación, así podremos realizar soporte para múltiples dispositivos. </p>
<p>Tomando en cuenta este enunciado, sería fantástico que podamos hacer que nuestro proyecto, pueda verse en más de una plataforma distinta al ordenador.  Ese es el deseo de muchos entusiastas y de la propia W3C que busca que el Internet y la World Wide Web, sea accesible para todos, sin importar el dispositivo que utilicen para estar en línea. </p>
<p>El separar el contenido nos ayudará a cubrir esta necesidad para dar a nuestros usuarios una mayor calidad de experiencia bajo nuestros servicios. </p>
<h3>El esquema de contenido define la presentación </h3>
<p>Recapitulando, decimos que el contenido, manda sobre el diseño.  El diseño se adapta al contenido, el esquema de contenido define la presentación, utilizando XML podemos generar dicho esquema, dependiendo de cada uno de los contenidos que queramos desplegar.  Se adaptará a cada necesidad y el contenido entrará a formar parte del diseño a través de la maquetación. </p>
<p>Pero recordemos: el formato XML no es la única opción que podemos emplear, también existe otros lenguajes de marcado como JSON y YAML.  Obviamente, existe muchos más, pero su uso dependerá si cumple nuestras necesidades de la mejor forma.</p>
<p><a href="http://www.maestrosdelweb.com/util/xml.phps">Descargar ejemplo</a></p>
<h3>Lecturas relacionadas:</h3>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de programación (Segundo Nivel:L5)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lógica de programación (Segundo Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 13:48:38 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
		
		<category><![CDATA[Desarrollo Web]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/</guid>
		<description><![CDATA[En los inicios de la programación orientada a la web se han propuesto varios objetivos: que la aplicación cumpla con las características por las que fue creada y que esté disponible en cualquier medio con acceso a la tecnología de internet. ¿Por qué?
En los inicios de Internet, la programación se limitaba a presentar documentos estáticos. [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">En los inicios de la programación orientada a la web se han propuesto varios objetivos: que la aplicación cumpla con las características por las que fue creada y que esté disponible en cualquier medio con acceso a la tecnología de internet. ¿Por qué?</span><span id="more-3224"></span></p>
<p>En los inicios de Internet, la programación se limitaba a presentar documentos estáticos.  Conforme fue evolucionando, surgieron las tecnologías que actualmente conocemos con <strong>Lenguajes de Scripting</strong>. </p>
<p>En la actualidad, los lenguajes dominantes son <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP </a>y ASP.Net   les siguen de manera rezagada Pearl y JSP. Y como tecnologías que están tomando impulso tenemos <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a> (con su framework Rails)  y Python (en este punto, creo que la principal razón de que Python esté tomando impulso, es por el uso intensivo que Google le está dando). </p>
<p>Realmente, no interesa en un 100% que tipo de t