Como hacer la semántica web fácil con zenphp

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 –> nos contactaría con Manolo 😉

Ejemplo

Como siempre, veamos un ejemplo para comprender mejor la idea:

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->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->html , como por ejemplo: Una típica función para ver un producto:

* En tu .htaccess (después de poner “Options +FollowSymLinks” y “RewriteEngine on” ):

RewriteRule ^productos\/(.*)\.html index.php/ver_producto/$1/

Con esta regla se llama a index.php donde se instancia $app y se llama a $app->enrutador->delegar() que analiza el resto de la dirección, es decir, productos/fichero.html…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),

Código

* Esto es lo único que tiene la función

echo $this->plantilla->devolver_contenido(“productos/”.zen_sanar($datos[1]).”.html”);

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… (típico)

$p = new zen_plantilla();
$this->c =& $this->padre->padre->contenido; //array de contenido de la web
if ($p->cargar(“productos/”.zen_sanar($datos[1]).”.html”))
$this->c[‘contenido’] = $p->devolver_contenido(“productos/”.zen_sanar($datos[1]).”.html”);
else
$this->c[‘contenido’] = $p->devolver_contenido(“productos/no_encontrado.html”);
parent::index(); //Muestra la plantilla base_web.html y reemplaza etiquetas, etc.

Y así tendréis algo como lo siguiente:

http://www.empresayjuventud.com/productos/frescos/sandias.html

Seguramente ,se puede hacer mucho más fácil, pero ,también seguramente habrá alguien por ahi que lo escriba, saludos!
El conjunto de administración está siendo terminado, espero poder publicarlo pronto…

Sobre compatibilidades entre versiones de PHP y zenphp

Hace un tiempo que cambié la versión de mi host dedicado de PHP4.2 a 5.2.6 y zenphp no ha tenido ningún problema para funcionar. Sólo un pequeño detalle a tener en cuenta con el fichero .htaccess…

Cuando escribimos redirecciones como por ejemplo:

AddDefaultCharset UTF-8
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^noticias index.php/noticias
RewriteRule ^noticia\/(.*) index.php/noticias/leer/$1

en la que queremos que las www.midominio.com/noticias se redirija a www.midominio.com/index.php/noticias/ para encontrar el controlador por defecto, en PHP5 ahora se usa en lugar de <$_SERVER[‘REQUEST_URI’]> el parámetro <$_SERVER[‘PHP_SELF’]> dentro de

zenphp/clases/clase_zen_enrutador.php

de forma que estas redirecciones más complejas sean bien encauzadas sin tener que reescribir el módulo del enrutador que proporciona el framework…recordar que se puede escribir un enrutador y asociarlo a cualquiera de la s aplicaciones que estemos usando en el sistema y lanzarlo por medio de una función tipo “delegar()”.

Seguimos informando!