Réaliser un lexique, glossaire, abécédaire

Eléphant du PHP | 70 Messages

08 avr. 2008, 11:11

Bonjour à tous,

Voici mon problème, j'ai une liste de mots clés dans ma base de donnée que j'affiche dans mon admin par ordre alphabétique, je souhaiterais pouvoir aller directement à une lettre grace à des ancres nommées en cliquant sur une lettre.

Je ne sais pas du tout comment réaliser ceci, alors un petit coup de main serait vraiment le bienvenue.

D'avance merci beauoup

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 avr. 2008, 11:33

Cela se passe en deux étapes:
- ajouter des ancres dans ta page
- ajouter un abécédaire avec des liens.

Pour ajouter une ancre, il te faut ajouter une balise <a name="lettreQuiVaBien"></a> à chaque fois que tes mots débuttent par une nouvelle lettre.
Pour cela, il te suffit simplement dans la boucle qui affiche tes mots, de récupérer l'initiale du mot affiché (avec substr() par exemple) et de la stocker dans une variable temporaire. Au mot suivant, tu va comparer l'initiale avec celle de ta variable. S'ils sont identique, tu ne fais rien, s'ils sont différents tu ajoutes ton ancre et tu écrase ta variable avec la nouvelle initiale.

Pour créer l'abécédaire, tu peux faire soit une solution simple, cad lister toutes les lettres de l'alphabet et mettre un lien dessus pointant vers leurs ancres respectives <a href="#lettreQuiVaBien">...</a>, soit faire une requête spécifique qui ira chercher dans ta base de données les initiales des mots présents (SELECT DISTINCT SUBSTR(0,1) ...). Il te suffira alors d'afficher ces initiales avec les liens qui vont bien pour ne proposer un abécédaire que des lettres véritablement disponibles :)

HTH
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 70 Messages

08 avr. 2008, 11:55

Tout d'abord merci beaucoup pour ta réponse,

Au risque d'abuser, pourrais-je avoir un exemple de la requête que je dois effectuer, je suis débutant et là franchement je vois pas trop comment je dois procéder

D'avance merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 avr. 2008, 13:51

Un exemple de select ? bah euh...

Code : Tout sélectionner

SELECT DISTINCT SUBSTRING(tonChamp, 1, 1) FROM taTable ORDER BY tonChamp
Devrait te retourner chacune des initiale des valeurs de tonChamp (substring) en éliminant les doublon (distinct), trié par ordre alphabétique (order by)

Une fois la requête exécutée, il ne te reste qu'à parcourir les résultats pour récupérer les différentes initiales dispo en base.... mais commence peut être par la version simple avec un abécédaire en dur et des renvoi qui fonctionnent. Il sera toujours possible de le faire évoluer ensuite :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 70 Messages

08 avr. 2008, 14:19

Oups,

Pardon je me suis mal exprimé, pour la requête c'était ok, j'ai réussi à afficher simplement les lettres présentes dans la base.

Là ou je bloque c'est pour l'histoire de la variable temporaire, etc... Donc plutôt coté PHP

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 avr. 2008, 14:36

Oki, alors commençons par un petit algo de ce qu'on veut faire et tu vas voir que le php viendra tout seul :)

Code : Tout sélectionner

DECLARER une variable "$temp". TANT QUE ta requête retourne des résultats SI l'initiale du mot retourné est différente de la valeur de $temp ALORS afficher une ancre pour l'initiale concernée écraser la valeur de $temp avec l'initiale FIN SI AFFICHER le mot, la définition et tout ce qui va bien... FIN TANT QUE
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 70 Messages

08 avr. 2008, 15:11

A ben alors là chapeau, :shock:

Avec des explications aussi claire, j'ai réussi du premier coup

Mille merci, c'est super sympa :D :D :D

Encore bravo