hola que tal, esto lo utilizo para administrar url amigables desde php, lo que hago guardar todas las condiciones en una variable, la cual despues desgloso y las utilizo como parametros
.htacces
Cita: <IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?params=$1 [QSA,L]
</IfModule>
el index es un archivo de intercambio que llama a la clase conector, la cual incluye las librerias necesarias para la visualizacion del site. En mi caso llamo a una clase desde el primer parametro (controlador) y el segundo es la funcion, si no se especifica funcion retorna la funcion index() del mismo. los parametros se pasan despues de la funcion. Por ejemplo
misitio.com/hoteles/listar llamaria a la clase hoteles->listar(); en el caso de hacer
misitio.com/hoteles/ver/id/1 llamaria a la clase hoteles->ver($id), igualmente te voy a dejar un ejemplo de un controlador
index.php
Código php:
Ver original<?php
require 'librerias/conector.php';
conector::iniciar();
?>
librerias/conector.php
Código php:
Ver original<?php
class conector{
function iniciar(){
// definimos el directorio donde guardaremos los controladores
define('CONTROLADOR_DIR','controladores'); }
require 'librerias/config.php';
require 'librerias/router.php'; // archivo que parse las url
$_GET = getVariables($_GET['params']);
}else{
// si no se especifica nombre del controlador se llamara a una clase por defecto, asegurarse de que esta clase este disponible siempre
$nombre = 'def';
}
if(!empty($_GET[$_GET[0]])){ $accion = $_GET[$_GET[0]];
}else{
// meto por defecto
$accion = 'index';
}
// definidos el nombre y la accion le asignamos ubicacion y nombre del controlador
// el nombre de controlador (nombreControlador) lleva el nombre de la clase + el string Controlador
// para su mejor identificacion
$archivoControlador = CONTROLADOR_DIR.DS.$nombre.'Controlador.php';
require $archivoControlador;
}else{
trigger_error ($archivoControlador . ' no existe', E_USER_NOTICE); return false;
}
trigger_error ($nombre . '->' . $accion . '` no existe', E_USER_NOTICE); return false;
}
$controlador = new $nombre();
$controlador->$accion($_GET);
}
}
?>
por otro lado utilizo un ayudante para devolver las url comprobadas y limpias de caracteres que no quiera que se utilicen
librerias/router.php
Código php:
Ver originalfunction getVariables($url)
{
//quitamos la barra del final
//separamos las partes de la url y las contamos
$cantPartes = count($partes);
//si la cantidad de partes no es par retornamos false, al ser impar una variable se quedaria sin valor y esto no es posible
if($cantPartes == 1){
return $partes;
}
if($cantPartes % 2 != 0)
return false;
//nombre del controlador
$variables[0] = limpiar($partes[0]);
for($c = 0; $c < $cantPartes; $c = $c + 2)
{
//Acumulamos los pares de valores(para nosotros variables) en el arreglo
$nombre = limpiar($partes[$c]);
$valor = limpiar($partes[$c + 1]);
$variables[$nombre] = $valor;
}
return $variables;
}
function limpiar($valor)
{
//permitimos solo letras(a-Z), numeros y guiones
}
controladores/defaultControlador.php
Código php:
Ver original<?php
class def{
function index(){
echo 'hola, no ha seleccionado ningun controlador asi que esta corriendo uno por defecto';
}
}
?>
si yo pusiera esto en mi navegador misitio.com me saldria
hola, no ha seleccionado ningun controlador asi que esta corriendo uno por defecto
ahora al que te interesa a vos
controladores/hotel_grandeControlador.php
Código php:
Ver original<?php
class hotel_grande{
function index(){
$this->detalle();
}
function detalle(){
// si no se especifica misitio.com/hotel_grande/id/nº
$sql = 'busqueda de hotel por defecto';
// haces las comparaciones que tienes que hacer y muestras el resultado
echo $resultado;
}else{
$slq = 'busqueda de hoteles que cumplan la condicion';
echo $resultados;
}
}
}
?>
de esta manera si ingresas a misitio.com/hotel_grande listara las opciones de detalles, donde no esta especificada la variable id al igual que hacer misitio.com/hotel_grande/detalle, pero si ingresas a misitio.com/hotel_grande/detalle/id/1 cambiaran las cosas