Creando un CMS (II)

08.ago 2008 Envía un trackback

En la anterior entrada nos habíamos quedado creando la estructura de directorios -que habíamos llamado skel- de lo que sería el gestor de contenidos. El siguiente paso lógico sería centralizar todos los accesos a un solo script: index.php.

Bienvenido a index.php

Es posible que centralizar todos los accesos en un solo archivo que a posteriori despache en base a diferentes urls tenga sus inconvenientes, pero a mi modo de verlo todo son ventajas puesto que hay un único control para todas las acciones de la aplicación.

Para convertir a nuestro index.php en el rey de la fiesta deberemos aliarnos con su gran amigo el .htaccess. El mensaje que le tendremos que mandar será el siguiente:
RewriteEngine on
RewriteRule ^(.*)$ /index.php
Algo así como "Amigo, sea la que sea la url que te estén pidiendo los usuarios, yo me encargo".

Pases vip

Cierto es que tendremos problemas con los elementos estáticos (imágenes, archivos de javascript, estilos css...), por lo que vamos a repartir varios pases vip para nuestros invitados de lujo:
RewriteEngine on
RewriteCond $1 !^(_img|_js|_themes)
RewriteRule ^(.*)$ /index.php
Con ésto se arregla el problema, los elementos estáticos serán cargados de forma normal mientras que el resto de elementos tendrán que pasar por index.php para seguir la lógica de la aplicación.

Despachando

Supongamos que hemos creado un dominio virtual para el cms en local llamado micms -gran alarde de originalidad-, cargando http://micms/ tendremos el esqueleto que estamos montando. Una vez puesto el .htaccess y un index.php con phpinfo() -por ejemplo- podremos cargar cualquier tipo de url que siempre hará referencia a la misma (http://micms/una, http://micms/dos.php, http://micms/33.html...).

¿Qué pasaría si ahora, en vez del phpinfo() ponemos en ese index.php algo tal que así?:
<?php
        $request = ltrim($_SERVER['REQUEST_URI'], '/');
        $vars = explode('/', $request);

        foreach ($vars as $var)
        {
                if(file_exists('/app/'.$var.'.html')
                        include('/app/'.$var.'.html');
                else
                        include('/app/error.html');
        }
?>
 
Al cargar la url http://micms/contaco cargaría el html que hubiera en el archivo /app/contacto.html siempre y cuando éste exista, de lo contrario cargaría el archivo de error.

¡Ya sabemos despachar! -obviemos chistes fáciles-. Como ejercicio para casa -siempre he querido decir algo así- se podría mejorar este código muy mucho y hacerlo un poco más universal, ¿alguien se da cuenta de alguno de los fallos que tienen estas 10 lineas?. Lo veremos en la siguiente entrega.
rcms programacion php

Comentarios
Gravatar Victor San Martin@09.08.2008, 'Re: Creando un CMS (II)'

http://micms/una/dos/tres/cuatro/ect

si existen los archivo uno.html, dos.html, tres.html, cuatro.html y etc.html los cagaria todos, e lo contrario cargaria todos los que encuentre hasta que uno no exista y mande error.. plop!

Se supone que la idea del dispach es que el primer parametro seria el controlador, segundo la accion y despues los parametros no? algo MVC.

Ocupa trim en vez de ltrim, sino tendras un parametro vacio,

Ademas si pongo http://micms/index.php/uno/dos/etc, al buscar index.php.html va a mandar error.

algo mas? mmmm.

Saludos
PD: No seas desordenado y generes mala costumbres, ocupa llaves no seas flojo, un if sin llaves es desordenado :D

Gravatar rwx@09.08.2008, 'Re: Creando un CMS (II)'

Creo que Víctor ha dicho lo más importante.

Bueno, y que al IF le falta un cierre de paréntesis :-)

Gravatar stimo@22.08.2008, 'Re: Creando un CMS (II)'

¿existe alguna forma de hacer lo de los enlaces amigables sin el mod_rwrite?
saludos

Gravatar MERCU@31.08.2008, 'Re: Creando un CMS (II)'

espero que algunos de estos comentarios no te desanimen y continues con esta serie de post.

Gravatar Carver@22.09.2008, 'Re: Creando un CMS (II)'

Pues a mi me peta el servidor cuando cargo el .htaccess... 500 internal server error... a q puede deberse?


Escribe tu comentario
 
 
Guardar datos
Escribe tu comentario:
captcha


Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles: [url=http://direccion]texto[/url], negrita: [b]texto[/b], itálica: [i]texto[/i], subrayada: [u]texto[/u]. Para mencionar o citar a alguien (quote): [cita]texto[/cita]