Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] detectar link en página

Estas en el tema de detectar link en página en el foro de PHP en Foros del Web. Hola Estoy buscando la forma de establecer un sistema para insertar css cuando tal o cual sección esté activa o no. Después de varios intentos, ...

  #1 (permalink)  
Antiguo 27/09/2013, 08:07
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
detectar link en página

Hola

Estoy buscando la forma de establecer un sistema para insertar css cuando tal o cual sección esté activa o no. Después de varios intentos, creo que lo mejor es determinar si existe enlace hacia las mismas en el mapa del sitio.

Se trata de colocar un código en el index que busque un link concreto o parte del mismo en ese mapa.

Así, si fuera en ForosdelWeb y todas sus secciones estuvieran en un mapa, detectar (muy concretamente con esta forma) "tags/dominio" para saber si existe esta sección:

http://www.forosdelweb.com/tags/dominio.html?f=83

En cuanto sea detectado dicho fragmento en un enlace, se daría la orden de insertar un css concreto.

¿Me podéis orientar sobre dónde buscar esto o hacerlo?
  #2 (permalink)  
Antiguo 27/09/2013, 08:16
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

DOMDocument, DOMXPath, podria servirte de algo
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 27/09/2013, 12:05
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

He seguido tu sugerencia a lo largo de las últimas cuatro horas y no he logrado el objetivo.

Si me pudieras dar alguna otra indicación - tú u otra persona - para que pudiera seguir adelante, os lo agradecería.

Se trata de detectar anchor texts en enlaces de una sección.

Un saludo y gracias.
  #4 (permalink)  
Antiguo 27/09/2013, 13:11
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Suponiendo que el sitemap es.un xml podrias hacer algo asi

Código PHP:
Ver original
  1. $ruta="ruta del sitemap xml";
  2. $dom=new DOMDocument;
  3. $dom->preserveWhiteSpace= FALSE;
  4. $dom->loadXMLfile($ruta);
  5. $links=$dom->getElementByTagName('link');
  6. foreach($links as $link){
  7. echo $link->nodeValue."<br>";
  8. }
No probe el codigo, puede que contenga errores, pero parece que necesitas algo asi
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #5 (permalink)  
Antiguo 27/09/2013, 16:37
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Gracias por responder SkAr88.

He introducido el código después de cambiarlo un poco.

El tema es que los links a los que me refiero están en un mapa del sitio generado por una extensión sin más complicaciones, siendo un listado normal de enlaces.

Está en la ubicación "mapa-del-sitio"

He colocado el código así:

Código:
<?php
    $ruta="mapa-del-sitio";
    $dom=new DOMDocument;
    $dom->preserveWhiteSpace= FALSE;
    $dom->loadPHPfile($ruta);
    $links=$dom->getElementByTagName('link');
    foreach($links as $link){
    echo $link->nodeValue."<br>";
    }
?>
Y me ha dado este error:

Fatal error: Call to undefined method DOMDocument::loadPHPfile() in /homepages/16/d454391645/htdocs/html/templates/beez_20/index.php on line 114

Dos cosas:

Primero, las direcciones web están sin extensión. No sé si influye ($ruta="mapa-del-sitio"; o $ruta="mapa-del-sitio.php";)

Por otro lado, he colocado el código en el head, que es donde quiero que aparezca el estilo css.

En fin, disculpad mi parquedad de conocimientos.

Un saludo y gracias por cualquier sugerencia adicional.
  #6 (permalink)  
Antiguo 27/09/2013, 16:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: detectar link en página

El método loadPHPfile() no existe, ¿de dónde has sacado tan mala idea?

No dejes todo a tu imaginación, supongo que tu "parquedad" se debe a tus pocas intenciones de documentarte como se debe.

Ahora, debes cargar un archivo con contenido XML, indistintamente si tiene o no tiene extensión debe contener XML.

