Afficher le resultat d'une requête dans plusieurs DIV

ViPHP
AB
ViPHP | 5818 Messages

18 déc. 2008, 12:34

Donc si j'ai bien compris tu voudrais la même chose qu'a fait Yaug mais présenté sur trois colonnes ?

Eléphant du PHP | 70 Messages

18 déc. 2008, 12:53

Exactement :D
Si tu as une idée je suis preneur

ViPHP
AB
ViPHP | 5818 Messages

18 déc. 2008, 20:40

Avec le post de Yaug et les liens que tu avais trouvé, tu avais presque tout sous la main, il te manquait juste le tuto de Ryle sur l'affichage multi colonne http://www.phpfrance.com/forums/voir_sujet-241626.php

Voilà donc comment je m'y prendrais :

Je reprendrais le code de Yaug mais au lieu d'essayer d'afficher le résultat directement, j'enregistrerais les résultats non formatés dans un tableau. Au final tu devrais donc avoir un tableau $tab comme dans mon exemple.

Ensuite j'utiliserais ma boucle http://www.phpfrance.com/forums/voir_re ... php#272576 pour reconstruire le tableau avec les éléments ordonnés de telle sorte qu'un listage simple avec la technique de Ryle (cf tuto mentionné au début) soit suffisante.

Ce qui donne au total :

<?php
header('Content-Type: text/html; charset=UTF-8'); 

$tab[] = 'A';
$tab[] = 'Alain';
$tab[] = 'Alexandre' ;
$tab[] = 'Arthur';
$tab[] = 'B';
$tab[] = 'Bernard';
$tab[] = 'Bill';
$tab[] = 'Boby' ;
$tab[] = 'C';
$tab[] = 'Catherine';
$tab[] = 'Carinne' ;
$tab[] = 'Caroline';
$tab[] = 'Charles';
$tab[] = 'D';
$tab[] = 'Damien';
$tab[] = 'Didier';
$tab[] = 'Dominique';

$nb_colonne = 3;

$nb_lignes = ceil(count($tab)/$nb_colonne);

for ($i = 0; $i < $nb_lignes ; $i++)
	{
		$incr = $i;
		
		for($j = 0 ; $j < $nb_colonne ; $j++)
		{	
			if (isset($tab[$incr])){$temp[] = $tab[$incr]; $incr += $nb_lignes;} else  $temp[] = null;
		}
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Affichage multi-colonnes</title>
</head>

<body>
<table>
<?php 
$cpt = 0;
foreach ($temp as $value)
{
    // début d'une ligne 
    if ($cpt%$nb_colonne==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ... 
        echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne 


    // On place chaque élément dans une cellule du tableau 
    echo '<td style="padding:0 10px 0 10px">';
    echo $value; // affichage de tout ce qu'on veut dans la cellule 
    echo '</td>'; 


    // fin d'une ligne
    if ($cpt%$nb_colonne==($nb_colonne-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ... 
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne

    $cpt++; // on incrémente le compteur pour savoir où on en est 
}
?>
</table>
</body> 
</html> 
ça peut paraître un peu compliqué mais l'avantage c'est qu'il te suffit de modifier la variable $nb_colonne (ici = 3) pour que l'affichage suive.

Donc il ne te reste plus qu'à utiliser le code de Yaug pour créer un tableau tel que dans mon exemple $tab.
Faut bien que je te laisse bosser un peu :wink:

Note : Ne me parle de tes div en float-left, c'est typiquement l'exemple où l'usage des tableaux est recommandé.
Modifié en dernier par AB le 02 nov. 2010, 17:50, modifié 1 fois.

Eléphant du PHP | 70 Messages

18 déc. 2008, 22:23

Alors comment dire, \:D/

merci, Merci, MERCI :D :D :D :D

C'est génial, ton code fais exactement ce que je souhaitais, je commençais à désespérer et grâce à toi j'ai réussi à faire ce que je voulais. Donc bravo, t'es trop fort =D>

J'avoue que j'ai pas tout compris à ton code c'est un peu compliqué je pense pour moi, mais j'ai réussi à générer les $tab [] grâce au code de Yaug.

Donc pour conclure un grand merci à tous ceux qui se sont penché sur mon cas et surtout à toi AB pour ton code sur mesure. :pouce:

ViPHP
AB
ViPHP | 5818 Messages

19 déc. 2008, 02:55

Merci, ça fait plaisir :)

Remarques qu'il ne s'agit pas de code "vraiment" sur mesure puisque j'ai utilisé des techniques déjà existantes. Le sur mesure ici, c'est de savoir comment manipuler et regrouper ces techniques pour faire in fine du sur mesure.

Sinon pour la boucle qui reformate le tableau, elle n'est pas très facile à comprendre à l'écran. Par contre si tu prends le temps de la recopier sur une feuille de papier avec un exemple de ton tableau et que tu regardes les intervals qu'elle génère, c'est beaucoup plus facile. En fait c'est beaucoup plus facile à comprendre qu'à expliquer c'est pourquoi je n'ai pas pris le temps de la documenter.

Tout ça pour dire que pour des choses qui paraissent (ou qui sont) difficiles, le meilleur conseil que je puisse te donner est de lâcher l'écran - je sais c'est pas facile - et de prendre une feuille de papier avec la technique ancestrale - mais irremplaçable - du stylo :wink: J'ai pas d'explication rationnelle pour expliquer ce phénomène mais je ne suis pas le seul à l'avoir observé :)