Ver Mensaje Individual
  #7 (permalink)  
Antiguo 18/01/2011, 11:45
Avatar de Nazari
Nazari
 
Fecha de Ingreso: febrero-2010
Ubicación: Canarias - Tenerife
Mensajes: 62
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Creando un CMS

Ahora que tenemos nuestra base de datos instalada, y un index.php (semi vacio) es el momento de preparar algunas cosas básicas.

Un CMS nos permite movernos entre sus paginas de una forma paginada y ordenada, así podemos cambiar a la sección de registrar usuarios, ver entradas, comentar, etc.. sin necesidad de cambiar de script continuamente, esto se hace mediante includes y peticiones _GET. Para el programador es una gran ventaja, puesto que no tiene que repetir código en todos los scripts, y si surge un fallo sabe que lo tiene en un solo script y que no tendrá que modificar todos los demás. De esta forma el mantenimiento y modificación del sistema es mas ordenado y fácil. Esto es llamado comúnmente como programación modular.

Puesto que el desarrollo del sistema se va complicado poco a poco, vamos a preparar y crear diferentes scripts que nos sirvan de cara al futuro.

Primero nos dirigimos al index.php y en la parte superior definimos una constante que nos servirá para evitar que se ejecuten scripts de forma separada al index.

Código PHP:
Ver original
  1. define("CAPRICORN", 1);

Podemos usar el nombre de la constante que nosotros queramos, yo he usado CAPRICORN, mi consejo es que pongamos en mayúsculas siempre las constantes, de esta forma las diferenciaremos rápidamente.

Ahora incluimos un archivo llamado sec.php (el cual aun no hemos creado) que estará dentro de un directorio llamado includes, se encargara de mostrarnos la sección que le pidamos mediante _GET, también debemos incluir el script config.php que nos genero el instalador, pero ambos han de ser incluidos dentro del if() que tiene que comprobar si el sistema ya esta instalado, ademas, en caso de fallo al incluir el script el resto de la pagina no debe de cargar, para esto usaremos require(); y una vez incluido config.php hacemos conexión a la base de datos usando las variables que contiene, el index.php debe de quedar así:

Código PHP:
Ver original
  1. <?php
  2.  
  3. define("CAPRICORN", 1); //Definimos una constante para evitar que se ejecuten scripts por separado.
  4.  
  5. //Comprobamos que existe el archivo config.php
  6. if (!file_exists("config.php")){
  7.  
  8.   //Si existe redireccionamos al archivo install.php
  9.   header("Location: install.php");
  10.  
  11. } else {
  12.  
  13.   //Si no existe ejecutamos el index normalmente
  14.   require("config.php"); //Requerimos config.php
  15.   require("includes/sec.php"); //Requerimos pag.php
  16.  
  17.   //Conectamos con la base de datos
  18.   $con=mysql_connect($bdhost,$bduser,$bdpass);
  19.   mysql_select_db($bdname,$con);
  20.  
  21.   //Incluimos el contenido definido en sec.php
  22.   include($include_scp);
  23.  
  24.   //Cerramos la conexion
  25.   mysql_close($con);
  26.  
  27. }
  28.  
  29. ?>

Lo siguiente es crear el directorio includes y el script sec.php en su interior.

El script sec.php debe ‘morir‘ o redirigirse a el index si alguien entra directamente al directorio http://localhost/includes/sec.php, para eso ya definimos una constante en el index.php, ahora solamente tenemos que comprobar que la constate esta definida cuando se ejecuta sec.php, para eso lo primero que debe contener sec.php es lo siguiente:

Código PHP:
Ver original
  1. if (!defined('CAPRICORN')){
  2. header('Location: index.php');
  3. }

De esta forma evitamos que sea ejecutado de forma separada del index.php.

Ahora usaremos la función switch(), la cual es muy similar a if,else, para comparar la variable que entra por _GET y incluir el archivo necesario. El archivo sec.php debe de quedar asi:

Código PHP:
Ver original
  1. <?php
  2.  
  3. //Si el script se ejecuta de forma separada a index.php redireccionamos al index.
  4. if (!defined('CAPRICORN')){
  5.   header('Location: index.php');
  6. }
  7.  
  8. //Comprobamos que _GET tiene el valor sec
  9. if(isset($_GET['sec'])){
  10.  
  11.   //Si lo tiene definimos scripts a incluir segun su valor.
  12.   switch ($_GET['sec']){
  13.     case registro:
  14.       $include_scp = "includes/register.php";
  15.     break;
  16.     default:
  17.       $include_scp = "includes/index.php";
  18.     break;
  19.   }
  20.  
  21. }else{
  22.  
  23.   //Si _GET no tiene valor o no es sec, definimos una script por defecto a incluir.
  24.   $include_scp = "includes/index.php";
  25.  
  26. }
  27. ?>

Como se ve he incluido una referencia a un script por defecto y otro a ‘registro‘ que dirige a la script register.php, de momento quedan esos dos, pero se añadirán muchos mas que formaran la base de nuestro sistema, y en un futuro inventamos algo para añadir módulos o plugins adicionales sin necesidad de modificar la script.

Ahora lo que tenemos que hacer es crear dentro del directorio includes los archivos index.php y register.php, a los cuales hay que añadirle que compruebe que son ejecutados a través del index principal, podrían ser estos:

register.php:

Código PHP:
Ver original
  1. <?php
  2.  
  3. //Si el script se ejecuta de forma separada a index.php redireccionamos al index.
  4. if (!defined('CAPRICORN')){
  5.   header('Location: index.php');
  6. }
  7.  
  8. echo "Te encuentras ahora mismo en register.php";
  9.  
  10. ?>

index.php:

Código PHP:
Ver original
  1. <?php
  2.  
  3. //Si el script se ejecuta de forma separada a index.php redireccionamos al index.
  4. if (!defined('CAPRICORN')){
  5.   header('Location: index.php');
  6. }
  7.  
  8. echo "Te encuentras ahora mismo en el index.php";
  9.  
  10. ?>

Así al entrar en http://localhost/index.php nos estará mostrando includes/index.php y al entrar en http://localhost/index.php?sec=registro nos mostrara includes/register.php.

De momento ya tenemos montada la base de un sistema de gestión modular, podeis encontrar todos los script usados hasta ahora aquí.

Estaré encantado de leer dudas y sugerencias.
__________________
Nazarí González
http://www.nazariglez.com - @Nazariglez