<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zenphp :: blog &#187; Sistema Gestor Contenidos</title>
	<atom:link href="http://blog.zenphp.es/category/sistema-gestor-contenidos/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zenphp.es</link>
	<description>Escribre tu aplicación como si fuera la última que escribieras</description>
	<lastBuildDate>Tue, 02 Feb 2010 09:03:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XCSS : reinventar la rueda del CSS dinámico</title>
		<link>http://blog.zenphp.es/2010/01/10/xcss-reinventar-la-rueda-del-css-dinamico/</link>
		<comments>http://blog.zenphp.es/2010/01/10/xcss-reinventar-la-rueda-del-css-dinamico/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 22:26:07 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[Funcionalidades]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[framework css]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programador php]]></category>
		<category><![CDATA[xcs]]></category>
		<category><![CDATA[xcss]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=241</guid>
		<description><![CDATA[En Febrero del 2008 diseñé una clase llamada XCS que utilizaba PHP para generar CSS dinámicamente, con la posibilidad de utilizar variables dentro del mismo fichero de reglas de estilo para hacer webs con contenido modificable fácilmente.
Hace poco he encontrado el &#8220;primer framework CSS orientado a objetos&#8221; como lo nombra a sí mismo Anton Pawlik [...]]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://blog.zenphp.es/2008/04/11/construyendo-un-sistema-gestor-de-contenidos-con-zenphp/" target="_blank">Febrero del 2008</a> diseñé <a title="Ver la clase XCS" href="https://forja.rediris.es/plugins/scmsvn/viewcvs.php/trunk/zenphp/clases/clase_zen_xcs.php?root=csl2-zenphp&amp;view=markup" target="_blank">una clase llamada XCS</a> que utilizaba PHP para generar CSS dinámicamente, con la posibilidad de utilizar variables dentro del mismo fichero de <strong>reglas de estilo</strong> para hacer webs con contenido modificable fácilmente.</p>
<p>Hace poco he encontrado el &#8220;primer framework CSS orientado a objetos&#8221; como lo nombra a sí mismo Anton Pawlik su autor, <a href="http://xcss.antpaw.org/">http://xcss.antpaw.org/</a> y que hace precisamente eso,&#8230;sin embargo ha tenido mucho éxito <img src='http://blog.zenphp.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>A pesar de su sencillez, (la clase principal no es muy complicada) no se diferencia demasiado de la que escribí basándome en otra al mismo tiempo&#8230;aunque no la he llegado a usar como <a href="http://programadorphp.org">programador php</a>&#8230;</p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=241&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_241"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2010/01/10/xcss-reinventar-la-rueda-del-css-dinamico/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comparativa ATK Framework &#8211; zenphp framework</title>
		<link>http://blog.zenphp.es/2009/12/18/comparativa-atk-framework-zenphp-framework/</link>
		<comments>http://blog.zenphp.es/2009/12/18/comparativa-atk-framework-zenphp-framework/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 08:35:21 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[administración]]></category>
		<category><![CDATA[administrador]]></category>
		<category><![CDATA[atk]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[comparativa]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[programador php]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=228</guid>
		<description><![CDATA[
Acabo de leer un artículo de Ivo Jansch, un profesional de Oracle diciendo que empresas de todos los tamaños tienen la necesidad de portar las aplicaciones de escritorio que usan bases de datos Oracle a aplicaciones web ,según nos dice, por la gran facilidad, usan un framework: ATK Framework.
El tesoro de este framework es la [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-235" title="atk_vs_zenphp" src="http://blog.zenphp.es/wp-content/uploads/2009/12/atk_vs_zenphp.jpg" alt="atk_vs_zenphp" width="431" height="92" /></p>
<p>Acabo de leer <a href="http://www.oracle.com/technology/pub/articles/jansch_atk.htm" target="_blank">un artículo de Ivo Jansch</a>, un profesional de <a href="http://www.oracle.com/" target="_blank">Oracle</a> diciendo que empresas de todos los tamaños tienen la necesidad de portar las aplicaciones de escritorio que usan bases de datos Oracle a aplicaciones web ,según nos dice, por la gran facilidad, usan un framework: <a href="http://www.atk-framework.com/" target="_blank">ATK Framework</a>.</p>
<p>El tesoro de este framework es la gran facilidad para crear administradores con sólo varias líneas de código, y es algo que me ha gustado bastante, podéis comprobarlo en su web.</p>
<div id="__ss_65651" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Achievo ATK - A Business Framework (DPC 2007)" href="http://www.slideshare.net/ijansch/achievo-atk-a-business-framework-dpc-2007">Achievo ATK &#8211; A Business Framework (DPC 2007)</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=achievo-atk-a-business-framework3224&amp;rel=0&amp;stripped_title=achievo-atk-a-business-framework-dpc-2007" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=achievo-atk-a-business-framework3224&amp;rel=0&amp;stripped_title=achievo-atk-a-business-framework-dpc-2007" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/ijansch">Ivo Jansch</a>.</div>
</div>
<p>Es justo la parte débil de zenphp.</p>
<p>Sin embargo, echando un vistazo al código vemos que realmente sí que son más líneas, porque se van definiendo los menús y sus accesos, se usan nodos de tipo <a href="http://www.ibuildings.com/docs/atk/release_6_4_2/atk/atkNode.html" target="_blank">atkNode</a>, y como suele pasar con los frameworks gigantescos, tenemos que empezar a conocer la extensa terminología única de ATK:</p>
<p>&#8212;-<br />
<span style="color: #0000bb;"> </span><span style="color: #ff8000;">/**<br />
* This node is new. It is used to edit profiles. A profile is a set of user<br />
* privileges. In this scenario, each user has one profile (many-to-one<br />
* relation).<br />
*/<br />
</span><span style="color: #0000bb;">useattrib</span><span style="color: #007700;">(</span><span style="color: #dd0000;">&#8220;atkdummyattribute&#8221;</span><span style="color: #007700;">);</span></p>
<p><span style="color: #ff8000;">/**<br />
* The profileattribute can be used to edit the privileges.<br />
*/<br />
</span><span style="color: #0000bb;">useattrib</span><span style="color: #007700;">(</span><span style="color: #dd0000;">&#8220;atkprofileattribute&#8221;</span><span style="color: #007700;">);</span><br />
<span style="color: #007700;">&#8212;-</span></p>
<p><span style="color: #007700;">etc.</span></p>
<p>Son todas estas distracciones las que he intentado eliminar, por eso zenphp no tiene instalación, al copiarse ya se puede utilizar.</p>
<p>Y hacedme caso, no necesitáis escribir un framework completo para escribir una buena herramienta de administración, sobre todo tan reducida como la de ATK. Si queréis ver algunos ejemplos, mirad en <a href="http://programadorphp.org">http://programadorphp.org</a></p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=228&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_228"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2009/12/18/comparativa-atk-framework-zenphp-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prioridad lineal de los procesos de una aplicación web</title>
		<link>http://blog.zenphp.es/2009/08/03/prioridad-lineal-de-los-procesos-de-una-aplicacion-web/</link>
		<comments>http://blog.zenphp.es/2009/08/03/prioridad-lineal-de-los-procesos-de-una-aplicacion-web/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 09:35:18 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[Funcionalidades]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[!important]]></category>
		<category><![CDATA[administrador]]></category>
		<category><![CDATA[aplicación]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[divisiones]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[prioridad]]></category>
		<category><![CDATA[proceso]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=206</guid>
		<description><![CDATA[
Cuando estamos manteniendo una aplicación web suele ocurrir que el usuario final nos pide cambios que rompen el esquema inicial de la misma, es decir, se quieren saltar todas las reglas del diseño en el que nos habíamos &#8220;partido los cuernos&#8221; de forma que fuera todo fácilmente mantenible y estable asi como escalable.
En estos momentos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-207  aligncenter" title="prioridad_arriba" src="http://blog.zenphp.es/wp-content/uploads/2009/08/prioridad_arriba.jpg" alt="" width="346" height="346" /></p>
<p>Cuando estamos manteniendo una aplicación web suele ocurrir que el usuario final nos pide cambios que rompen el esquema inicial de la misma, es decir, se quieren saltar todas las reglas del diseño en el que nos habíamos &#8220;partido los cuernos&#8221; de forma que fuera todo fácilmente mantenible y estable asi como escalable.</p>
<p>En estos momentos tenemos dos opciones: cabrearnos mucho y quejarnos con el usuario para que lo haga a &#8220;nuestra manera o carretera&#8221;, o bien, mucho mejor, que la prioridad forme parte de todo este asunto.</p>
<p>Es ahora cuando decidimos que la segunda opción favorece nuestro trabajo de forma que podemos ir todavía más un paso adelante, es decir, si después de realizar todas las tareas necesarias para generar una página de una aplicación el contenido generado requiere un cambio de última hora, podemos utilizar una prioridad para construir/destruir dicho contenido. Un ejemplo es utilizar CSS, la prioridad se establece con la opción &#8220;!important&#8221; ,entonces, si en el HTML de nuestro primer diseño de la web tenemos un listado de hoteles y necesitamos que en uno de los hoteles del listado se muestre una división de forma distinta, simplemente vamos a permitir que en el editor HTML WYSYWYG se puedan introducir etiquetas de estilo: &lt;style&gt; [ extended_valid_elements: "style" en tinymce ]y ahora vamos a reescribir la regla donde se necesita que se muestre de otra forma el contenido, en lugar de cambiar toda la lógica de la programación, entonces ,usando &#8220;!important&#8221; al lado de las reglas, por ejemplo para el ancho :</p>
<blockquote><p>&lt;style&gt; #midivision { width: 350px <strong>!important</strong>;} &lt;/style&gt;</p></blockquote>
<p>de esa forma le damos prioridad a esta regla, lo mismo se puede hacer con javascript y el argumento &#8220;defer&#8221; de la etiqueta &lt;script&gt;, y lo mismo se puede utilizar en PHP si especificamos el orden de carga de las clases, etc etc.</p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=206&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_206"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2009/08/03/prioridad-lineal-de-los-procesos-de-una-aplicacion-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto: filtrar datos de forma avanzada pero pensando como un principiante</title>
		<link>http://blog.zenphp.es/2008/09/30/howto-filtrar-datos-de-forma-avanzada-pero-pensando-como-un-principiante/</link>
		<comments>http://blog.zenphp.es/2008/09/30/howto-filtrar-datos-de-forma-avanzada-pero-pensando-como-un-principiante/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 11:14:34 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Documentación]]></category>
		<category><![CDATA[Funcionalidades]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[datos]]></category>
		<category><![CDATA[filtrado]]></category>
		<category><![CDATA[filtros]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[joker]]></category>
		<category><![CDATA[modelo de datos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[swf]]></category>
		<category><![CDATA[trucos]]></category>
		<category><![CDATA[tupla]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=173</guid>
		<description><![CDATA[
En principio, parece que el título del post es algo de lo más paradójico, pero nada más lejos de la realidad, en zenphp siempre hay un Joker, y éstos son los trucos que enseño en este blog, triquiñuelas rápidas y complejas pero fáciles de entender y modificar en poco tiempo.

Al escribir clases que reutilizan el [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="alignnone size-full wp-image-174" title="joker" src="http://blog.zenphp.es/wp-content/uploads/2008/09/joker.jpg" alt="" width="380" height="380" /></p>
<p>En principio, parece que el título del post es algo de lo más paradójico, pero nada más lejos de la realidad, en zenphp siempre hay un Joker, y <strong>éstos son los trucos</strong> que enseño en este blog, triquiñuelas rápidas y complejas pero fáciles de entender y modificar en <em>poco tiempo</em>.</p>
<p><span id="more-173"></span></p>
<p>Al escribir clases que reutilizan el código de un modelo de datos de zenphp, uno se da cuenta de la facilidad con la que se pueden realizar ciertos aspectos técnicos como los filtrados de datos avanzados, de una forma realmente sencilla: en una línea de PHP.</p>
<p>Veamos como podemos diferenciar cuando un usuario manda un fichero mediante un modelo de datos (y su interfaz: el visualizador HTML) flash o una imagen y después representarlo con la plantilla que sea adecuada.</p>
<p>El campo imagen tiene el nombre del fichero .jpg,.png,.gif, o bien .swf. por lo tanto sólo tenemos que escribir una función donde queramos, por ejemplo, en mi caso me gusta ponerlas en el visualizador ya que el filtrado devuelto es una cadena HTML que escribe el &#8216;&lt;img src=&#8221;&#8230;&#8221;&gt;&#8217; o bien el HTML del código flash en javascript o el objeto que sea&#8230;</p>
<p>Veamos la función:</p>
<table class="hl-table" border="0" width="100%">
<tbody>
<tr>
<td class="hl-gutter" align="right" valign="top"> </td>
<td class="hl-main" valign="top">
<pre><span class="hl-reserved">function </span><span class="hl-identifier">detectar_imagen_o_flash</span><span class="hl-brackets">(</span><span class="hl-var">$campo</span><span class="hl-brackets">){
  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">strtolower</span><span class="hl-brackets">(</span><span class="hl-identifier">substr</span><span class="hl-brackets">(</span><span class="hl-var">$campo</span><span class="hl-code">,-</span><span class="hl-number">3</span><span class="hl-code">,</span><span class="hl-number">3</span><span class="hl-brackets">))</span><span class="hl-code">==</span><span class="hl-quotes">"</span><span class="hl-string">swf</span><span class="hl-quotes">"</span><span class="hl-brackets">){
   </span><span class="hl-var">$p</span><span class="hl-code"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">zen_plantilla</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">flash/producto.html</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">;
   </span><span class="hl-var">$p</span><span class="hl-code">-&gt;</span><span class="hl-identifier">reemplazar</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">flash</span><span class="hl-quotes">"</span><span class="hl-code">,</span><span class="hl-identifier">substr</span><span class="hl-brackets">(</span><span class="hl-var">$campo</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-identifier">strlen</span><span class="hl-brackets">(</span><span class="hl-var">$campo</span><span class="hl-brackets">)</span><span class="hl-code">-</span><span class="hl-number">4</span><span class="hl-brackets">))</span><span class="hl-code">;
   </span><span class="hl-reserved">return </span><span class="hl-var">$p</span><span class="hl-code">-&gt;</span><span class="hl-reserved">contenido</span><span class="hl-code">;
  </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{
   </span><span class="hl-reserved">return </span><span class="hl-quotes">'</span><span class="hl-string">&lt;img src="/media/img/productos/</span><span class="hl-quotes">'</span><span class="hl-code">.</span><span class="hl-var">$campo</span><span class="hl-code">.</span><span class="hl-quotes">'</span><span class="hl-string">"&gt;</span><span class="hl-quotes">'</span><span class="hl-code">;
  </span><span class="hl-brackets">}
 }
</span><span class="hl-inlinetags">?&gt;</span></pre>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Ahora, desde donde queramos podemos llamar al modelo de datos donde está la imagen y representarla por medio de su visualizador html, por ejemplo, desde el visualizador html principal de la aplicación de nuestro sistema, donde hemos definido el modelo de datos en una variable llamada $productos en la aplicación, por lo tanto las dos líneas que necesitamos son:</p>
<p> </p>
<p>$this-&gt;padre-&gt;productos-&gt;filtros_postprocesamiento = array(&#8220;imagen&#8221; =&gt; array($this-&gt;padre-&gt;productos-&gt;html,&#8221;detectar_imagen_o_flash&#8221;));</p>
<p><span> </span> $this-&gt;c['contenido'] = $this-&gt;padre-&gt;productos-&gt;html-&gt;mostrar($datos[1],&#8221;productos/ver_producto.html&#8221;);</p>
<p>La primera especifica para el padre de este visualizador html de la aplicación, en su variable productos que es el modelo, los filtros para después de cargar los datos de una tupla, al campo imagen le vamos a pasar el filtro de la función que hemos creado en el paso anterior, pero tenemos que especificar dónde está desde aquí, la ruta por la jerarquía de nuestra aplicación es tan sencilla como ir al padre luego al modelo y a su visualizador, allí está la función.</p>
<p>La segunda línea guarda en el array de contenido (puntero al array de la aplicacion-&gt;contenido) en la etiqueta del contenido de nuestra web, la visualización de datos de una tupla especificada por el id numérico que es la llave principal de la tabla del modelo de productos y le decimos la plantilla que vamos a usar, donde habrá un hueco para el campo llamado &#8220;#imagen#&#8221;.</p>
<p>Y así concluye este ejemplo, algo tan sencillo puede verse <a title="Ejemplo del filtrado" href="http://www.empresayjuventud.com/productos/frescos/9/Acelgas.html" target="_blank">funcionando.</a></p>
<p>Al detectarse una imagen ,se muestra &lt;img&gt; ,si es un flash se escribe el &lt;object&gt; con un &lt;script&gt;.</p>
<p>A triunfar!!</p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=173&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_173"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2008/09/30/howto-filtrar-datos-de-forma-avanzada-pero-pensando-como-un-principiante/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como hacer la semántica web fácil con zenphp</title>
		<link>http://blog.zenphp.es/2008/08/08/como-hacer-la-semantica-web-facil-con-zenphp/</link>
		<comments>http://blog.zenphp.es/2008/08/08/como-hacer-la-semantica-web-facil-con-zenphp/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 09:55:28 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[Funcionalidades]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[aplicaciones]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plantillas]]></category>
		<category><![CDATA[redirecciones]]></category>
		<category><![CDATA[semantic]]></category>
		<category><![CDATA[semántica]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=161</guid>
		<description><![CDATA[Semántica web

Si tenemos nuestra aplicación web montada, lo único que tenemosque hacer es configurar los activadores (rutas de .htaccess de Apache) de las acciones (funciones PHP) de los modelos (clases PHP que extienden de zen_modelo_datos) de datos o las funciones de los visualizadores (clases PHP) de forma que podemos incluso crear nuestra propia gramática: loquesea.es/hablar/con/Manolo [...]]]></description>
			<content:encoded><![CDATA[<h2>Semántica web</h2>
<p><img class="alignnone size-full wp-image-162 alignleft" style="float: left;" title="semantic web w3c" src="http://blog.zenphp.es/wp-content/uploads/2008/08/rdfwrap2.png" alt="" width="246" height="267" /></p>
<p>Si tenemos nuestra aplicación web montada, lo único que tenemosque hacer es configurar los activadores (rutas de .htaccess de Apache) de las acciones (funciones PHP) de los modelos (clases PHP que extienden de zen_modelo_datos) de datos o las funciones de los visualizadores (clases PHP) de forma que podemos incluso crear nuestra propia gramática: loquesea.es/hablar/con/Manolo &#8211;&gt; nos contactaría con Manolo <img src='http://blog.zenphp.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Ejemplo</h3>
<p>Como siempre, veamos un ejemplo para comprender mejor la idea:</p>
<p>Tenemos una aplicación (zen_aplicacion) instanciada en index.php con la variable $app , ahora ,dentro de esta hay un visualizador por defecto llamado html_aplicacion en $app-&gt;html, bien, pues ahora sólo tenemos que decirle a Apache que nos redirija las entradas de direcciones con un .html al final, a las funciones de $app-&gt;html , como por ejemplo: Una típica función para ver un producto:</p>
<p>* En tu .htaccess (después de poner &#8220;Options +FollowSymLinks&#8221; y &#8220;RewriteEngine on&#8221; ):</p>
<blockquote><p>RewriteRule ^productos\/(.*)\.html index.php/ver_producto/$1/</p></blockquote>
<p>Con esta regla se llama a index.php donde se instancia $app y se llama a $app-&gt;enrutador-&gt;delegar() que analiza el resto de la dirección, es decir, productos/fichero.html&#8230;de forma que llama a la función productos ,si no existe llama al modelo con nombre productos, en nuestro caso es una función del visualizador de la aplicación (más sencillo),</p>
<p style="text-align: center;"><img class="alignnone size-medium wp-image-163" style="border: 0pt none;" title="semantic" src="http://blog.zenphp.es/wp-content/uploads/2008/08/semantic-300x223.png" alt="" width="300" height="223" /></p>
<h4>Código</h4>
<p>* Esto es lo único que tiene la función</p>
<blockquote><p>echo $this-&gt;plantilla-&gt;devolver_contenido(&#8220;productos/&#8221;.zen_sanar($datos[1]).&#8221;.html&#8221;);</p></blockquote>
<p>si queréis ser más profesionales, crear una plantilla HTML y meterle los datos usando las #etiquetas# ya explicadas en otros posts, asi como hacer comprobaciones de existencia del fichero .HTML y poner una plantilla tipo  producto_inexistente.html si no se encuentra&#8230; (típico)</p>
<blockquote><p>$p = new zen_plantilla();<br />
$this-&gt;c =&amp; $this-&gt;padre-&gt;padre-&gt;contenido; //array de contenido de la web<br />
if ($p-&gt;cargar(&#8220;productos/&#8221;.zen_sanar($datos[1]).&#8221;.html&#8221;))<br />
$this-&gt;c['contenido'] = $p-&gt;devolver_contenido(&#8220;productos/&#8221;.zen_sanar($datos[1]).&#8221;.html&#8221;);<br />
else<br />
$this-&gt;c['contenido'] = $p-&gt;devolver_contenido(&#8220;productos/no_encontrado.html&#8221;);<br />
parent::index(); //Muestra la plantilla base_web.html y reemplaza etiquetas, etc.</p></blockquote>
<p>Y así tendréis algo como lo siguiente:</p>
<p><a href="http://www.empresayjuventud.com/productos/frescos/sandias.html">http://www.empresayjuventud.com/productos/frescos/sandias.html</a></p>
<p>Seguramente ,se puede hacer mucho más fácil, pero ,también seguramente habrá alguien por ahi que lo escriba, saludos!<br />
El conjunto de administración está siendo terminado, espero poder publicarlo pronto&#8230;</p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=161&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_161"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2008/08/08/como-hacer-la-semantica-web-facil-con-zenphp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aplicaciones de administración</title>
		<link>http://blog.zenphp.es/2008/04/29/aplicaciones-de-administracion/</link>
		<comments>http://blog.zenphp.es/2008/04/29/aplicaciones-de-administracion/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 11:42:20 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Funcionalidades]]></category>
		<category><![CDATA[PHP-Gtk]]></category>
		<category><![CDATA[Progreso]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=129</guid>
		<description><![CDATA[Un gestor de contenidos de una aplicación de administración, a lo largo de la historia de zenphp me he visto obligado a crear diversos tipos de administradores e ingeniármelas para hacerlo de forma tan general que pudiera compartir el código entre proyectos para no reescribir todo el código una y otra vez en función de [...]]]></description>
			<content:encoded><![CDATA[<p>Un gestor de contenidos de una aplicación de administración, a lo largo de la historia de zenphp me he visto obligado a crear diversos tipos de administradores e ingeniármelas para hacerlo de forma tan general que pudiera compartir el código entre proyectos para no reescribir todo el código una y otra vez en función de las necesidades de los usuarios finales.<br />
Para generar dichas aplicaciones, estoy diseñando un modelo general de aplicación web de administración con una serie de plantillas, el conjunto total de la aplicación con administración es el cartucho que carga el generador Gtk y es compilado por el generador POA de forma que obtenemos el esqueleto inicial de una aplicación en pocos segundos ,sobre la que vamos a trabajar, podemos cambiar las plantillas de administración pero realmente no es algo primordial ya que sólo con cambiar el logo para cada proyecto y un par de cosas más estará completado.<br />
Adjunto una captura de una de las aplicaciones web de administración del modelo de &#8220;Portal&#8221; que estoy preparando como cartucho para incluir en el repositorio SVN del proyecto.<br />
<a href="http://blog.zenphp.es/wp-content/uploads/2008/04/captura_admin.jpg"><img class="aligncenter size-medium wp-image-130" title="captura_admin" src="http://blog.zenphp.es/wp-content/uploads/2008/04/captura_admin-300x141.jpg" alt="" width="300" height="141" /></a></p>
<p>En la imagen se puede ver el visualizador HTML donde el único HTML que hay son pequeños mensajes de resultados, una pregunta, una confirmación, cosas simples, que han de estar mejor en funciones que lean una plantilla por defecto, asi está todo bien organizado. El resultado es una página de administración para mantener el contenido de una aplicación web cliente de forma que cualquier usuario pueda modificar cualquier parte de la misma.</p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=129&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_129"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2008/04/29/aplicaciones-de-administracion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Extendiendo los procesos de automatización</title>
		<link>http://blog.zenphp.es/2008/04/19/extendiendo-los-procesos-de-automatizacion/</link>
		<comments>http://blog.zenphp.es/2008/04/19/extendiendo-los-procesos-de-automatizacion/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 08:00:56 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[Generadores]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[ingeniería del Software]]></category>
		<category><![CDATA[automatización]]></category>
		<category><![CDATA[generador]]></category>
		<category><![CDATA[procesos]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=122</guid>
		<description><![CDATA[Para automatizar los procesos de una aplicación web lo mejor es usar un esqueleto y escribir código a partir de él. Aunque muchas veces el problema es como se dice en todos sitios, la curva de aprendizaje de un método.
Con cualquiera de las formas de pensar a la hora de hablar de programación encontramos similitudes [...]]]></description>
			<content:encoded><![CDATA[<p>Para automatizar los procesos de una aplicación web lo mejor es usar un esqueleto y escribir código a partir de él. Aunque muchas veces el problema es como se dice en todos sitios, la curva de aprendizaje de un método.<br />
Con cualquiera de las formas de pensar a la hora de hablar de programación encontramos similitudes porque los humanos pensamos de la misma manera XD ¿Qué quiero decir con esto? Pues ,pasa lo mismo que con las ideas que se tienen implementando capas de redes, cuando a alguien se le ocurre una idea para<a href="http://blog.zenphp.es/wp-content/uploads/2008/04/tuercas_sgc.png"><img style="float:right; padding:2px" title="tuercas_sgc" src="http://blog.zenphp.es/wp-content/uploads/2008/04/tuercas_sgc.png" alt="" width="342" height="501" /></a> proteger,enviar o recibir, encriptar,&#8230;lo que sea!, seguramente se le ha ocurrido a otra persona antes, y si no se le ha ocurrido se le ocurrirá pronto <img src='http://blog.zenphp.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  y me explico, a mi se me ocurren ideas que me parecen muy buenas y dada mi experiencia con programación orientada a objetos para programar páginas web considero que debo compartir lo que he aprendido y he de mezclarlo con los conocimientos ya adquiridos y puestos en la red con libertad de uso&#8230;lo que a mi se me ha ocurrido se le puede haber ocurrido a cualquiera otra persona en cualquier otro momento, sin embargo lo voy a publicar, para que cualquier otra persona no tenga que implementar lo que en mi caso, con más experiencia, me cuesta menos expresar en líneas de código. El resultado es un conjunto de clases llamadas librerías que están muy organizadas y disponen de un sistema de comunicación entre sí que permite seguir las normas de la programación estructurada fácilmente gracias a la documentación asociada a estas librerías asi como seguir los ejemplos propuestos.<br />
La fases de los procesos de automatización de un Sistema Gestor de Contenidos fueron expuestas en anteriores artículos de este mismo blog. Lo que ahora es más interesante es preguntarse de qué forma se puede implementar un SGC para que no se convierta en la desconfianza de Joomla en cuanto a sus módulos y la desorganización entre versión tras versión que hace chocar implementaciones entre si e imposible reutilizar código por joven que éste parezca&#8230;y la respuesta es el generador de código, que mantiene la sincronización actualizada de los procesos de automatización, en otras palabras, se encarga, una vez actualizado, de compilar los paquetes de módulos contenidos en uno/s cartucho/s para generar una salida adaptada a la versión más reciente, a partir de ahi el código final puede surgir cambios pero sólo si no se está usando en modo de programación orientada a aspectos, esto permite realizar cambios directamente en el cartucho y obtener la versión actualizada del framework en ese momento.</p>
<p>Las primeras pruebas las estoy utilizando para proyectos simples y en los que me baso para ir mejorando poco a poco.</p>
<p>Asi es como se puede extender un proceso de automatización sin riesgos.</p>
<p>Ahora estoy aprendiendo un poco de ASP, y creo que me va a resultar difícil encontrar un SGC de código libre en condiciones&#8230;:P</p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=122&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_122"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2008/04/19/extendiendo-los-procesos-de-automatizacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construyendo un Sistema Gestor de Contenidos con zenphp</title>
		<link>http://blog.zenphp.es/2008/04/11/construyendo-un-sistema-gestor-de-contenidos-con-zenphp/</link>
		<comments>http://blog.zenphp.es/2008/04/11/construyendo-un-sistema-gestor-de-contenidos-con-zenphp/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 05:30:33 +0000</pubDate>
		<dc:creator>juaxix</dc:creator>
				<category><![CDATA[Documentación]]></category>
		<category><![CDATA[Sistema Gestor Contenidos]]></category>
		<category><![CDATA[cms]]></category>

		<guid isPermaLink="false">http://blog.zenphp.es/?p=108</guid>
		<description><![CDATA[Resumen del diseño del gestor de contenidos]]></description>
			<content:encoded><![CDATA[<h4>Introducción</h4>
<p>Ahora es el momento de introducir el <a title="Ver en la Wikipedia" href="http://es.wikipedia.org/wiki/CMS" target="_blank">CMS</a> (<a title="Base de datos sobre CMS" href="http://www.cmswiki.com/tiki-index.php" target="_blank">Content Management System</a> en inglés) de zenphp. Echando un vistazo rápido al sistema gestor de contenidos que usa cualquier software libre que hay ahi afuera como <a href="http://www.drupal.org.es/manuales" target="_blank">Drupal</a>, <a href="http://ayuda.joomlaspanish.org/ayuda-joomla/" target="_blank">Joomla</a>, <a href="http://es.wordpress.com/" target="_blank">Wordpress</a>,<a href="http://www.mambohispano.org/ayuda.php" target="_blank">Mambo</a>,etc. es fácil comprobar que se utilizan para almacenar, indexar y buscar texto y contenido multimedia; estos sistemas son extremadamente útiles en sitios web donde el contenido es mantenido por más de un autor aunque muchos de ellos no dispongan de un gran abanico de conocimientos técnicos ya que pertenecen a distintos departamentos.</p>
<h4>El Problema</h4>
<p>Si en un sitio web hay un equipo de excelentes escritores tanto así como de diseñadores gráficos, que actualizan regularmente contenidos de diversa índole, apareciendo estos indexados en la página principal divididos parcialmente por cada una de sus categorías, debemos permitir que cada profesional se dedique a hacer lo que mejor hace, concentrándose en su área, pero trabajando juntos en el mismo sistema rápido y colaborativo.</p>
<h4>Requerimientos de la solución</h4>
<ul>
<li>Simplicidad : cada trabajador concentrado en su especialidad</li>
<li>Permitir a los escritores editar,revisar las historias y decidir cuáles se van a publicar y cuáles van a ir a primera plana, etc.</li>
<li>Uso de un sistema de plantillas consistente</li>
<li>Permitir a los escritores acceder sólo a las áreas para las que fueron designados</li>
<li>Permitir cambiar la apariencia en cualquier parte del sitio</li>
<li>Sistema de seguridad: passwords para artículos y contenido,etc.</li>
<li>Comunicación: sistema de mensajería interno (¿ajax?)</li>
</ul>
<h4>Sistemas existentes</h4>
<p>Como todo buen programador debe preguntarse antes de ponerse a programar directamente si algo de lo que necesita posiblemente ya esté hecho, en el caso de los SGC (CMS) nos encontramos con que existen muchísimas alternativas, he <a title="Ver tareas de análisis de los CMS" href="https://forja.rediris.es/pm/task.php?group_project_id=486&amp;group_id=252&amp;func=browse" target="_blank">analizado</a> y <a title="Ir a Granada PHP y buscar por frameworks y gestores de contenidos..." href="http://granadaphp.agenciaq4.com" target="_blank">participado</a> para la mayor parte de ellos, contribuciones de OsCommerce(<a title="Cómprame un pionono!" href="http://www.pionono.es" target="_blank">http://www.pionono.es</a>), módulos para Joomla ( <a title="Inteca: software libre al poder!" href="http://www.intecna.es/" target="_blank">http://www.intecna.es/</a> ), adaptaciones de zenphp para PHProjekt [<a title="Ir a ver el bebé de zenphp, cuando sólo era parte de un componente" href="http://granadaphp.agenciaq4.com/?p=38">ver</a>], etc</p>
<p>Tras evaluarlos decidí, <a href="http://www.ohloh.net/projects/zenphp/commits/20953164" target="_blank">hace</a> un <a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/?op=log&amp;rev=275&amp;sc=0&amp;page=2" target="_blank">tiempo</a>, escribir el propio para zenphp para obtener la flexibilidad con un <em>coste</em> añadido: muchísimo trabajo xD, pero la rentabilidad está en que ahora podemos decidir como será la salida del CMS con una interfaz mucho más amigable y cómo se integra éste en el framework dentro de un sitio web, dando la libertad de ser usado o no, aunque depende de si se realiza un correcto manejo del contenido dinámico&#8230;</p>
<p>Uno de los principales objetivos de un SGC (CMS) es la flexibilidad a la hora de mostrar la salida, pero suele fallar en cuanto al diseño de un flujo de trabajo particular, recordemos las <a href="https://forja.rediris.es/pm/task.php?func=detailtask&amp;project_task_id=507&amp;group_id=252&amp;group_project_id=447" target="_blank">cadenas de procesamiento del framework Seagull</a> o la preparación de la &#8220;<a href="https://forja.rediris.es/pm/task.php?func=detailtask&amp;project_task_id=510&amp;group_id=252&amp;group_project_id=447" target="_blank">pista de raíles</a>&#8221; de <a href="http://phpontrax.com/" target="_blank">PHP On Trax</a>, o incluso de las f<a href="http://www.symfony-project.com/" target="_blank">unciones &#8220;forward&#8221; sobrecargadas</a> de funciones de controladores de frameworks como <a href="http://www.symfony-project.com/" target="_blank">Symfony</a>.</p>
<p>Escribir un CMS simple no requiere demasiado tiempo, mientras más avanzado y complicado sea el diseño, asi afectará a la adopción del sistema.</p>
<h4>Sistema propuesto</h4>
<p>En zenphp el CMS es una aplicación, realmente podemos implementar un Sistema Gestor de Contenidos si así lo deseamos, con las herramientas que ya dispone, si queremos&#8230;</p>
<ul>
<li><strong>Editar contenido</strong>: desde la llegada de los editores <a href="http://es.wikipedia.org/wiki/WYSIWYG" target="_blank">WYSIWYG</a> (<em><strong>W</strong>hat <strong>Y</strong>ou <strong>S</strong>ee <strong>I</strong>s <strong>W</strong>hat <strong>Y</strong>ou <strong>G</strong>et</em> [auque no siempre xD ]) los SGC se han extendido como la pólvora en tiempos de guerra&#8230;Un ejemplo evidente es TinyMCE, usado para escribir este mismo artículo en Wordpress&#8230;ha mejorado tanto que no osaría compararlo con las primeras versiones de administraciones que empezamos a construir <img src='http://blog.zenphp.es/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
<li><strong>Insertando contenido</strong>: administradores de ficheros, <a href="https://forja.rediris.es/plugins/scmsvn/viewcvs.php/trunk/zenphp/contenido/img/?root=csl2-zenphp" target="_blank">librerías de imágenes</a> y vídeos, gestores de subidas de ficheros en Perl y AJAX, qué más podría decir&#8230;</li>
<li><strong>Bases de datos versus sistema de ficheros</strong>: evidentemente gana el segundo, MySQL no es Oracle xD y se hace realmente tedioso trabajar con campos tipo BLOB para almacenar binarios, haciendo al sistema reducir el rendimiento, al menos tampoco tiene la licencia de Oracle <img src='http://blog.zenphp.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><strong>Estructuras de documentos como base</strong>: son historias de ejemplo para &#8220;enseñar&#8221; a utilizar los sistemas gestores de contenidos, una delicia!</li>
<li><strong>Usar metadatos</strong>: hoy en día es imprescindible para hacer páginas <a title="Ver más..." href="http://es.wikipedia.org/wiki/Metadato" target="_blank">amigables </a>con buscadores&#8230;</li>
<li><strong>Formateando la salida</strong>: usar las <a href="http://blog.zenphp.es/temas-para-zenphp/" target="_blank">plantillas por defecto</a></li>
<li><strong>Diseñando la base de datos</strong> <strong>y casos de uso</strong>: se pueden usar los <a href="https://forja.rediris.es/docman/view.php/252/485/zen_diagrama_de_casos_de_uso_web.png" target="_blank">ejemplos dados</a> con zenphp</li>
<li><strong>Buscador</strong>: aprovechar <a href="https://forja.rediris.es/pm/task.php?func=detailtask&amp;project_task_id=553&amp;group_id=252&amp;group_project_id=485" target="_blank">clase de búsqueda</a> de zenphp.</li>
<li><strong>Generador RSS</strong>: <a href="http://blog.zenphp.es/2008/02/21/generador-de-canales-rss-con-zenphp/">existente</a></li>
<li><strong>Bloqueador de spam</strong>: <a href="https://forja.rediris.es/forum/forum.php?forum_id=962" target="_blank">presente</a></li>
<li><strong>Exportador de documentos ,artículos a PDF</strong>: <a href="http://blog.zenphp.es/2008/01/22/extensiones-de-php-librerias-incluidas-en-zenphp/">viable</a></li>
<li><strong>Caché</strong>: <a href="https://forja.rediris.es/forum/message.php?msg_id=1651" target="_blank">incluida</a></li>
<li><strong>Compactador</strong>: <a href="http://blog.zenphp.es/?s=compactador">funcionando</a></li>
<li><strong>URL&#8217;s amigables con buscadores</strong>: <a href="http://blog.zenphp.es/2007/12/21/disenado-implementando-controladores-y-direcciones/">enrutada</a>!</li>
</ul>
<p>Extras:</p>
<ul>
<li><strong>Usar cosas &#8220;raras&#8221; avanzadas</strong>:  procesadores de plantillas XCS: <a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/clases/clase_zen_xcs.php?op=file&amp;rev=0&amp;sc=0" target="_blank">PHP+CSS</a></li>
<li><strong>Eliminar cuellos de botella</strong> de aplicaciones web 2.0 con <a title="¿Por qué es mejor ,a veces, usar algo que no es JavaScript para mis aplicaciones con mucho JavaScript?" href="http://xpages-es.blogspot.com/2008/03/habitualmente-trabajo-con-javascript.html" target="_blank">frameworks javascript</a> y macros <a href="http://blog.zenphp.es/?s=zen_ajax">ajax</a>.</li>
</ul>
<p>El framework proporciona lo necesario para consturir un sistema gestor de contenidos, disfrutadlo <img src='http://blog.zenphp.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<span class="akst_link"><a href="http://blog.zenphp.es/?p=108&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_108"  class="akst_share_link">Compártelo</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://blog.zenphp.es/2008/04/11/construyendo-un-sistema-gestor-de-contenidos-con-zenphp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
