Foros del Web » Programando para Internet » PHP »

Duda con Url Amigas

Estas en el tema de Duda con Url Amigas en el foro de PHP en Foros del Web. Tengo una pagina web que la e construido modularizada, de tal forma que tengo un index.php en la raiz, y en ese index se abren ...
  #1 (permalink)  
Antiguo 14/10/2009, 10:06
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Duda con Url Amigas

Tengo una pagina web que la e construido modularizada, de tal forma que tengo un index.php en la raiz, y en ese index se abren todos los modulos. por ejemplo en mi url cuando entro al modulo de articulos queda asi.
Código url:
Ver original
  1. http://localhost/carpeta/?mod=mod_art&opcion=inicio
Y cuando necesito entrar a ver un articulo dinamicamente lo llamo asi
Código url:
Ver original
  1. http://localhost/carpeta/?mod=mod_art&opcion=mostrar&item=30
Ahora bien al codificar el .httacces, servira para todos mis modulos, es decir si necesito entrar a otro modulo por ejemplo a publicidad, serviria o seria un .httacces por modulo?, cada modulo esta en su propia carpeta. Ejem: ./modulos/mod_art/index.php
Código url:
Ver original
  1. http://127.0.0.1/carpeta/?mod=mod_publ&opcion=empresas&id=12
Si se pudiera un ejemplo de como seria, gracias por su ayuda
  #2 (permalink)  
Antiguo 14/10/2009, 10:30
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Duda con Url Amigas

Cita:
Iniciado por mark_ant0n Ver Mensaje
Tengo una pagina web que la e construido modularizada, de tal forma que tengo un index.php en la raiz, y en ese index se abren todos los modulos. por ejemplo en mi url cuando entro al modulo de articulos queda asi.
Código url:
Ver original
  1. http://localhost/carpeta/?mod=mod_art&opcion=inicio
Y cuando necesito entrar a ver un articulo dinamicamente lo llamo asi
Código url:
Ver original
  1. http://localhost/carpeta/?mod=mod_art&opcion=mostrar&item=30
Ahora bien al codificar el .httacces, servira para todos mis modulos, es decir si necesito entrar a otro modulo por ejemplo a publicidad, serviria o seria un .httacces por modulo?, cada modulo esta en su propia carpeta. Ejem: ./modulos/mod_art/index.php
Código url:
Ver original
  1. http://127.0.0.1/carpeta/?mod=mod_publ&opcion=empresas&id=12
Si se pudiera un ejemplo de como seria, gracias por su ayuda
Hola como va, ro lo utiliza de la siguiente manera

-> el primer parametro es el controlador de la aplicacion, por ejemplo articulos, por ejemplo articulos

-> el segundo parametro llama a la funcion del controlador, por ejemplo index, mostrar

luego paso parametros adicionales al controlador ejemplo id/2

lo que obtengo es una url como

mihost.com/articulos/listar

mihost.com/articulos/ver/id/1

mihost.com/articulos/ver/id/1/p/1

para llamar a los metodos utilizo un conector que funciona como un enrutador adaptado para tu funcuinamiento quedaria algo asi

Código php:
Ver original
  1. <?php      
  2.     class conector{
  3.                   function iniciar(){
  4.                                 require'config/configs',
  5.                                 require 'librerias/router.php';
  6.  
  7.                           // getVariables es una funcion del archivo router.php  
  8.                           $_GET = getVariables($_GET['route']);
  9.                          
  10.                           //definimos un modulo por defecto en el caso que no se encontrara definido ninguno
  11.                            if(!empty($_GET[0])){
  12.                     //$_GET[0] devolvera el nombre del modulo, para darle una mayor estetica solo usaremos el nombre del mismo y a la hora de llamarlo le agregaremos el el prefijo mod_ sufijo .php
  13.                                     $nombre = 'mod_'.$_GET[0].'.php';
  14.                 }else{
  15.                     $nombre = 'mod_index.php';
  16.                 }  
  17.                                
  18.                             if(file_exists($nombre)){
  19.                                  include($nombre);
  20.                             }else{
  21.                                  include('mod_index.php');
  22.                             }
  23.             } // end iniciar
  24. }

router.php
Código php:
Ver original
  1. function getVariables($url)
  2. {
  3.  
  4.     //quitamos la barra del final
  5.     $url = preg_replace('/\/$/', '', $url);
  6.  
  7.     //separamos las partes de la url y las contamos
  8.     $partes = explode('/', $url);
  9.     $cantPartes = count($partes);
  10.  
  11.     //si la cantidad de partes no es par retornamos false, al ser impar una variable se quedaria sin valor y esto no es posible
  12.    
  13.     if($cantPartes == 1){
  14.         return  $partes;
  15.     }
  16.     if($cantPartes % 2 != 0)
  17.         return false;
  18.    
  19.     $variables = array();
  20.    
  21.     //nombre del modulo
  22.     $variables[0] = limpiar($partes[0]);
  23.    
  24.     for($c = 0; $c < $cantPartes; $c = $c + 2)
  25.     {
  26.         //Acumulamos los pares de valores(para nosotros variables) en el arreglo
  27.         $nombre = limpiar($partes[$c]);
  28.         $valor = limpiar($partes[$c + 1]);
  29.         $variables[$nombre] = $valor;
  30.     }
  31.  
  32.     return $variables;
  33.    
  34. }
  35.  
  36. function limpiar($valor)
  37. {  
  38.     return $valor;
  39.     //permitimos solo letras(a-Z), numeros y guiones
  40.     return preg_replace('/[^a-zA-Z0-9-_%]/', '', $valor);
  41. }

.htacces
Código htacces:
Ver original
  1. <IfModule mod_rewrite.c>
  2.     RewriteEngine On
  3.     RewriteCond %{REQUEST_FILENAME} !-d
  4.     RewriteCond %{REQUEST_FILENAME} !-f
  5.     RewriteRule ^(.*)$ index.php?route=$1 [QSA,L]
  6.    
  7. </IfModule>

y por ultimo el index.php

Código php:
Ver original
  1. <?php
  2. require 'librerias/conector.php';
  3. conector::iniciar();
  4.  
  5. ?>
  #3 (permalink)  
Antiguo 14/10/2009, 11:09
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Duda con Url Amigas

Ok gracias samu22, ahorita lo estoy checando, oye de todos modos te pongo el codigo de mi index.php que esta en la raiz de mi localhost, no habra algun problema con el que me hicistes favor poner
Código PHP:
error_reporting(E_ALL);
global 
$path_layout;
include(
'includes/constructor.php');
require_once(
"principal.php");
define('inicializacion',1);
if (!empty(
$_GET['mod']))
    
$modulo $_GET['mod'];
else
    
$modulo MODULO_DEFECTO;


if (empty(
$conf[$modulo]))
        
$modulo MODULO_DEFECTO;

$path_layout LAYOUT_PATH.'/'."cuerpo.php";
$path_modulo MODULO_PATH.'/'.$conf[$modulo]['archivo'];
if (
file_exists($path_layout)and($modulo=="home")){
    
abrirtema();
    include(
"./tema/".$estilo."/cuerpo.php");
    
cabeza();
    
abrir($dbi,$tema,$sql);
    if (
file_exists$path_modulo )) include($path_modulo);
    else die(
'Error al cargar el m&oacute;dulo <b>'.$modulo.'</b>. No existe el archivo <b>'.$conf[$modulo]['archivo'].'</b>');
    
cerrar();
    
pie();

    }
else{
        include(
$path_modulo);

  #4 (permalink)  
Antiguo 14/10/2009, 11:30
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Duda con Url Amigas

Gracias, por tu aporte, se ve facil desde esa perspectiva, veremos quepasa

Última edición por mark_ant0n; 14/10/2009 a las 11:36 Razón: Se duplico el comentario, por que refresque el navegador
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 15:59.