URLs Amigables a profundidad ? (solved)

Iniciado por Diabliyo, 6 Febrero 2011, 01:56 AM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

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:
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:

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.

Nakp

mejor imprime el array $_GET y mira que contiene :p puede ser hasta error de dedo en el htaccess
Ojo por ojo, y el mundo acabará ciego.

Diabliyo

#2
Cita de: 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

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

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:
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:

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:

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

Ahorita les cuento !...

Diabliyo

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 (javascript) [Seleccionar]
function cargar_datos( vars, capaview, flujoddatos, varsform )
{
var conector, capa, url;

url= 'ajax.php'; //mis funciones para ajax
capa= document.getElementById(capaview);

conector= ajax();
conector.open( flujoddatos, url+'?'+vars, true );
conector.onreadystatechange= function()
{
if( conector.readyState==1 )
{
capa.innerHTML= "<center><img src='admin/imagenes/loading.gif'><br><b>CARGANDO...</b></center>";
}
else if( conector.readyState==4 )
{
if( conector.status==200 )
{
if( varsform!=0 )
conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
capa.innerHTML= conector.responseText;
}
else if( conector.status==404 )
{
capa.innerHTML= "La pagina que intentas cargar no existe...";
}
else
{
capa.innerHTML= conector.status;
}
}
}
//conector.setRequestHeader( "Content-Type", "multipart/form-data" );
if( varsform!=0 )
{
var myarr= varsform.split(':'); //dividimos
var trama="";
var i=0;

for( i=0; i<(myarr.length); i++ )
{
if( i>0 )
trama += "&";
trama += myarr[i]+"="+document.getElementById(myarr[i]).value;
}

conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
conector.send(trama);
}
else
conector.send(null);
}

Diabliyo

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 (javascript) [Seleccionar]
function get_http_host()
{
var httpsrc, x, y; //vars
httpsrc= document.URL; // obtenemos url
x= httpsrc.split('http://'); // explotamos el http
y= x[1].split('/'); // explotamos slash
return y[0]; // retornamos http del sitio
}


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 !