Foros del Web » Programando para Internet » PHP »

Web modular, diferentes carpetas

Estas en el tema de Web modular, diferentes carpetas en el foro de PHP en Foros del Web. Hola amigos, estoy haciendo mi web modular y tengo una carpeta llamada pages donde guardo todos los archivos a mostrar. Dentro de ellas tengo otras ...
  #1 (permalink)  
Antiguo 27/01/2012, 22:31
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Web modular, diferentes carpetas

Hola amigos, estoy haciendo mi web modular y tengo una carpeta llamada pages donde guardo todos los archivos a mostrar. Dentro de ellas tengo otras carpetas para cada modulo, por ejemplo el modulo registro.

El problema es que no se como llamar a el archivo que está dentro de esa carpeta porque si le digo asi: index.php?sec=registro/registro no lo muestra y tampoco me gustaria llamarlo de esa manera pues pienso que existe otra mas adecuada.

Este es mi código:

Código PHP:
Ver original
  1. $carpeta = 'pages/'; //Carpeta que contiene las secciones de nuestra web.
  2.     //Obtenemos la sección que el usuario está solicitando
  3.     $seccion = @$_GET['sec'];
  4.    
  5.     //Si el usuario no ha solicitado ninguna sección en especial, eso significa que quiere ver la página principal de nuestra web, que será "homepage", así que le damos ese valor a la variable.
  6.     if (empty($seccion)){
  7.         $seccion = 'homepage';
  8.     }
  9.     //Acto seguido verificaremos que el archivo de sección que el usuario está solicitando exista en la carpeta que hemos definido en la variable $carpeta. Si éste existe, "incluimos" el contenido. De lo contrario, indicaremos que la sección no existe. Y tambien una pequeña validacion para evitar ejecuciones no autorizadas.
  10.     $antipath=explode ("/",$seccion);
  11.     $seccion=$antipath[0];
  12.     //echo $seccion; //Una pequeña comprobacion en tiempo de programacion para ver si realmente funciona.
  13.     if (file_exists($carpeta . $seccion . '.php')){
  14.         include($carpeta . $seccion . '.php');
  15.     }
  16.     else{
  17.         echo '¡La sección no existe! Por favor <a href="' . $_SERVER['PHP_SELF'] . '?sec=homepage">vuelva a la página principal.';
  18.     }

Cómo puedo pasarle la seccion y el archivo por url???

Gracias.
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 27/01/2012, 22:47
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Web modular, diferentes carpetas

Es fácil si creas un array donde tengas todas las opciones disponibles, ejemplo:

Código PHP:
Ver original
  1. // id_seccion => array('Nombre de sección', 'archivo a incluir a partir de ruta')
  2. $secciones = array(
  3.     '' => array('Inicio', 'carpeta/archivo.php', // Para la página principal es mejor sin parámetros
  4.     'registro' => array('Regístrate', 'registro/registro.php',
  5. );
  6.  
  7. // Para determinar la sección actual, si viene por GET o es la principal
  8. $seccion = (isset($_GET['seccion'])) ? $_GET['seccion'] : '';
  9.  
  10. // Verificas que exista
  11. if( ! isset($secciones[$seccion])) {
  12.     die('No existe la página solicitada');
  13. }

$secciones también te puede servir para crear menús.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 27/01/2012, 22:55
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Web modular, diferentes carpetas

Hola Triby muchas gracias. Estoy un poco confundida. Te refieres a secciones a los enlaces del menu?. Es que no entiendo como lo aplico.

Y me da un error en la linea del parentesis que cierra el array.
__________________
Caminando con el corazón partío

Última edición por kimmy; 27/01/2012 a las 23:05
  #4 (permalink)  
Antiguo 27/01/2012, 23:20
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Web modular, diferentes carpetas

mmm la forma en que llamas a las secciones es un verdadero peligro, imagina que hago una llamada de la siguiente manera ?sec=../../password/passwords.php o algo por el estilo, recuerda que PHP tiene acceso incluso fuera del htdocs o www, por lo cual puede mostrar al final un archivo que ni si quiera es accesible vía web, si deseas usar algo por el estilo te invito a que visites este post que hice hace un rato >.< donde se implementa un motor sencillo para el manejo de módulos
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 27/01/2012, 23:32
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Web modular, diferentes carpetas

Hola Nemutagk, está muy bueno. Pero sigo con la duda de como hacer para que me muestre un archivo dentro de una carpeta. Y si hay varios archivos en esa misma carpeta o en otras???
__________________
Caminando con el corazón partío
  #6 (permalink)  
Antiguo 27/01/2012, 23:48
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Web modular, diferentes carpetas

Para comenzar sin ofender y sin escucharme pesado quitate la maña de usar @ para ocultar errores, el error seguirá ejecutándose, y el log de apache seguirá creciendo, aparte de que un buen "programador" resuelve los errores, no los oculta...

Ahora, sinceramente, cambia la forma en que esta funcionando tu sistema modular, si un sujeto mal intencionado quiere hacerte daño le dejas todo en bandeja de plata para hacerlo, ahora, te dejo tu código funcionando...

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_GET['sec'])) {
  4.     $seccion = $_GET['sec'];
  5. }else {
  6.     $seccion = 'homepage';
  7. }
  8.  
  9. $path = 'pages';
  10.  
  11. $files = explode('/',$seccion);
  12.  
  13. $url = $path;
  14.  
  15. foreach($files as $file) {
  16.     $url .= '/'.$file;
  17. }
  18.  
  19. $url .= '.php';
  20.  
  21. if (file_exists($url)) {
  22.     include($url);
  23. }else {
  24.     echo '<p>¡La sección no existe! Por favor <a href="' . $_SERVER['PHP_SELF'] . '?sec=homepage">vuelva a la página principal.</p>';
  25. }

Se me olvidaba...

Cita:
Hola Nemutagk, está muy bueno. Pero sigo con la duda de como hacer para que me muestre un archivo dentro de una carpeta. Y si hay varios archivos en esa misma carpeta o en otras???
explícate mejor porque no entendí muy bien que quieres hacer...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 27/01/2012, 23:59
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Web modular, diferentes carpetas

No acostumbro usar @ lo que pasa es que ese código lo copie y pegue y apenas estaba intentando aprender esto de las web modulares.

Lo que quiero saber es que si tengo varias carpetas por ejemplo una que se llama registro y adentro guarda los archivos registro.php, confirmar_registro.php, etc. como puedo decirle al código que lea esas rutas.

tu tienes esto en tu código:

Código PHP:
Ver original
  1. $conf_modulo["index"] = array(
  2. "archivo" => "inicio.php",
  3. "template" => "template01.php",
  4. "titulo" => "Titulo que mostrará este modulo",
  5. "css" => "",
  6. "js" => ""
  7. );

en "archivo" => "inicio.php", le digo "archivo" =>"registro/registro.php",?

o existe una forma que no haya que crear módulo por módulo sino que simplemente lea lo que le pasas por get. Por ejemplo index.php?modulo=registro/registro pero que no coloque ese slash (/).

Gracias
__________________
Caminando con el corazón partío
  #8 (permalink)  
Antiguo 28/01/2012, 00:09
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Web modular, diferentes carpetas

Creo que tu mejor forma de usar web modulares es usar mod_rewrite de apache....

Crea un .htaccess en tu host y agrega el siguiente código
Código Apache:
Ver original
  1. RewriteEngine On
  2. RewriteCond %{REQUEST_FILENAME} -s [OR]
  3. RewriteCond %{REQUEST_FILENAME} -l [OR]
  4. RewriteCond %{REQUEST_FILENAME} -d
  5. RewriteRule ^.*$ - [NC,L]
  6. RewriteRule ^.*$ index.php [NC,L]

y en tu motor para manejar los modulos
Código PHP:
Ver original
  1. <?php
  2.  
  3. $url = $_SERVER['REQUEST_URI'];
  4. $pages = explode('?',$url);
  5. $pages = $pages[0];
  6.  
  7. if ($pages != '/') {
  8.     $files = explode('/',$pages);
  9. }else {
  10.     $files = array('index');
  11. }
  12.  
  13. $loadFile = 'pages';
  14.  
  15. foreach($files as $file) {
  16.     $loadFile .= '/'.$file;
  17. }
  18.  
  19. $loadFile .= '.php';
  20.  
  21. if (file_exists($loadFile)) {
  22.     include($loadFile);
  23. }else {
  24.      echo '<p>¡La sección no existe! Por favor <a href="' . $_SERVER['PHP_SELF'] . '?sec=homepage">vuelva a la página principal.</p>';
  25. }

Ahora, como funciona esto, es muy sencillo, con el archivo .htaccess todas las peticiones que se hagan al servidor se enviaran a index.php, el cual será el encargado de procesar el url desde donde se a accedido a la página y de hay a cargar los archivos correspondientes; las url se manejarían de la siguiente forma

http://misitio.com/carpeta1/archivo2

Código:
raiz
|->index.php
|->carpeta1
|    |->archivo2
Actualización: Arregle varias "incongruencias" en el código original >.<
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 28/01/2012 a las 00:16
  #9 (permalink)  
Antiguo 28/01/2012, 00:23
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Web modular, diferentes carpetas

Mil gracias Nemutagk voy a probarlo y te aviso mañana porque ya tengo mucho sueño. ;)
__________________
Caminando con el corazón partío

Etiquetas: carpetas, modular, registro, variables, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:42.