Help AJAX pour identifier une ancre de page et agir en conséquence


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 10:15

Hello,

N'ayant aucune connaissance en la matière, je pense néanmoins qu'il est possible via AJAX de détecter la présence d'une ancre dans l'URL d'une page, et d'agir en conséquence sur le contenu généré par php...

En l'occurrence, voici ce que je voudrais faire:

Page exemple.com/dossier/article
--> un <div> est en "display: none;"

Page exemple.com/dossier/article#anchor
--> ce même <div> est en "display: block;"

Est-ce que quelqu'un aurait une idée simple et légère à mettre en place ? :oops:
Thanks !


5_legs
WRInaute passionné
WRInaute passionné
 
Messages: 2072
Inscription: 30 Avr 2006

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 10:39

Pourquoi en Ajax et pas en php ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 10:44

Parce que les ancres étant gérées au niveau du navigateur, elles ne sont pas (à ma connaissance) récupérables en PHP.

@HawkEye : il y a ce plugin prototype qui permet des interactions avec les ancres : http://www.forgeniuses.com/2007/11/05/ajax-anchor-component-for-prototype/

Ceci dit, je suis franchement pas convaincu, vu ce que tu cherches a priori à faire, que tu as besoin d'Ajax. L'utilisation de JS suffirait il me semble.


5_legs
WRInaute passionné
WRInaute passionné
 
Messages: 2072
Inscription: 30 Avr 2006

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 10:55

Effectivement, j'avais compris "au chargement de la page"...


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 11:32

Après de plus profondes recherches, effectivement, JS suffit :)

Je suis vraiment une grosse bille en JS. Voici ce que j'ai fait, au cas où quelqu'un y verrait une amélioration à apporter :)

Code: Tout sélectionner
<body onload="forceshow('init_hidden');">

(...)

<script type="text/javascript">
function forceshow(elem) {
if(self.document.location.hash.substring(1)!="") {
  etat=document.getElementById(elem).style.display;
  if(etat=="none") {
   document.getElementById(elem).style.display="block";
  }
}
}
</script>

(...)

<div id="init_hidden" style="display:none;">TEST</div>


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 11:36

Pour optimiser ça (notamment l'appel à getElementById, le listener au load de la page, etc.), je te conseille davantage d'utiliser un framework JS, comme prototype ou jQuery. En il convient de tester l'existence d'un élément avant d'y faire appel.


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Jeu Nov 12, 2009 11:55

OK mais le onload="forceshow('init_hidden');" sur <body> ne sera généré par php que si le <div> "init_hidden" a été généré auparavant.

Je vais néanmoins me rencarder un peu plus sur prototype ;)

Merci !


Le seul "souci" qui me reste, c'est dans le cas (rare mais possible) où le lien vers l'url avec une ancre provient de la page elle-même, et non d'une autre page...
En effet, dans ce cas là je pense que vu que la page n'est pas rechargée, la condition "onload" n'est pas remplie, et la fonction n'est pas exécutée.

Exemple:

Code: Tout sélectionner
<div caché><a name="test"></a>blabla</div>
(...)
<div visible><a href="#test">test</a></div>


-> est-ce qu'il existerait autrechose que onload ?


screuscreu
WRInaute impliqué
WRInaute impliqué
 
Messages: 968
Inscription: 14 Jan 2008

Re: Help AJAX pour identifier une ancre de page et agir en conséquence

Message le Sam Nov 14, 2009 13:37

sur ton lien : onclick="forceshow();"


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité