Retourner sur PHPFrance


 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   Accéder aux archivesArchives  S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
PHPFrance est maintenu par des bénévoles et soutenu par les sociétés Actoo et Anaska, Conseil et Formation pour PHP
Pour optimiser vos chances commencez par consulter la FAQ et faites une recherche.
Bon esprit, politesse et entraide sont les règles de ce forum.

[Tuto][PHP] Nombre de Colonnes dynamique (opérateur Modulo)

 
Poster un nouveau sujet   Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses.    PHPFrance Index du Forum -> FAQ et tutoriels
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Ryle
Piaf modérateur


Inscrit le: 07 Fév 2006
Messages: 6669
Localisation: Lat: 48°89. Long: 2°30.
Ce membre fait partie de l'équipe de modérationCe membre fait partie des ViPHP
MessagePosté le: 10 Juil 2008, 14:41    Sujet du message: [Tuto][PHP] Nombre de Colonnes dynamique (opérateur Modulo) Répondre en citant

Lorsque vous récupérez des données en base pour les afficher dans un tableau, la solution la plus simple est d'afficher une ligne par enregistrement. En effet, il suffit de boucler sur les différents enregistrements retournés et pour chaque, commencer une nouvelle ligne (<tr>) remplir les cellules (<td>) et terminer la ligne (</tr>) avant de passer à la suivante.

Mais il arrive parfois que vous ayez besoin de mettre 2 éléments par ligne, voire 3, voire plus, pour faire une Galerie de photos, de produits, ou autre... La boucle, nous l'avons, les cellules aussi, la question est donc de savoir quand placer les balises <tr> et </tr> pour que le nombre de colonne corresponde. C'est ce que nous allons voir grace à l'opérateur modulo : "%" Smile

Citation:
On désigne par modulo l'opération de calcul du reste de la division euclidienne. Si "a" est un entier quelconque et "n" un entier strictement positif, on écrira "a % n" pour représenter le reste de la division de "a" par "n".

En clair, si l'on divise 7 par 3, le résultat (partie entière) de la division est 2, et le reste est de 1 (3*2+1=7). C'est de cette valeur (le 1) dont nous allons avoir besoin pour déterminer où nous en sommes sur la ligne, et donc savoir s'il faut ouvrir ou fermer les <tr>.

Supposons un tableau à 3 colonnes (mais vous verrez que cela fonctionne quel que soit le nombre) :
Code:
Position élément | Reste de la division (Position divisé par 3)
  0    1    2    |  0    1    2
  3    4    5    |  0    1    2
  6    7    8    |  0    1    2

Vous noterez que le reste de la division associé au premier élément de la ligne est toujours 0, et que le dernier correspond toujours au Nombre de colonnes-1. Il ne reste donc plus qu'à mettre cela en pratique pour alimenter notre galerie :

PHP:
<?php 
$nbCols 
3// nombre de colonnes du tableau 
$cpt 0// compteur d'éléments 
?>

<table> 
  <tr>
    <th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 1</th> 
    <th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 2</th> 
    <th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 3</th> 
  </tr>
<?php

$rs 
mysql_query(...); // exécution de la requête 
// Nota : on pourrait tout aussi bien parcourir les éléments d'un tableau ou les fichiers d'un dossier

while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats 

    // début d'une ligne 
    
if ($cpt%$nbCols==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>';
    echo ... 
// affichage de tout ce qu'on veut dans la cellule 
    
echo '</td>'


    
// fin d'une ligne
    
if ($cpt%$nbCols==($nbCols-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


// Au cas où ...
if ($cpt!=&& $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
    
echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'">&nbsp;</td>'// ... on complète avec une cellule vide de la bonne taille...
    
echo '</tr>'// ... et on ferme la ligne
}

?>

</table>


Et voilà, l'opérateur modulo n'a plus de secret pour vous Smile
_________________
La théorie, c'est quand on sait tout faire, mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici nous avons réussi à réunir théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses.    PHPFrance Index du Forum -> FAQ et tutoriels Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Powered by phpBB © phpBB Group - PHPFrance est hébergé par Sivit