Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/12/2009, 19:09
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
problemas con url amigables especial

Hola,
estoy tratando de armar url amigables de links como estos:
http://localhost/websa100/index.php?...s=seccion&id=1
http://localhost/websa100/index.php?...ubseccion&id=2
http://localhost/websa100/index.php?modules=staff
http://localhost/websa100/index.php?...pcion=ver&id=4
http://localhost/websa100/index.php?...as&verPagina=2
http://localhost/websa100/index.php?...pcion=ver&id=1
http://localhost/websa100/index.php?...os&verPagina=2

bien he armado un funcion php que me permite obtener el titulo y/o nombre de los id de cada link
Código PHP:
Ver original
  1. /**
  2.  * crea url amigables
  3.  *
  4.  * @param string $url
  5.  */
  6. function amigables($url){
  7.     $valores=explode('&',$url);
  8.  
  9.     $ubicacion=explode('/',$_SERVER['PHP_SELF']);
  10.     $modulo=substr($valores[0],strpos($valores[0],'=')+1,strlen($valores[0]));
  11.     if($modulo!='seccion' && $modulo!='subseccion'){
  12.         $amigable=$modulo;
  13.     }
  14.     else{
  15.         $amigable='/';
  16.     }
  17.  
  18.     for($i=1;$i<count($valores);$i++){
  19.         $key=explode("=",$valores[$i]);
  20.         switch ($modulo){
  21.             case 'seccion':
  22.                 if($key[1]!='ver')
  23.                 $sql="select nombre from menu where id_menu='".$key[1]."' and visible='1'";
  24.                 break;
  25.             case  'subseccion':
  26.                 if($key[1]!='ver')
  27.                 $sql="select titulo from secciones where id_seccion='".$key[1]."' and visible='1'";
  28.                 break;
  29.             case 'noticias':
  30.                 if($key[1]!='ver'){
  31.                     $sql="select titulo  from noticias  where id_noticia='".$key[1]."'";
  32.                 }
  33.                 break;
  34.             case 'articulos':
  35.                 if($key[1]!='ver'){
  36.                     $sql="select titulo from articulos where id_articulo='".$key[1]."'";
  37.                 }
  38.                 //echo $sql."<br/>";
  39.                 break;
  40.         }
  41.         //hago la consulta sql     
  42.         if(!empty($sql)){
  43.             $result=mysql_query($sql);
  44.             $row=mysql_fetch_array($result);
  45.             if($key[1]!='ver' && $key[0]!='verPagina' && ($modulo!='seccion' && $modulo!='subseccion')){
  46.                 //echo "entro ";
  47.                 $amigable.="/".strtolower(validarNombreArchivo($row[0]));
  48.             }
  49.             elseif($key[0]=='verPagina'){
  50.                 //echo "casi entra ";
  51.                 $amigable.="/pagina/".$key[1];
  52.             }
  53.             else{
  54.                 //echo "no entro ";
  55.                 $amigable.=strtolower(validarNombreArchivo($row[0]));
  56.             }
  57.         }
  58.  
  59.         if($modulo=="cursos" || $modulo=="portfolio"){
  60.             if($key[0]=='verPagina'){
  61.                 $amigable.="/pagina/".$key[1];
  62.             }
  63.         }
  64.     }
  65.  
  66.     if($url!='index.php'){
  67.         if($ubicacion[2]=='admin'){
  68.             $amigable='/'.$ubicacion[1].'/'.$ubicacion[2].$amigable;
  69.         }
  70.         else{
  71.             $amigable=$amigable.".html";
  72.         }
  73.     }
  74.     else{
  75.         if($ubicacion[2]=='admin'){
  76.             $amigable=$_SERVER['HTTP_HOST'].'/'.$ubicacion[1].'/'.'admin';
  77.         }
  78.     }
  79.  
  80.     return $amigable;
  81. }
y este es mi .htacces
Código HTML:
Ver original
  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymLinks
  3. RewriteEngine On
  4.    
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7.  
  8. RewriteRule ^(.*)\.html$ index.php?modules=$1 [NC]
  9. RewriteRule ^(.*)/(.*)\.html$ index.php?modules=$1&id=&2 [NC]
  10. RewriteRule ^(.*)/(.*)\.html$ index.php?modules=$1&verPagina=&2 [NC]
  11. RewriteRule ^(.*)/(.*)/(.*)\.html$ index.php?modules=$1&opcion=&2&id=$3 [NC]
  12. </IfModule>
entonces si yo llamo a la funcion asi:
Código html:
Ver original
  1. <a href="<?php echo amigables('index.php?modules=seccion&id=1');?>">link</a>
  2. <a href="<?php echo amigables('index.php?modules=subseccion&id=2');?>">link</a>
  3. <a href="<?php echo amigables('index.php?modules=staff');?>">link</a>
  4. <a href="<?php echo amigables('index.php?modules=noticias&opcion=ver&id=4');?>">link</a>
  5. <a href="<?php echo amigables('index.php?modules=noticias&verPagina=2');?>">link</a>
  6. <a href="<?php echo amigables('index.php?modules=articulos&opcion=ver&id=1');?>">link</a>
  7. <a href="<?php echo amigables('index.php?modules=articulos&verPagina=2');?>">link</a>

me crea estos links html
Código HTML:
Ver original
  1. <a href="nombre_seccion.html">link</a>
  2. <a href="nombre_subseccion.html">link</a>
  3. <a href="staff.html">link</a>
  4. <a href="noticia/titulo_noticia.html">link</a>
  5. <a href="noticia/pagina/2.html">link</a>
  6. <a href="articulos/titulo_articulo.html">link</a>
  7. <a href="articulo/pagina/2.html">link</a>

hasta ahí todo bien, salvo que a la única url que entra es a la que se forma con index.php=modules=staff así que mi duda es como se arma el .htacces para que me interprete las restante url amigables que armo?