Creando un CMS (II) - Userlinux.net

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. [@MORE@] Bienvenido a index.php Es posible que centralizar todos los accesos en…

Creando un CMS (II)

08.Aug.2008 ~ 5 Comentarios ~ 2059 Lecturas
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.
Categorías: programación

Comentarios


gravatar
09.Aug.2008
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.Aug.2008
Creo que Víctor ha dicho lo más importante.

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

gravatar
22.Aug.2008
¿existe alguna forma de hacer lo de los enlaces amigables sin el mod_rwrite?
saludos

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

gravatar
Carver
22.Sep.2008
Pues a mi me peta el servidor cuando cargo el .htaccess... 500 internal server error... a q puede deberse?

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • Juan
  • Marina
  • Francisco
  • fon
  • minWi
  • isra
  • reidrac
  • r0sk
  • Rodrigo Rega
  • minWi
  • r0sk
  • reidrac
  • r0sk
  • deady
  • errece

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

ssh frases champions userlinux iphone lugo rsidenotes felicidades films nintendo opinion sysadmin 2008 blogsfera vacaciones juegos cake ds debian sidenotes apple web blogs mac mysql cakephp deportes 2007 mundial openbsd barça ubuntu twitter blog humor meme canción alemania_2006 games bsd lucux linux twitt programación cumpleaños software django league bash macosx ps3 rfilms conciertos freebsd seguridad personal hack php bake futbol

Archivo

Social

Enlaces de interés