8792 sujets

Développement web côté serveur, CMS

Bonjour à vous,

Me voilà face à un problème que je trouve insoluble... Je récupère des catégories dans une base Mysql et je veux afficher cette liste de catégories comme suit : un index alphabétique (1er caractère de chaque catégorie), et au survol de la lettre, la liste des catégories en toutes lettres. (en dessous). Mon problème réside dans l'affichage des catégories en toutes lettres. Je suis dans une <div> 'imbriquée', et le texte dépasse sur la droite de manière aléatoire. En creusant la question, je me suis aperçu que la liste des catégorie ($output_tags dans le code qui suit) est géré comme 1 mot unique ! Le texte coupe donc que là où la catégorie comporte un espace (par exemple : jeux vidéos), mais pour le reste: pas de coupure donc ça dépasse de ma <div>...

Bon, j'espère que vous arrivez à me coimprendre... et que vous pourrez me mettre sur la voie...

Le code (là aussi, c'est sûrement pas du très propre...) :

      $prevFirstChar = '';
      $currFirstChar = '';
      $output_tags = '';
      $tag_compteur = 0;
      $tag_index = NULL;
      $requete = "SELECT DISTINCT category FROM scCategories ORDER BY category";
      $result = mysql_query($requete) or die(mysql_error());
      while ($tag = mysql_fetch_array($result)) {
        $currFirstChar = utf8_substr($tag['category'], 0, 1);     
          if (0 != strcasecmp($currFirstChar, $prevFirstChar)) {
            if (!is_null($tag_index)) { $output_tags .= '</div>'; }
            $output_index .= '<a href="#" onmouseover="[...]">'.$currFirstChar . '</a>&nbsp;';
            $prevFirstChar = $currFirstChar;
            $tag_index = $tag_compteur;
            $output_tags .= '<div id="div_tag_'.$tag_compteur.'" style="display:none;">';
            $tag_compteur++;
          }
        $output_tags .= '<a href="#" style="margin:3px;" onclick="copy_cat(this.innerHTML); return false;">'.stripslashes($tag['category']).'</a>';
      };
      $output_tags .= '</div>';
      
      echo $output_index;
      echo $output_tags;


J'ai allégé un peu avec [...].

Merci à vous !
N'hésitez pas à demander si vous souhaitez plus d'info.

Je précise tout de même que j'appelle cette 'page' avec une requete http ('ajax'), si ça a son importance...
Modifié par fretoune (06 Aug 2006 - 14:19)
Bonjour,

Je viens de trouver... Il suffisait de rajouter un espace après la balise </a>...
Que de temps 'perdu' pour un petit blanc... Smiley rolleyes

Bonne journée à vous tous.
Je ne suis pas sûr d'avoir bien compris ton problème mais sache que niveau accessibilité il me semble qu'il n'est pas bon de mettre plusieurs liens à la suite sans séparateur.

Donc plutôt que de faire :
<a href="x">x</a> <a href="y">y</a>
Il est recommandé de faire (par exemple) :
<a href="x">x</a> | <a href="y">y</a>
ou mieux dans ton cas puisque c'est une liste :
<ul>
    <li><a href="x">x</a></li>
    <li><a href="y">y</a></li>
</ul>

Bon courage.
Je vais mettre le séparateur. La liste <li> m'embête un peu pour des raisons d'esthétique. Elle provoque un affichage en colonne et la liste prends donc trop de place.

Merci pour ta réponse. Smiley smile
fretoune a écrit :
La liste <li> m'embête un peu pour des raisons d'esthétique. Elle provoque un affichage en colonne et la liste prends donc trop de place.
C'est ici qu'intervient la puissance du langage CSS. Je t'invite à consulter cet article d'Openweb : Boîtes bloc, boîtes en ligne et propriété display (notamment et surtout la section Les listes horizontales : transformer une boîte bloc en boîte en ligne)