Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

La balise base et les ancres

Questions concernant le HTML, HTML5, xHTML et les CSS.

La balise base et les ancres

Messagepar Nico128 11 Déc 2007, 10:54

Salut à tous !

J'utilise l'url rewriting pour mon site et j'ai du ajouter une balise pour que les liens soient correct :

<base href="http://monsite.com/" >


Le problème c'est que j'utilise à un endroit une ancre pour remonter tout au haut d'une page.

<a href="#">Top</a>


Le problème c'est qu'avec la balise base j'obtient ce lien :

http://monsite.com/#


au lieu de

http://monsite.com/ma-page-en-cours.html#


Alors est-ce que je dois abandonné ? Ou il y a t'il des techniques pour éviter ça ?

Merci d'avance
Nico128
J'ai codé une fonction !
 
Messages: 246
Inscription: 18 Juil 2005, 15:46

Messagepar Hywan 11 Déc 2007, 13:25

Quelques mots rapidement (je suis en cours :lol:, TP LW -- langage Web --).
La balise <base> est à l'abandon pour HTML 4.01, et je ne parle pas de HTML 5. Il faudra que je me renseigne plus précisemment, mais de mémoire, il y a <host> ou <ihost> qui vont arriver, et <xml:base> également. Donc bon ... Rien de précis, et beaucoup de flou.
Evite l'utilisation de cette balise pour l'instant.

Le plus simple actuellement, et définir la base de ton site avec une constante déclarée en PHP (voir define()). Et tu appelles cette constante dans ton code HTML (<?php echo MA_BASE; ?>). Quitte à sortir la constante de toutes tes pages, et de le mettre dans un fichier de configuration par exemple.

C'est la meilleur solution actuelle d'après moi.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).
Hywan
ViPHP
ViPHP
 
Messages: 4669
Inscription: 03 Mai 2005, 21:01
Localisation: France & Suisse

Messagepar Nico128 11 Déc 2007, 13:48

HyWaN a écrit:Le plus simple actuellement, et définir la base de ton site avec une constante déclarée en PHP (voir define()). Et tu appelles cette constante dans ton code HTML (<?php echo MA_BASE; ?>). Quitte à sortir la constante de toutes tes pages, et de le mettre dans un fichier de configuration par exemple.

C'est la meilleur solution actuelle d'après moi.


Salut. Donc ce que tu m'expliques, c'est qu'il faudrait que tous mes liens soient en absolue ? Que je devrai afficher ma constante php devant tous mes liens ? Bouaf pourquoi pas, mais si c'est juste pour résoudre ce problème d'ancre alors je vais plutôt l'enlever, c'est plus simple ^^
Nico128
J'ai codé une fonction !
 
Messages: 246
Inscription: 18 Juil 2005, 15:46

Messagepar Hywan 11 Déc 2007, 16:08

Si tu veux utiliser une ancre, pas besoin de base.
L'utilisation de base n'est utile que dans le cas de redéfinition de lien. Soit HTML le dit au navigateur, ou alors tu le forces en PHP. Mais dans les deux cas, l'ancre ne dépend pas de la base.

Edit : je viens de relire ton poste, j'avais mal compris (lu trop vite, désolé). Ton problème est étrange en fait. Si tu enlèves ton moteur de réécriture d'URLs, ça le fait encore ou pas (en conservant <base>) ?

Et c'est toujours mieux d'avoir des liens en absolus, enfin, ça ne reste que mon opinion (je n'ai pas une grande expérience d'applications Web, mais en ce qui concerne les sites, c'est tout de suite plus simple, autant du côté d'HTML que de PHP).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).
Hywan
ViPHP
ViPHP
 
Messages: 4669
Inscription: 03 Mai 2005, 21:01
Localisation: France & Suisse

Re: La balise base et les ancres

Messagepar Victor BRITO 11 Déc 2007, 16:51

Nico128 a écrit:Le problème c'est que j'utilise à un endroit une ancre pour remonter tout au haut d'une page.

<a href="#">Top</a>

Attention ! le raccourci # ne fonctionne pas sous Opera. Dans ce cas, insère un attribut id à l'élément body
<body id="top">

et code ton ancre comme suit :
<a href="#top">Top</a>
.

Quant à l'élément base, il n'est pas "deprecated" par la spécification HTML 4. Si tu veux l'utiliser, essaie comme suit :
<base href="http://monsite.com/ma-page-en-cours.html">

HyWaN, désolé de te contredire, mais l'élément base n'est pas abandonné par le chantier de HTML 5. :wink:
Victor BRITO
Ganesha
 
Messages: 2937
Inscription: 07 Mar 2006, 16:36

Messagepar Hywan 11 Déc 2007, 18:06

Au temps pour moi ! Je n'étais plus sûr (et il me semble l'avoir préciser).
Le lien # ne fonctionne pas sur Opera ? Mince. Je pensais que c'était corrigé depuis un moment.

Il faut vraiment que je dorme moi ... je vais revenir sur PHPFrance après 36h de sommeil, à toute :wink:.

PS : ne t'excuse pas de me contredire ;-), on a tous le droit de faire des erreurs, et c'est normal de me reprendre si j'en fais.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).
Hywan
ViPHP
ViPHP
 
Messages: 4669
Inscription: 03 Mai 2005, 21:01
Localisation: France & Suisse

Messagepar Victor BRITO 11 Déc 2007, 18:33

HyWaN a écrit:Le lien # ne fonctionne pas sur Opera ? Mince. Je pensais que c'était corrigé depuis un moment.

En fait (je viens de le vérifier), le raccourci est implémenté par la version 9.5 bêta. :wink:
Victor BRITO
Ganesha
 
Messages: 2937
Inscription: 07 Mar 2006, 16:36

