Foros del Web » Programando para Internet » PHP »

"Problemilla" con web modular

Estas en el tema de "Problemilla" con web modular en el foro de PHP en Foros del Web. Buenas a todos, he estado haciendo una plantilla en local, para una web modular. En mi caso la hice con "case", os pongo el ejemplo ...
  #1 (permalink)  
Antiguo 17/11/2006, 06:38
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 6 meses
Puntos: 0
"Problemilla" con web modular

Buenas a todos, he estado haciendo una plantilla en local, para una web modular.
En mi caso la hice con "case", os pongo el ejemplo de como lo hice, y luego os explico mi "pega", vamos, mi problema.
Al index le metí el siguiente código:

Código:
<?php
switch($secc){
		case 'entrevistas':
		include('entrevistas/home.php');
		break;
		
		case 'fotos':
		include('fotos/home.php');
		break;
		
		default:
		include('home.php');
		break;
}
?>
Pues bien, así pude crear una serie de carpetas, a fín de ordenar mejor mis contenidos y actualizar mas fácilmente, y aquí está mi pega:

Para ir a cualquiera de las carpetas, tengo este tipo de links:

Código:
<a href="?secc=entrevistas">Entrevistas</a>
Pero, ¿cómo puedo "construir" el link para que dentro de esas carpetas pueda abrir otros archivos del interior de la misma carpeta?

Ejemplo:

Estando en:
//localhost/index.php?secc=entrevistas
O sea, dentro de la carpeta de entrevistas, ¿como podría hacer para abrir alguna de las entrevistas que hay dentro de la carpeta?

El problema es que al estar include de la carpeta anterior (index), no puedo linkar directamente.

¿Alguien me dice posibles soluciones para este problema?

PD: Si no se entiende, vuelvo a exponer xD

Gracias ;)
  #2 (permalink)  
Antiguo 18/11/2006, 07:52
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 6 meses
Puntos: 0
Vamos chicos... una ayudita!

Que llevo unos días dándole vueltas a esto, y o bien lo arreglo, o bien cambio la forma de hacerlo...

Help! (Beatles dixit)
  #3 (permalink)  
Antiguo 18/11/2006, 09:57
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Independientemente de la carpeta donde estén, lo mejor es que lo pongas en el switch donde las otras.
  #4 (permalink)  
Antiguo 18/11/2006, 10:08
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Pues si, lo mejor es hacer lo que ha dicho david_M_G.