Si tu script .php genera contenido XML, entonces debes guardar ese contenido en otro lugar en su estado final, es decir, completamente generado.

Si tu le pasas la ruta de un script PHP que genera el XML no va a funcionar, porque dicho código PHP se debe pre-procesar para dicho cometido, entonces no sirve de ese modo.

Por favor, lee el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 27/09/2013, 16:52
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Justo estaba leyendo esto:

http://php.net/manual/es/domdocument...sbytagname.php
  #8 (permalink)  
Antiguo 27/09/2013, 16:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Entonces, ¿si utilizo el sitemap xml que genera la aplicación funcionará?

Es decir, así:


<?php
$ruta="mapa-del-sitio.xml";
$dom=new DOMDocument;
$dom->preserveWhiteSpace= FALSE;
$dom->loadPHPfile($ruta);
$links=$dom->getElementByTagName('link');
foreach($links as $link){
echo $link->nodeValue."<br>";
}
?>
  #9 (permalink)  
Antiguo 27/09/2013, 16:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: detectar link en página

Cita:
Iniciado por JUMASOL Ver Mensaje
Entonces, ¿si utilizo el sitemap xml que genera la aplicación funcionará?
¿Qué tal si haces la prueba y nos cuentas?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 27/09/2013, 17:00
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

No lo tengo instalado aún.

Tendré que hacerlo está claro. Además, creo que es la opción más limpia para lo que quiero.

Volveré.
  #11 (permalink)  
Antiguo 27/09/2013, 17:29
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

El metodo loadPHPfile() no existe, los que si existen son loadXMLfile() y loadHTMLfile(), ademas en la variablr pasa la url del mapa del sitio no del fichero ej: "http://url.del/mapadelsitio" y el metodo es getElementsByTagName()
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.

Última edición por xSkArx; 27/09/2013 a las 18:04
  #12 (permalink)  
Antiguo 02/10/2013, 04:17
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Hola de nuevo.

He creado el mapa del sitio con contenido xml.

Luego insertado este script en el head de mi sitio:

Código:
<?php
$ruta="http://www. el sitio .com/index.php?option=com_xmap&view=xml&tmpl=component&id=1";
    $dom=new DOMDocument;
    $dom->preserveWhiteSpace= FALSE;
    $dom->loadXMLfile($ruta);
    $links=$dom->getElementByTagName('link');
    foreach($links as $link){
    echo $link->nodeValue."<br>";
    }
?>
Y da este error

Código:
Fatal error: Call to undefined method DOMDocument::loadXMLfile() in /homepages/14/d487169161/htdocs/html/templates/beez3/index.php on line 127
Que coincide con
Código:
    $dom->loadXMLfile($ruta);
La ruta es correcta en cuanto a URL, mostrando un listado de urls, y siendo el contenido del código un xml (<?xml version="1.0" encoding="UTF-8"?>).

Si la sustituyo por la ruta del menú: (www. sitio .com/mapa) da el mismo error.

¿Alguna sugerencia?

Última edición por JUMASOL; 02/10/2013 a las 04:34
  #13 (permalink)  
Antiguo 02/10/2013, 05:17
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Amigo, cambia loadxmlfile por load.y getElementByTagName xambialo por getElementsByTagName
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #14 (permalink)  
Antiguo 02/10/2013, 05:41
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Acabo de ponerlo así:

Código:
<?php
$ruta="http://www. sitio .com/index.php?option=com_xmap&view=xml&tmpl=component&id=1";
    $dom=new DOMDocument;
    $dom->preserveWhiteSpace= FALSE;
    $dom->load($ruta);
    $links=$dom->getElementsByTagName('descripciones');
    foreach($links as $link){
     echo '<link href="/css/xxxxxxxxxxxxxxxxxxx.css" rel="stylesheet" type="text/css" />';
    }
?>
Ahora no da error. Pero el caso es que, existiendo un enlace con la palabra "descripciones" en el sitemap, parece no funcionar. El archivo xxxxxxxxxxxxxxxxxxx.css de prueba que véis no aparece por ningún sitio.

