Autor Tema: Pregunta basica de PHP  (Leído 2272 veces)

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

Desconectado stoke

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 10
  • -Receive: 4
  • Mensajes: 342
Pregunta basica de PHP
« : septiembre 12, 2012, 10:13:19 pm »
Hola amigos, tengo una consulta, Si tengo esta URL

http://www.dominio.com/archivo.php#variable=valor

Nota que es un simbolo de "#" en lugar de "?",

Existe en PHP alguna forma de obtener "valor" de esta URL.

Desconectado JaiMe

  • Global Moderator
  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 43
  • -Receive: 413
  • Mensajes: 1485
  • λ | h+
Re:Pregunta basica de PHP
« Respuesta #1 : septiembre 13, 2012, 02:12:48 am »
Esa parte se llama fragment, y cuando mandas una petición al servidor esa parte es omitida. Tenes dos opciones

1. Obtienes el fragment usando JavaScript mediante window.location.hash y indexOf o regex
2. Mandar la url entera al servidor así como cadena de texto y luego usar parse_url() para obtener un arreglo asociativo

http://www.php.net/manual/en/function.parse-url.php

Código: [Seleccionar]
Array
(
    [scheme] => http
    [host] => hostname
    [path] => /path
    [query] => arg=value
    [fragment] => anchor   // <--- Esto te interesa
)

Follow members gave a thank to your post:
"Unless you try to do something beyond what you have already mastered, you will never grow."
― Ralph Waldo Emerson

Desconectado ~

  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 0
  • -Receive: 156
  • Mensajes: 1408
    • Ciencia de Computación, OSes y Herramientas
Re:Pregunta basica de PHP
« Respuesta #2 : septiembre 13, 2012, 05:45:23 am »
Hola amigos, tengo una consulta, Si tengo esta URL

http://www.dominio.com/archivo.php#variable=valor

Nota que es un simbolo de "#" en lugar de "?",

Existe en PHP alguna forma de obtener "valor" de esta URL.
El problema es que esa porción de la URL, llamada el "nombre de ancla", ni siquiera se envía al servidor por el navegador, así que no hay forma de usarla activamente, nativamente, como un parámetro del lado de PHP.

Poder usarla como parámetro para el servidor requiere, sin excepción, tener que usar JavaScript.

Esta ancla tiene una función muy simple, y pertenece a HTML, no al lado servidor. Por ejemplo en la siguiente página, pasar el nombre de ancla que está físicamente ubicado en la sección de temas más recientes hace que el navegador desplace la página hacia allí, automáticamente:

http://devel.cable-modem.org/#latest-topics

Gracias a este código HTML, ubicado exactamente antes de la porción de la página a la que queremos navegar automáticamente:

Código: [Seleccionar]
<a name="latest-topics"></a>
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
El parse_url() de PHP es esencialmente inútil y una sobrecomplicación en este caso, en el que queremos obtener el nombre del ancla en tiempo real, desde el navegador. Ya que necesitamos JavaScript para siquiera obtenerlo, es preferible seguir usando JavaScript para terminar de procesar el nombre de ancla (hash), y entonces usar los valores obtenidos sobre el servidor, hasta entonces.


La manera más corta que se me ocurre para obtener esta ancla simplemente es esta (que requiere JavaScript, y en la que no muestro demasiadas validaciones en caso de errores de malformación del VALOR=PAR):

Código: [Seleccionar]
function obtenerValorAnclaURL()
{
 //Obtener nombre actual del ancla de la variable nativa location.hash:
 ///
  var URLhash=location.hash;



 //Separamos el nombre de variable y el valor:
 //
 //       NombreValor[0] -- Nombre del parámetro
 //       NombreValor[1] -- Valor del parámetro
 ///
  var NombreValor=URLhash.split('=');



 //Opcionalmente, actualizar los valores
 //de algún formulario a enviar, o alguna variable
 //global de JavaScript para XmlHttpRequest:
 ///
  document.getElementById(NombreValor[0])=NombreValor[1];
  variableGlobal[NombreValor[0]]=NombreValor[1];
}


//Opcionalmente, monitoreamos constantemente
//cambios al hash, para actualizar los valores
//de propiedad de un formulario, enviándolo y/o poder usarlos
//dinámicamente con XmlHttpRequest:
///
 var hashtmr=setInterval("obtenerValorAnclaURL()",10);


Una URL considera como nombre de ancla (hash) absolutamente cualquier cosa después del primer carácter #. Incluso algo como esto:

http://servidor.com/index.html#1111#2222###33333###aaa

El nombre de ancla (location.hash) sería:

#1111#2222###33333###aaa

Actualizar manualmente esta ancla, reescribiéndola en la URL, a mano, provoca que solamente esta se actualice, y que no se envíe una petición nueva para volver a cargar la página. En otras palabras, simplemente cambiar este nombre de ancla de la URL NO RECARGA el documento web.
Follow members gave a thank to your post:
« Última Modificación: mayo 06, 2013, 01:05:39 am por ~ »
Mi sitio web:
---- IP para archivo hosts (todos mis subdominios):
190.150.9.244 archefire.org

Desconectado stoke

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 10
  • -Receive: 4
  • Mensajes: 342
Re:Pregunta basica de PHP
« Respuesta #3 : septiembre 13, 2012, 11:05:18 am »
Gracias por la aclaracion '~', Sospechaba que este hash nunca se envia al servidor y que funciona nada mas del lado del cliente, asi que no queda otra opcion que obtener el valor con Javascript y luego enviarlo a por un request al script de PHP.

Lo que hice fue leer este valor desde document.URL (ahora se que puedo usar document.hash) y luego hacer un window.location.replace('archivo.php?hash=' + hash)