Creando un CMS (II)
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.phpAlgo 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.phpCon é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.
Comentarios
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
Bueno, y que al IF le falta un cierre de paréntesis :-)
saludos