Mise en forme de zones de liste multiple

Eléphanteau du PHP | 34 Messages

24 févr. 2006, 15:03

Bonjour à tous,
J'ai sur un formulaire plusieurs liste à choix multiples, elles sont chargées à partir de requetes SQL (postgre) .
Mon probléme est que la largeur à l'affichage est definie par la taille du champ le plus long et du coup elles ne font pas toutes la même largeur, ce qui n'est pas top visuellement, je tente en vain d'imposer la largeur de ces listes.
De plus, chacune de ces liste charge 2 champs, est il possible d'aligner les champs à l'interieur de la liste (tabulation) ?.
C'est purement esthetique mais ca compte.
Quelqu'un a t'il un tuto ou un exemple la dessus ??
Merci d'avance

Ci joint un exemple de liste
<SELECT name="param[]" multiple="true" tabindex="1">
<?php
	$query = pg_query($db,"SELECT code_param,libelle_param FROM t_meteo_param WHERE code_param IN ('rr','rrx','s1n','s1x','s5m','tm','tmc','tn'
,'tx','amp','um','rg','rgc','dic','etpp','v','vx','cvx')") or die ("Echec sur pg_query".pg_last_error($db));
while ($object = pg_fetch_object($query)) 
	{
	echo "<option value=$object->code_param > $object->code_param"." : "." $object->libelle_param</option>";
	}
	pg_free_result($query);
?>
</SELECT>

Eléphant du PHP | 67 Messages

24 févr. 2006, 15:14

Bonjour à tous,
J'ai sur un formulaire plusieurs liste à choix multiples, elles sont chargées à partir de requetes SQL (postgre) .
Mon probléme est que la largeur à l'affichage est definie par la taille du champ le plus long et du coup elles ne font pas toutes la même largeur, ce qui n'est pas top visuellement, je tente en vain d'imposer la largeur de ces listes.
De plus, chacune de ces liste charge 2 champs, est il possible d'aligner les champs à l'interieur de la liste (tabulation) ?.
C'est purement esthetique mais ca compte.
Quelqu'un a t'il un tuto ou un exemple la dessus ??
Merci d'avance

Ci joint un exemple de liste
<SELECT name="param[]" multiple="true" tabindex="1">
<?php
	$query = pg_query($db,"SELECT code_param,libelle_param FROM t_meteo_param WHERE code_param IN ('rr','rrx','s1n','s1x','s5m','tm','tmc','tn'
,'tx','amp','um','rg','rgc','dic','etpp','v','vx','cvx')") or die ("Echec sur pg_query".pg_last_error($db));
while ($object = pg_fetch_object($query)) 
	{
	echo "<option value=$object->code_param > $object->code_param"." : "." $object->libelle_param</option>";
	}
	pg_free_result($query);
?>
</SELECT>
recherche plus dans "les style" des boutons

peut etre un size=xx bien placé..

Eléphant du PHP | 312 Messages

24 févr. 2006, 15:45

Tu appliques une feuille de style :

Code : Tout sélectionner

select { width:50px; }
De plus, chacune de ces liste charge 2 champs, est il possible d'aligner les champs à l'interieur de la liste (tabulation) ?.
J'ai du mal à saisir ce point là.
Tu veux que dans ta liste le texte ait un décalage par rapport au bord ?

Eléphant du PHP | 67 Messages

24 févr. 2006, 15:49

je crois avoir compris dans la liste qu'il veux :

liste deroulante :

BBB____:_AAA
CCCCC_:_XXXX
DD_____:_AAA
XXX____:_YYYY

('_' represente les caracteres vides)

au lieu de

BBB : AAA
CCCCC : XXXX
DD : AAA
XXX : YYYY

Eléphanteau du PHP | 34 Messages

24 févr. 2006, 16:04

liste deroulante :

BBB____:_AAA
CCCCC_:_XXXX
DD_____:_AAA
XXX____:_YYYY
C'est exactement cela, désolé pour les explications peu claires.
En fait le premier champ est une abbréviation et le second sa description compléte.

Merci
:roll:

Eléphant du PHP | 67 Messages

24 févr. 2006, 16:15

liste deroulante :

BBB____:_AAA
CCCCC_:_XXXX
DD_____:_AAA
XXX____:_YYYY
C'est exactement cela, désolé pour les explications peu claires.
En fait le premier champ est une abbréviation et le second sa description compléte.

Merci
:roll:
le mieux serait de definir une police pour laquel les chiffres, les caracters alpha et les espaces ont la meme taille...

ensuite tu remplaces par des &nbsp; (espace) les carateres manquant..

Eléphant du PHP | 312 Messages

24 févr. 2006, 16:26

Yep, je pense pas que tu puisses formater ton texte mieux qu'avec cette méthode...

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

24 févr. 2006, 16:39

[BQS]Jayce à raison et tu n'as effectivement pas vraiment d'autres alternatives...

La police Courier - ou Courier new - est idéale pour ça, car elle est présente par défaut sur quasiment tous les os et te permet d'avoir la même largeur pour tout tes caractères (aussi bien le i que le w). Il suffit donc de l'ajouter dans la déclaration du style (de mémoire : font-family:courier)

Ensuite, il faut compléter tes lignes avec des espaces blancs, le problème c'est que le html fusionne deux espaces consécutifs, et que dans une liste, les &nbsp; apparaissent en clair. Il faut donc utiliser le caractère espace insécable (code ascii 0160) pour completer tes chaines. L'idéal est de faire une fonction de type pad :
function padRight($string, $size, $char) {
  while (strlen($string) < $size) { // tant qu'on a pas la taille souhaité
    $string.= $char; // ajoute le caractère à la fin
  }
  return $string;
}

$optionLibelle = padRight("BBB", 10, " ") . " : " . "AAAA";
// attention le caractère utilisé dans padRight n'est pas un espace classique
// tu peux l'obtenir en mainteant alt enfoncé et en tapant le code 0160 sur le pavé avant de relacher le alt. 
// Il aussi peut être copié collé ;)
Cela t'ajoutera automatiquement 7 espaces insécables après les "BBB" (pour arriver à 10) et tu pourras ainsi construire ta chaine :)

Eléphanteau du PHP | 34 Messages

24 févr. 2006, 16:52

Bonjour
Alors la je suis calmé pour un moment, le temps pour moi d'arriver à comprendre et surtout à appliquer cela dans mon code.
Merci beaucoup je vais m'y mettre
J'étais en train de tenté quelque chose avec un sprintf mais bon si ce n'est pas possible.

Encore merci.
:shock: :shock: :shock:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

24 févr. 2006, 17:02

Modération : je déplace ton message dans HTML et CSS, où tu auras des réponses de spécialistes.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.