Como os digo, http://www. sitio .com/descripciones existe en el listado en ese sitemap.
  #15 (permalink)  
Antiguo 02/10/2013, 06:25
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Como tienes el sitemap, pon algo de codigo del sitemap y deberias echarle una mirada al manual sobre getElementsByTagName() porque veo que no tienes claro su funcion
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #16 (permalink)  
Antiguo 02/10/2013, 06:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

El sitemap está así:

Código:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www. sitiow .com/index.php?option=com_xmap&amp;view=xml&amp;layout=xsl&amp;tmpl=component&amp;id=1&amp;filter_showtitle=&amp;filter_showexcluded="?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>
<loc>http://www. sitio .com/descripciones</loc>
<uid>itemid102</uid>
<itemid>102</itemid>
<changefreq>hourly</changefreq>
<priority>0.5</priority>
</url>
<url>

...................
  #17 (permalink)  
Antiguo 02/10/2013, 06:43
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Si quieres el link pon getElementsByTagName('loc') pero no me quedo claro lo que quieres hacer con el valor devuelto
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #18 (permalink)  
Antiguo 02/10/2013, 06:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

De lo que se trata es de explorar el sitemap y, en caso de existencia de tal o cual link, insertar un archivo css.

El script debe ir en el index.

Voy a probar lo que dices.

Última edición por JUMASOL; 02/10/2013 a las 07:01
  #19 (permalink)  
Antiguo 02/10/2013, 07:39
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

No, no ha funcionado.

No se ha insertado nada.

¿No hay una forma de detectar una palabra (que sería el nombre del link en sí) en una página determinada (el archivo html del mapa del sitio) para insertar a continuación el css?

He buscado y encontrado muchos scripts pero ninguno funciona.
  #20 (permalink)  
Antiguo 02/10/2013, 07:41
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

getElementsByTagName('loc') devuelve un objeto con todas las incidencias encotrdas, despues puedes recorres ese objeto y guardar los datos en un array y buscar en el array tal link ej

$links=$dom->getElementsByTagName('loc');
for($i=1; $i<$links->length; $i++){
$link[]=$links->nodeValue;
}
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #21 (permalink)  
Antiguo 02/10/2013, 10:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Llevo varias horas, desde que se publicó el último mensaje, intentando articular esto sin resultado.

No sé lo que estoy haciendo mal.

¿Sabéis si existe algún demo o tutorial para hacer esto en algún sitio?

Se trata de detectar una palabra en un link en una página y en caso afirmativo insertar un archivo css.
  #22 (permalink)  
Antiguo 02/10/2013, 11:06
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

He logrado montar esto:

Código:
  <?php
   $urls = array();  

$DomDocument = new DOMDocument();
$DomDocument->preserveWhiteSpace = false;
$DomDocument->load('http://www. sitio .com/index.php?option=com_xmap&view=xml&tmpl=component&id=1');
$DomNodeList = $DomDocument->getElementsByTagName('loc');

foreach($DomNodeList as $url) {
    $urls[] = $url->nodeValue;
}

//display it
echo "<pre>";
print_r($urls);
echo "</pre>";
  
  
  ?>
Que me ha insertado en la página un listado con todos los enlaces en el sitemap. Que, por cierto, me los muestra en la parte superior de la página.

Concretamente esto:

Código:
Array
(
    [0] => http://www. sitio .com/enlace-a
    [1] => http://www. sitio .com/enlace-b
    [2] => http://www. sitio .com/enlace-c
    [3] => http://www. sitio .com/enlace-d
    [4] => http://www. sitio .com/enlace-e
    [5] => http://www. sitio .com/enlace-f
    [6] => http://www. sitio .com/enlace-g
    [7] => http://www. sitio .com/enlace-h
    [8] => http://www. sitio .com/enlace-i
)
Teniendo ya este array, me podéis orientar sobre cómo identificar, por ejemplo la url http://www. sitio .com/enlace-h (o el enlace-h) para devolver un archivo css en el mismo head.

