Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 6 Febrero 2011, 01:56 am



Título: URLs Amigables a profundidad ? (solved)
Publicado por: Diabliyo en 6 Febrero 2011, 01:56 am
Buenas...

Tengo algunos problemas para el proceso de profundizar las busquedas con "urls amigables", hasta ahorita logro con exito implementar urls amigables para la lectura de temas o bien la lectura de posts de una sección, por ejemplo:

Para Leer un tema, la url amigable es: http://misitio.com/hoja/idnoticia-nombre_del_tema.html
Para Leer una sección: http://misitio.com/sección/

Y utilizo el siguiente htaccess:
Código:
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteEngine on
RewriteBase /
RewriteRule ^(.+)/$ index.php?ver=$1 # aqui leemos una sección
RewriteRule ^hoja/(.+)\-(.+)\.html$ index.php?hoja=$1 # aqui leemos tema o noticia

Pero ahora quiero implementar la profundidas de modo que pueda por ejemplo acceder a contenido dentro de una sección, por ejemplo: tengo una sección en mi blog llamada BugTrack donde existen sub-temas dentro los cuales muestran otro contenido. Para acceder al contenido dentro de la sección invoco el siguiente url_amigable.

http://lab.sie-group.net/bugtrack/bug/IDDELBUG/

Como vemos esta url_amigable es de profundidas 1 en donde dentro de una sección hacemos una profundidad.

Con la finalidad de pode mostrar el contenido, implemento esta linea en el htaccess:

Código:
RewriteRule ^(.+)/(.+)/(.+)/$ index.php?ver=$1&$2=$3

En donde finalmente la url amigable http://lab.sie-group.net/bugtrack/bug/IDDELBUG/ intento traducirla asi: index.php?ver=bugtrack&bug=IDDELBUG.

Pero finalmente algo me falla :(, porque no me muestra el contenido :(, me sale sección no existe....

Saludos !

=== EDITADO ===

He impreso el valor $_GET["ver"] despues de la leyenda sección inexistente y me imprime esto: index.php, en donde se supone debe imprimir bugtrack que es el valor que debe tomar segun la linea que implemente en el htaccess.


Título: Re: URLs Amigables a profundidad ?
Publicado por: Nakp en 6 Febrero 2011, 04:54 am
mejor imprime el array $_GET y mira que contiene :p puede ser hasta error de dedo en el htaccess


Título: Re: URLs Amigables a profundidad ?
Publicado por: Diabliyo en 7 Febrero 2011, 21:46 pm
mejor imprime el array $_GET y mira que contiene :p puede ser hasta error de dedo en el htaccess

No creo sea error de dedo en el htaccess ya que solo se agrego una linea extra, esta:

Código:
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteEngine on
RewriteBase /
RewriteRule ^(.+)/$ index.php?ver=$1
RewriteRule ^hoja/(.+)\-(.+)\.html$ index.php?hoja=$1

# profundidad de mas niveles
RewriteRule ^(.+)/(.+)/(.+)/$ index.php?ver=$1&$2=$3

Que es la que busco se pueda interpretar bien :(...

En fin  pongo lo obtenido por GET:
Código:
Array ( [ver] => index.php [bug] => 77mvza9892f ) 

Lo raro es que en la variable "ver" debe estar el nombre de la sección, que en este caso es "BugTrack"

=== EDITADO ===

Que rato, para que puediera acceder al contenido tuve que cambiar el htaccess la linea nueva y agregar esto (.+)\.html, vaya la invocacion de un html :S.... quedando ahora el htaccess asi:

Código:
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteEngine on
RewriteBase /
RewriteRule ^(.+)/$ index.php?ver=$1
RewriteRule ^hoja/(.+)\-(.+)\.html$ index.php?hoja=$1

# profundidad de mas niveles
RewriteRule ^(.+)/(.+)/(.+)/(.)\.html$ index.php?ver=$1&$2=$3

Ahora probare el AJAx porque el otro dia me tiro error, me mencionaba que no encontraba la funcion con la que cargo AJAX, al principio pense que el script.js no estaba bien puesto, pero si, tenia la url completa:

Código:
<script type="text/javascript" language="javascript" src="http://misitio.com/js/script.js"></script>

Ahorita les cuento !...


Título: Re: URLs Amigables a profundidad ?
Publicado por: Diabliyo en 7 Febrero 2011, 22:45 pm
Bueno ahora el problema es con los AJAX :(...

Si estoy digamos en un lugar del sitio que no es el index.php, por ejemplo:

http://lab.sie-group.net/buacgtrack/

Al estar logeado como Administrador me permite ver un botón llamado Nueva Entrada el cual invoca un formulario en AJAX y me permite guardar la entrada para la sección BugTrack...

Pero en vez de cargarse el formulario me lanza el mensaje: La pagina que intentas cargar no existe... esto se debe a que ajax no encontro la pagina o algo, ya que asi implemento la funcion AJAX y pueden ver el mensaje:

NOTA IMPORTANTE: el sistema funciona sin las urls amigables, asi que no es error de dedo ni codigo....

Código
  1. function cargar_datos( vars, capaview, flujoddatos, varsform )
  2. {
  3. var conector, capa, url;
  4.  
  5. url= 'ajax.php'; //mis funciones para ajax
  6. capa= document.getElementById(capaview);
  7.  
  8. conector= ajax();
  9. conector.open( flujoddatos, url+'?'+vars, true );
  10. conector.onreadystatechange= function()
  11. {
  12. if( conector.readyState==1 )
  13. {
  14. capa.innerHTML= "<center><img src='admin/imagenes/loading.gif'><br><b>CARGANDO...</b></center>";
  15. }
  16. else if( conector.readyState==4 )
  17. {
  18. if( conector.status==200 )
  19. {
  20. if( varsform!=0 )
  21. conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
  22. capa.innerHTML= conector.responseText;
  23. }
  24. else if( conector.status==404 )
  25. {
  26. capa.innerHTML= "La pagina que intentas cargar no existe...";
  27. }
  28. else
  29. {
  30. capa.innerHTML= conector.status;
  31. }
  32. }
  33. }
  34. //conector.setRequestHeader( "Content-Type", "multipart/form-data" );
  35. if( varsform!=0 )
  36. {
  37. var myarr= varsform.split(':'); //dividimos
  38. var trama="";
  39. var i=0;
  40.  
  41. for( i=0; i<(myarr.length); i++ )
  42. {
  43. if( i>0 )
  44. trama += "&";
  45. trama += myarr[i]+"="+document.getElementById(myarr[i]).value;
  46. }
  47.  
  48. conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
  49. conector.send(trama);
  50. }
  51. else
  52. conector.send(null);
  53. }


Título: Re: URLs Amigables a profundidad ?
Publicado por: Diabliyo en 8 Febrero 2011, 00:04 am
Lista al fin lo solucione :D...

Basandome en que las imagenes y estilos CSS deben ser llamados con su path completo, entonces le puse el url completo al ajax.php, con esto ya quedo bien.

Por otro lado, viendo la universalidad del codigo hice una funcion para obtener el $_SERVER['HTTP_HOST'] pero en javascript, y lo unico que se me ocurrio fue esto:

Código
  1. function get_http_host()
  2. {
  3. var httpsrc, x, y; //vars
  4. httpsrc= document.URL; // obtenemos url
  5. x= httpsrc.split('http://'); // explotamos el http
  6. y= x[1].split('/'); // explotamos slash
  7. return y[0]; // retornamos http del sitio
  8. }

Ya con esta la invocas al principio anteponiendole el http:// (al principio) y el /[/i] (al final) y armas tu url sin problemas y el AJAX ya funciona con las URLs amigables.

Saludos !