Couper une longue liste en plusieurs colonnes

Petit nouveau ! | 4 Messages

15 nov. 2012, 12:22

Bonjour à tous,

Je créé sur mon site une liste banale de la manière suivante :

<ul style="list-style-type:none; margin:0; padding:0;">
<?$queryM = "SELECT * FROM marques INNER JOIN modeles ON rid_marque = id_marque INNER JOIN vehicules ON rid_modele = id_modele AND publication = '1' AND marchand = '0' AND photo = '1' AND prix != '0' GROUP BY id_marque ORDER BY marque";
$execM = mysql_query($queryM);
while($rowM = mysql_fetch_array($execM)){?>
<li style="margin-bottom:6px; margin-right:10px;"><a href="/voitures-occasion-<?=strtolower($rowM['marque'])?>,<?=stripslashes($rowM['id_marque'])?>.html"><?=$rowM['marque'];?></a></li>
<? } ?>
</ul>
Sauf que ma base de donnée comporte 20 marques, donc ça donne une liste qui prend beaucoup de place verticalement.
J'aimerais couper cette liste en deux et l'afficher sur 2 colonnes (10 marques par colonne).
Mais je ne trouve pas de solution...

Merci par avance pour vos pistes.

Rom.

Petit nouveau ! | 9 Messages

15 nov. 2012, 12:32

Bonjour,

En ajoutant un LIMIT(0,9) a la fin de te requête sa te convient pas?
$queryM = "SELECT * FROM marques INNER JOIN modeles ON rid_marque = id_marque INNER JOIN vehicules ON rid_modele = id_modele AND publication = '1' AND marchand = '0' AND photo = '1' AND prix != '0' GROUP BY id_marque ORDER BY marque LIMIT 0,10 ";

Petit nouveau ! | 4 Messages

15 nov. 2012, 13:11

Ok merci je ne connaissais pas l'astuce,
j'ai donc créé deux listes avec deux requêtes, une qui prend les résultats 1 à 10, et l'autre 11 à 20.
Merci encore, bonne journée !

Rom.

Eléphant du PHP | 267 Messages

15 nov. 2012, 13:27

salut,
<?php
$queryM = "SELECT * FROM marques INNER JOIN modeles ON rid_marque = id_marque INNER JOIN vehicules ON rid_modele = id_modele AND publication = '1' AND marchand = '0' AND photo = '1' AND prix != '0' GROUP BY id_marque ORDER BY marque";
$execM = mysql_query($queryM);
$i = 0;
ob_start();
echo('<ul style="list-style-type:none; margin:0; padding:0;">');
while( $rowM = mysql_fetch_array($execM) ){
    echo('<li style="margin-bottom:6px; margin-right:10px;"><a href="/voitures-occasion-'.strtolower($rowM['marque']).','.stripslashes($rowM['id_marque']).'.html">'.$rowM['marque'].'</a></li>');
    $i++;
    if( $i % 10 == 0 ) {
        echo('</ul>');
        ob_flush();
        echo('<ul style="list-style-type:none; margin:0; padding:0;">');
    }
}
($i % 10 == 0) ? ob_clean() : echo('</ul>');
ob_end_flush();
après, il faut mettre les ul en float:left sauf le dernier

@+
dix2

Eléphant du PHP | 229 Messages

15 nov. 2012, 13:31

EDIT : doublon avec dix2 :)

Petit nouveau ! | 4 Messages

15 nov. 2012, 14:54

Merci, j'en profite pour une petite question :
echo('<ul style="list-style-type:none; margin:0; padding:0;">');
Le echo est-il nécessaire ? C'est pas par flemme de le mettre que je demande, mais juste pour comprendre s'il a une réelle utilité

Eléphant du PHP | 229 Messages

15 nov. 2012, 15:04

Bjr,

Pour produire du HTML je connais que ça.
Tu as une idée derrière la tête ?

Eléphant du PHP | 267 Messages

15 nov. 2012, 16:54

Merci, j'en profite pour une petite question :
echo('<ul style="list-style-type:none; margin:0; padding:0;">');
Le echo est-il nécessaire ? C'est pas par flemme de le mettre que je demande, mais juste pour comprendre s'il a une réelle utilité
le echo n'est pas nécessaire mais personnellement, je préfère faire un echo plutot que fermer le code php juste avant et le rouvrir juste apres
en fait ça dépend s'il y a bcp de lignes html à insérer
si il y a un bloc de 10 lignes html, dans ce cas, je préfère fermer le code php puis le rouvrir
mais s'il n' y a qu'1 ou 2 lignes de html, je préfère utiliser la fonction echo

Petit nouveau ! | 4 Messages

15 nov. 2012, 18:29

Ca marche, merci pour tout !