Messagepar Nico128 12 Déc 2007, 01:38

Je regarderai ça demain ou jeudi. je vous tient au courant.
Nico128
J'ai codé une fonction !
 
Messages: 246
Inscription: 18 Juil 2005, 15:46

Messagepar Nico128 01 Jan 2008, 18:13

J'ai trouvé la solution à mon problème ^^

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<a href="<?php echo $_SERVER&#91;'REQUEST_URI'&#93;; ?>#" />Top</a>
Nico128
J'ai codé une fonction !
 
Messages: 246
Inscription: 18 Juil 2005, 15:46

Messagepar Hywan 01 Jan 2008, 19:43

En quoi est-ce plus simple que d'avoir <body id="top"> et toujours appeler tes liens vers #top ? C'est plus simple à manipuler et à maintenir. Je rappelle que c'était la solution proposé par Victor.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).
Hywan
ViPHP
ViPHP
 
Messages: 4669
Inscription: 03 Mai 2005, 21:01
Localisation: France & Suisse

Messagepar Nico128 02 Jan 2008, 15:56

Le problème c'est que lorsque je faisais l'ancre, que ce soit :

<a href="#">Top</a>


Ou bien

<a href="#top">Top</a>


Dans tous les cas lorsque je survolais le lien j'obtenais :

http://monsite.com/#


Ou

http://monsite.com/#top


Alors que j'étais censé avoir :

http://monsite.com/ma-page-en-cours.html#top


Donc fallait que j'aie l'adresse de la page en cours. Mais je savais pas qu'une variable existait déjà, je suis tombé dessus par hasard ^^. Sinon je vais quand même utilisé la solution de Victor, j'avais oublié ce problème sous Opera.
Nico128
J'ai codé une fonction !
 
Messages: 246
Inscription: 18 Juil 2005, 15:46

Messagepar Hywan 02 Jan 2008, 16:15

Une ancre ne retourne jamais à la racine du site.
Bon je t'explique parce qu'aux vues de ce que nous a écrit là, tu n'as pas compris.

Tu as 2 façons de naviguer sur un site. Tu as les liens entre les pages, qui permettent une navigation non-linéaire d'un site. Mais tu as également des liens dans la page, ce qu'on appelle plus couramment des liens d'évitements (on ne peut pas étendre le terme partout, mais on va tolérer).

Les liens s'écrivent de cette façon (avec plusieurs exemples) :
<a href="maPage.html">aller à ma page</a>
est un lien normal.

on est : site.net/dossier/
et on appelle : href="maPage.html"
on ira : site.net/dossier/maPage.html

on est : site.net/dossier/
et on appelle : href="/maPage.html"
on ira : site.net/maPage.html

on est : site.net/
et on appelle : href="/dossier/maPage.html"
on ira : site.net/dossier/maPage.html

on est : site.net/dossier/
et on appelle : href="dossier/maPage.html"
on ira : site.net/dossier/dossier/maPage.html

Ça c'est pour resituer la chose avec les liens à partir de la racine ou non.

Ensuite, on a les ancres (ou fragments selon les RFCs). Elles permettent seulement la navigation dans la page. On a coutume d'appeler une ancre l'identifiant d'un élément.
La forme est :
<a href="#id">Aller à l'élément qui a l'ID « id »</a>

Si tu donnes l'ID "top" à ta balise <body>. Quand tu appelles href="#top", tu iras forcément en haut de ta page, et pas d'une autre page.
L'ancre vide (href="#") correspond à la page elle-même. Son interprétation diffère selon les navigateurs. Très souvent, il remonte en haut de la page, mais pas toujours.

À la différence d'un lien, une ancre ne recharge pas la page.

Donc :
on est : site.net/dossier/maPage.html
et on appelle : #top
on ira site.net/dossier/maPage.html#top

As-tu compris ? Parce que ce que nous dis n'a aucun sens (notamment que <a href="#">Top</a> serait identique à <a href="#top">lien</a>).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).
Hywan
ViPHP
ViPHP
 
Messages: 4669
Inscription: 03 Mai 2005, 21:01
Localisation: France & Suisse

Messagepar Nico128 20 Jan 2008, 02:04

J'avais oublié ce topic, je viens d'y repensé, et je voudrais quand même y répondre, même si ça date déjà.

HyWaN, je suis entièrement d'accord avec ce que tu as écrit. Sauf que là, j'utilise la balise <base>

<base href="http://monsite.com/" >


Lorsque je l'enlève, ça fonctionne normalement, comme tu me l'as expliqué si bien. Lorsque je la remet, hop, ça ne marche plus et ça me retourne la racine du site. Bizzard ? Bah, oui, j'ai quand même faits des tests avant de raconter "n'importe quoi" et c'est pourtant bien ce qui se passe.
Nico128
J'ai codé une fonction !
 
Messages: 246
Inscription: 18 Juil 2005, 15:46

Messagepar Hywan 20 Jan 2008, 23:11

Pour bien comprendre son fonctionnement, je te redirige vers la meilleur documentation HTML : 12.4 Path information: the BASE element sur le site du W3C.

J'avoue n'avoir pas beaucoup étudié le comportement de <base>. Mais lis la recommandation, et si ton problème persiste, je m'y pencherais pour t'aider :).

La page de recommandation que je te file est très intéressante. Ne te cantonne pas à la section 12.4, mais toutes la page si tu n'es pas très à l'aise avec ces notions de liens (et une bonne révision ne fait jamais de mal ;-)).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).
Hywan
ViPHP
ViPHP
 
Messages: 4669
Inscription: 03 Mai 2005, 21:01
Localisation: France & Suisse


Retourner vers HTML, HTML5, CSS

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités