Foros del Web » Programando para Internet » PHP »

[APORTE] Función para crear URLs amigables

Estas en el tema de [APORTE] Función para crear URLs amigables en el foro de PHP en Foros del Web. Comparto con ustedes esta función que cree hace un tiempo para hacer URL amigables: Código PHP: /**   Formato:    {id} se reemplaza por el ID pasado en el 2do argumento    {titulo} se reemplaza por el titulo creado por la funcion  */  function  urlAmigable ( $titulo ...
  #1 (permalink)  
Antiguo 09/07/2009, 12:28
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
[APORTE] Función para crear URLs amigables

Comparto con ustedes esta función que cree hace un tiempo para hacer URL amigables:

Código PHP:
/** 
 Formato: 
  {id} se reemplaza por el ID pasado en el 2do argumento 
  {titulo} se reemplaza por el titulo creado por la funcion 
*/ 
function urlAmigable($titulo$id$formato ""$suffix ""$palabrasCensuradas = array()) { 
     
    
$wrong = array('á''é''í''ó''ú''ñ''Á''É''Í''Ó''Ú''Ñ''ç''ü'); 
    
$right = array('a''e' ,'i''o''u''n''A''E''I''O''U''N''c''u'); 
     
    
//Reemplaza los caracteres especiales 
    
$titulo str_replace($wrong$right$titulo); 
    
//Pone la cadena en minisculas 
    
$titulo strtolower($titulo); 
    
//Reemplaza todo lo que no sean letras ni numeros por "-" 
    
$titulo preg_replace("/[^a-z0-9]+/""-"$titulo); 
    
//Elimino los "-" al principio y final de la cadena 
    
$titulo trim($titulo'-'); 
    
//Separo la cadena en un array, usando "-" como delimitador 
    
$palabras explode("-"$titulo); 
     
    
$censuradas = array("a""en""el""un""la""una""o""se""de""del"); 
    
$censuradas array_merge($censuradas$palabrasCensuradas); 
     
    
//Usando array_diff, a mi array antes obtenido le resto el array de palabras comunes 
    
$palabras array_diff($palabras$censuradas); 
    
//Vuelvo a "pegar" la cadena 
    
$titulo implode("-"$palabras); 
    
//Vuelvo id a su valor numerico 
    
$id intval($id); 
     
    if ( ! empty(
$formato)) { 
        
$plantilla = array('{id}''{titulo}'); 
        
$reemplazo = array($id$titulo); 
        
$url str_replace($plantilla$reemplazo$formato); 
        
$url .= $suffix
    } else 
$url "$titulo-$id$suffix";  
    
//Retorno la URL amigable 
    
return $url


Ejemplo de Uso:
Código PHP:
echo urlAmigable("[APORTE] Función para crear URLs amigables"5"{id}/{titulo}"".html", array("para")); 
Resultado:
Cita:
5/aporte-funcion-crear-urls-amigables.html
Si tienen alguna pregunta, comentario, critica, sugerencia, no duden en ponerlas.

EDIT: Le corregi un error del que no me habia dado cuenta y aplique la sugerencia de pateketrueke.

Última edición por Ronruby; 09/07/2009 a las 16:25
  #2 (permalink)  
Antiguo 09/07/2009, 13:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [APORTE] Función para crear URLs amigables

debería ser así??

Código PHP:
if ( ! empty($formato)) {
    
$plantilla = array('{id}''{titulo}');
    
$reemplazo = array($id$titulo);
    
$url str_replace($plantilla$reemplazo$formato);
    
$url .= $suffix;
} else 
$url "$titulo-$id$suffix"
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/07/2009, 16:23
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: [APORTE] Función para crear URLs amigables

Gracias por la sugerencia! La he implementado :)
  #4 (permalink)  
Antiguo 09/07/2009, 17:51
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: [APORTE] Función para crear URLs amigables

Y como haces para recibir las variables de esa url a un archivo php? :P
__________________
Cansado de tener que hacer webs con doble login, o no entender nada del codigo de phpBB? Usa un sistema de foros simple, usa Linken Foros
  #5 (permalink)  
Antiguo 10/07/2009, 10:08
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: [APORTE] Función para crear URLs amigables

Cita:
Iniciado por Kenichi Ver Mensaje
Y como haces para recibir las variables de esa url a un archivo php? :P
Depende que formato le des tendrás que configurar tu .htaccess de una forma u otra.

Por ejemplo, para el formato por defecto tendrías que usar (suponiendo que lo usas para las noticias y que usas extension .html):
Código:
RewriteEngine On

RewriteRule ^noticias/(.*)-([0-9]+)\.html$ noticias.php?id=$2&title=$1 [L]
Y en tu archivo PHP recoges las variables usando ID. $_GET['id'] y $_GET['title']

Puedes obviar el enviar el titulo pero yo lo hago para así en caso de usar un titulo incorrecto hacer una redirección 301 a la noticia con el titulo adecuado.

Última edición por Ronruby; 10/07/2009 a las 10:30
  #6 (permalink)  
Antiguo 10/07/2009, 11:16
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: [APORTE] Función para crear URLs amigables

Genial
Creo que lo usaré para el foro que estoy programando de 0
__________________
Cansado de tener que hacer webs con doble login, o no entender nada del codigo de phpBB? Usa un sistema de foros simple, usa Linken Foros
  #7 (permalink)  
Antiguo 10/07/2009, 11:50
 
Fecha de Ingreso: julio-2009
Mensajes: 7
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: [APORTE] Función para crear URLs amigables

hola me gusto esto como podria implementarlo en mi sitio ?tengo un file host con urls de descrgas tipo index.php?p=download&hash=IGj7hw2uHbjX&langSwitch= arabic& poco amigables y qusera algo del tipo /descargas/idioma:arabic/IGj7hw2uHbjX como podria hacerlo uso php5 y musql y no puedo implementar .hracess ya que la funcion que regula las urls de descrgas esta todo en php a ver si algun user puede por favoir echarme una mano que se muy poco de php :D
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 13:27.