Foros del Web » Programando para Internet » PHP »

Urls Amigables

Estas en el tema de Urls Amigables en el foro de PHP en Foros del Web. bueno, les comento yo en estos momentos tengo un producto con categorias. Estoy necesitando que ciando escriba por ejemplo producto/ORDENADORES-Y-SERVIDORES/ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi Me muestre obviamente el ordenador ...
  #1 (permalink)  
Antiguo 18/03/2014, 07:45
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 15 años, 6 meses
Puntos: 2
Urls Amigables

bueno, les comento yo en estos momentos tengo un producto con categorias.

Estoy necesitando que ciando escriba por ejemplo producto/ORDENADORES-Y-SERVIDORES/ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi

Me muestre obviamente el ordenador y sus caracteristicas. Ese no es problema ya que el php lo puedo hacer sin problemas sacandole los - y buscando el exacto en la web. Ese no es mi problema.
El problema es cuando el nombre es: ORDENADOR PHOENIX SMART 1 INTEL, DDR3 4GB, 500GB RW, HDMI

he usado este código que encontre en el foro para separar y hacer minúsculas toda la llegada:

Código PHP:
Ver original
  1. <?php
  2. function urls_amigables($url) {
  3. // Tranformamos todo a minusculas
  4. $url = strtolower($url);
  5. //Rememplazamos caracteres especiales latinos
  6. $find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
  7. $repl = array('a', 'e', 'i', 'o', 'u', 'n');
  8. $url = str_replace ($find, $repl, $url);
  9. // Añaadimos los guiones
  10. $find = array(' ', '&', '\r\n', '\n', '+');
  11. $url = str_replace ($find, '-', $url);
  12. // Eliminamos y Reemplazamos demás caracteres especiales
  13. $find = array(' /[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
  14. $repl = array('', '-', '');
  15. $url = preg_replace ($find, $repl, $url);
  16. return $url;
  17. }
  18. ?>

Mi problema en si, radica en que el resultado es este:

Categoria: ORDENADORES Y SERVIDORES

Producto: ORDENADOR PHOENIX SMART 1 INTEL, DDR3 4GB, 500GB RW, HDMI

URL DEL PRODUCTO:ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi

Esa url última es la que necesito se vea en el navegador. Pero no puedo hacerlo. Este es mi .htaccess:

Código:
RewriteEngine on
Rewriterule ^productos/(.+)/(.+) producto.php?categoria=$1&nombre=$2
La idea es que el link total sea este:

clientes/ORDENADORES-Y-SERVIDORES/ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi


A ver si pueden ayudarme un poco.

PD: necesito obviamente que los espacios y comas etc se conviertan en guiones. El script ese php lo hace perfecto, lo que no puedo hacer es que funcione en la ruta que muestra el navegador.
  #2 (permalink)  
Antiguo 18/03/2014, 08:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Urls Amigables

A ver si me explico mejor, quiero que cuando en el navegador escriba
esto: ORDENADOR PHOENIX SMART 1 INTEL, DDR3 4GB, 500GB RW, HDMI
me muestre esto ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi
pero que el id que me llega para buscar el producto en pgp sea: ORDENADOR PHOENIX SMART 1 INTEL, DDR3 4GB, 500GB RW, HDMI
  #3 (permalink)  
Antiguo 18/03/2014, 08:13
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 8 meses
Puntos: 67
Respuesta: Urls Amigables

Mira justo acabo de subir un tutorial de como tener urls amigables echale un vistazo.

http://www.forosdelweb.com/f18/tutorial-urls-amigables-1094471/

Saludos.
  #4 (permalink)  
Antiguo 18/03/2014, 08:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Urls Amigables

a veeeeeeeeeeeeeeer
  #5 (permalink)  
Antiguo 18/03/2014, 08:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Urls Amigables

No logro hacer que funcione. Me das una mano con lo que ya tengo y asi poder adaptarlo?
  #6 (permalink)  
Antiguo 18/03/2014, 12:11
 
Fecha de Ingreso: octubre-2009
Mensajes: 46
Antigüedad: 15 años, 1 mes
Puntos: 0
Sonrisa Respuesta: Urls Amigables

Cita:
Iniciado por rakshaka Ver Mensaje
No logro hacer que funcione. Me das una mano con lo que ya tengo y asi poder adaptarlo?
No te compliques con el ejemplo que te da el compañero MaNuX0218
puedes hacer lo siguiente:

Código PHP:
Ver original
  1. <?php
  2. include 'request.php'; // Archivo del ejemplo
  3.  
  4. //Suponiendo que tienes por ejemplo:
  5. //http://www.miweb.com/producto/ordenadores-y-servidores/ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi
  6.  
  7. $seccion = $url['args']['0']; //producto
  8. $categoria = $url['args']['1']; //ordenadores-y-servidores
  9. $idProducto = $url['args']['2']; //ordenador-phoenix-smart-1-intel-ddr3-4gb-500gb-rw-hdmi
  10.  
  11.  
  12. $sql = 'SELECT * FROM productos WHERE idUrl="'$idProducto'"';
  13. $qry = mysql_query($sql);
  14. if(mysql_num_rows($qry) == 1){
  15.     $row = mysql_fetch_array($qry);
  16.    
  17.     //Aqui imprimes detalles del ordenador phoenix smart
  18.     echo $row['id'];
  19.     echo $row['precio'];
  20.     echo $row['etc'];
  21.    
  22. }else{
  23.     echo "No se encontro el producto especificado";
  24. }
  25. ?>

Nota: Para esto debes de tener un campo llamaro "idUrl" en donde tengas guardada previamente la direccion url.


Espero haberme explicado cualquier cosa pregunta!
  #7 (permalink)  
Antiguo 18/03/2014, 14:06
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 8 meses
Puntos: 67
Respuesta: Urls Amigables

Cita:
Iniciado por uri1230 Ver Mensaje
No te compliques con el ejemplo que te da el compañero MaNuX0218
El tutorial que realice esta mas optimizado y mas entendible para posibles modificaciones. Pero también tu idea es buena.

Saludos.
  #8 (permalink)  
Antiguo 18/03/2014, 19:44
 
Fecha de Ingreso: octubre-2009
Mensajes: 46
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Respuesta: Urls Amigables

Cita:
Iniciado por MaNuX0218 Ver Mensaje
El tutorial que realice esta mas optimizado y mas entendible para posibles modificaciones. Pero también tu idea es buena.

Saludos.
Ups! creo no me supe explicar bien, me referia a que con tu ejemplo era muy facil.

De hecho me gusto para mis proyectos!
  #9 (permalink)  
Antiguo 19/03/2014, 03:32
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: Urls Amigables

Casualmente acabo de poner un mensaje en
http://www.forosdelweb.com/f18/tutor...1/#post4580628
donde digo cómo resolver tu problema.

Necesitarás crear un enrutador para usar en el fichero base de tu pseudo MVC. Todas las llamadas irán al fichero base, por ejemplo, request.php.
Y éste, o una clase auxiliar enrutadora, tiene que saber leer la URL con $SERVER["request_uri"] y saber a qué controlador, o fichero PHP llamar o incluir.

Para ello has de crear una clase router.php, que mediante expresiones regulares, sepa "leer" la request_uri y enrutar tu aplicación PHP correctamente.

Por ejemplo, yo hago el "mapeo" de urls así:

Código PHP:
Ver original
  1. $mapa_url=array(
  2.     "index"=>array(
  3.         "patron"=>""
  4.         "controlador"=>"ProductoControlador"
  5.         "accion"=>"getIndex"
  6.     ),
  7.     "detalle_producto"=>array(
  8.         "patron"=>"detalle/:slug:"
  9.         "controlador"=>"ProductoControlador"
  10.         "accion"=>"getDetalle"
  11.     )
  12. );
Luego tengo una clase Router.php que usando ese array asociativo, y $SERVER["request_uri"], sabe extraer a qué controlador y a qué metodo de ese controlador llamar, usando un patrón sencillo.

Por ejemplo, la url "www.mipagina.com" llamaría al controlador ProductoControlador, y a su método "getIndex", que no espera argumentos.
La url www.mipagina.com/detalle/tele-sony.html llamaría al controlador ProductoControlador, método "getDetalle" con el argumento $slug="tele-sony.html".

Última edición por marlanga; 19/03/2014 a las 03:43

Etiquetas: amigables, urls
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 06:17.