Yo incluso iría "un paso mas allá", a fin de tenerlo todo mejor organizado.
Si en el index.phptienes esto
Código PHP:
<?php
switch($secc){
        case 
'entrevistas':
        include(
'entrevistas/home.php');
        break;
        
        case 
'fotos':
        include(
'fotos/home.php');
        break;
        
        default:
        include(
'home.php');
        break;
}
?>
Podrías poner en entrevistas/home.php algo así
Código PHP:
<?php
switch($subsecc){
        case 
'Ronald Reegan':
        include(
'entrevistas/ronaldreegan.php');
        break;
        
        case 
'Georg Bush':
        include(
'entrevistas/geniopolitico.php');
        break;
        
        default:
        include(
'home.php');
        break;
}
?>
También podrías, en entrevistas/home.php poner algo como
Código PHP:
if(isSet($GET_['subsecc'])) {
//Cargar desde la base de datos
} else {
include(
"home.php");

Esto si usas alguna base de datos, claro.
  #5 (permalink)  
Antiguo 18/11/2006, 11:34
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 6 meses
Puntos: 0
Gracias a los dos.

Veamos, os explico, lo que propones tu, BoneZ, también lo pensé, hacer lo en /entrevistas/home.php y poner los "case" ahí dentro, el problema es que entrevistas hay muchísimas, y tener que meter ahí todas, y cada vez que introduzca una tendré que modificar también ese home.

¿No hay mas soluciones?

Por cierto, lo que dice david_M_G, no lo capto, ¿me lo explicas? Es que no termino de entenderlo.

Gracias!
  #6 (permalink)  
Antiguo 18/11/2006, 11:50
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Siguiendo el ejemplo que ponías, supongamos que tenemos una carpeta Entrevistas y dentro de esa carpeta los archivos entrevista1.php, entrevista2.php y entrevista3.php

Lo que yo te decía es que los pusieras de la misma manera:

Código PHP:
<?php
switch($secc){

//Seccion entrevistas
        
case 'entrevistas':
        include(
'entrevistas/home.php');
        break;

    
//Entrevistas
        
case 'entrevista1':
        include(
'entrevistas/entrevista1.php');
        break;

        case 
'entrevista2':
        include(
'entrevistas/entrevista2.php');
        break;

        case 
'entrevista3':
        include(
'entrevistas/entrevista3.php');
        break;

//Seccion fotos
        
case 'fotos':
        include(
'fotos/home.php');
        break;

//Seccion HOME
        
default:
        include(
'home.php');
        break;
}
?>
También podrías hacerlo de otra forma...

Con una dirección tipo index.php?secc=entrevistas&numero=1

Para cargar ese numero=1 solo tendrías que poner en el archivo entrevistas/home.php lo siguiente:

Código PHP:
$numero $_GET['numero'];

//comprobamos que existe dicho archivo
if (file_exists("entrevista".$numero.".php") {

//metemos la entrevista con ese numero.... entrevistaX.php
include ("entrevista".$numero.".php");

} else {

//si no existe ese archivo lo mostrara
exit ("La página solicitada no existe");


  #7 (permalink)  
Antiguo 18/11/2006, 11:54
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 6 meses
Puntos: 0
Vale, hasta ahí si capto.

El problema es el que dije, en teoría habría muchas entrevistas, pro lo cuál tendría que hacer cambios en mas archivos (los "case", por ejemplo), y mi idea de separarlo en carpetas, era para tenerlo mas ordenado y posiblemente quitar algo de curro.

Si no hay mas maneras, pues nada, investigaré un poco mas a ver como me lo monto, pero creo que alguna forma debe haber.

A ver si a alguien se le ocurre algo.

Gracias!
  #8 (permalink)  
Antiguo 18/11/2006, 11:56
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
No has dicho nada de la segunda opción que te he dicho

Si quieres tenerlo más ordenado y más automatizado, empieza a usar base de datos.

Suerte
  #9 (permalink)  
Antiguo 18/11/2006, 12:00
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 6 meses
Puntos: 0
Si si, tranquilo que la opción de la base de datos probablemente la use al final.

Solo que como tenía ya todos los archivos en *.php quería saber si podía montármelo con el "case".

Gracias!
  #10 (permalink)  
Antiguo 18/11/2006, 13:58
Avatar de El_MiMo  
Fecha de Ingreso: septiembre-2003
Ubicación: Chile
Mensajes: 123
Antigüedad: 20 años, 7 meses
Puntos: 1
Y porqué no mejor modulas de esta forma:

index.php
Código PHP:
<?php
// Leemos la variable que indica que p&aacute;gina queremos cargar.
if(empty($_GET['modulo']))
  
$pagina='home.php';
else
  
$pagina=$_GET['modulo'];
include(
'modulos/'.$pagina);
?>
y en la capeta modulos, o en la que tu definas, metes todos los archivos.. y los llamas de la siguiente forma: index?modulo=contacto.php

Si dentro de la carpeta modulos, pones una carpeta entrevistas, llamas las páginas así: index.php?modulo=entrevistas/1.php
__________________
aaa!!
  #11 (permalink)  
Antiguo 18/11/2006, 14:19
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Mejorando el código de El_MiMo :

Código PHP:
<?php
// Leemos la variable que indica que pagina queremos cargar.
if(empty($_GET['secc'])) {
  
$pagina='home';
  include(
$pagina.'.php');
} else {
$pagina=$_GET['secc'];
if (
$pagina=='index') {
include(
'home.php');
} else {
include(
$pagina.'.php');
}
?>
Adaptado a lo que decía orphan y sin el "bug" de poder incluir una página en una misma... (incluir index.php en index.php)

Faltaría poner alguna protección para que no puedan incluir HTML ni PHP en la URL.

Lo mejor es hacer un switch para tener controladas las opciones posibles a incluir... que es lo primero que teníamos.
  #12 (permalink)  
Antiguo 19/11/2006, 04:15
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 6 meses
Puntos: 0
Uhm.
Pues parece que toma forma...
Estoy probando y de momento parece ir correctamente.

Os informo!!!!!!!!!

Gracias

Última edición por orphan; 19/11/2006 a las 04:57
  #13 (permalink)  
Antiguo 19/11/2006, 06:35
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 1 mes
Puntos: 25
mejor pongan la referencia de dónde han sacado el código para algo más completo.

Echale un ojo a: Crear webmodulares desde cero de esta forma tendrás algo más completo y una visión mejor.

Saludos
__________________
Hospedaje Web al mejor costo!
  #14 (permalink)  
Antiguo 19/11/2006, 06:43
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Ya de paso posteo el código que realizamos en la comunidad PHPEROS.NET, por si te es de más ayuda:

Código PHP:
<?php

//Este valor puede cambiarse por secc   $get="secc";
//---------------------------------
               
$get "id";
//---------------------------------

if($_GET[$get]){
if(
$_GET[$get] == "index"){
include(
"error.php");
}
else {
if(
file_exists("$_GET[$get].php")) {
$get htmlspecialchars(trim($_GET[$get]));
$get eregi_replace("<[^>]*>","",$get) ;
$get eregi_replace(".*//","",$get) ;
include(
"$get.php");
}
else {
include(
"error.php");
}
}
}
else {
include(
"home.php");
}
?>
Es mejorable pero sólo carga páginas existentes, es estricto con lo que se escribe en la URL (por seguridad), no permite cargar el "index" en "index" y direcciona a los sitios correspondientes en cada caso.
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 16:13.