Gracias
  #23 (permalink)  
Antiguo 02/10/2013, 12:25
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

for($i=0; $i<count($array); $i++){
if(strpos("palabra a buscar",$array[$i]){
echo "<link.....>";
}
}
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #24 (permalink)  
Antiguo 02/10/2013, 12:37
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Esta parte:


if(strpos("palabra a buscar",$array[$i]){


Me da este error:

Parse error: syntax error, unexpected '{' in /homepages/14/d487169161/htdocs/html/index.php on line 133
  #25 (permalink)  
Antiguo 02/10/2013, 13:06
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Falta un parentesis al final antes de la llave {
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #26 (permalink)  
Antiguo 02/10/2013, 13:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: detectar link en página

Cita:
Iniciado por JUMASOL Ver Mensaje
Esta parte:


if(strpos("palabra a buscar",$array[$i]){


Me da este error:

Parse error: syntax error, unexpected '{' in /homepages/14/d487169161/htdocs/html/index.php on line 133
Mas claro ni el agua.

Cita:
Iniciado por SkAr88 Ver Mensaje
Falta un parentesis al final antes de la llave {
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #27 (permalink)  
Antiguo 02/10/2013, 14:04
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Hola de nuevo.

Sí, efectivamente faltaba un paréntesis, pero no me arroja ningún resultado.

Me podéis orientar sobre dónde encajaría la solución propuesta:

Código:
for($i=0; $i<count($array); $i++){
if(strpos("palabra a buscar",$array[$i])){
echo "<link.....>";
}
}
Aquí:

Código:
  <?php
   $urls = array();  

$DomDocument = new DOMDocument();
$DomDocument->preserveWhiteSpace = false;
$DomDocument->load('http://www.framtravelsafe.com/index.php?option=com_xmap&view=xml&tmpl=component&id=1');
$DomNodeList = $DomDocument->getElementsByTagName('loc');

foreach($DomNodeList as $url) {
    $urls[] = $url->nodeValue;
}

//display it
echo "<pre>";
print_r($urls);
echo "</pre>";
  
  
  ?>
No me arroja ningún resultado ni para las urls completas en sustitución de "palabra a buscar" ni para el nombre del enlace en sí.

Gracias por vuestra infinita paciencia.
  #28 (permalink)  
Antiguo 02/10/2013, 14:33
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Cambia el contenido del foreach

foreach($blabla as $blablasa){
if(strpos("http://blanla",$url->nodeValue)){
$var="aqui guardas el css";
}
}
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #29 (permalink)  
Antiguo 02/10/2013, 15:09
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: detectar link en página

Si te refieres a este cambio:


Código:
  <?php
   $urls = array();  

$DomDocument = new DOMDocument();
$DomDocument->preserveWhiteSpace = false;
$DomDocument->load('http://www.framtravelsafe.com/index.php?option=com_xmap&view=xml&tmpl=component&id=1');
$DomNodeList = $DomDocument->getElementsByTagName('loc');

foreach($enlace-a as $enlace-a) {
if(strpos("http://www. sitio. com/enlace-a",$url->nodeValue)){
$var="aqui guardas el css";
}
}

//display it
echo "<pre>";
print_r($urls);
echo "</pre>";
  
  
  ?>
Te indico que no arroja nada.
  #30 (permalink)  
Antiguo 02/10/2013, 15:26
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 2 meses
Puntos: 96
Respuesta: detectar link en página

Código PHP:
Ver original
  1. foreach($DomNodeList as $url){
  2. ....
  3. }

Nota: strpos($url->nodeValue,"http://blabla")
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.

Última edición por xSkArx; 02/10/2013 a las 15:34

Etiquetas: html, link, página
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 21:31.