Récupération de données d'un array, affichage sur 4 colonnes

web4
Invité n'ayant pas de compte PHPfrance

14 oct. 2013, 12:07

bonjour,

sur un site Wordpress j'ai des catégories qui portent le nom de personnes et j'affiche dans un glossaire les lettres A, B, C …

en-dessous, par défaut, s'affiche dans une liste les noms des personnes dont la 1ère lettre du nom commence par A ($currentLetter = 'A';).

je cherche à modifier le rendu d'affichage par défaut en n'affichant plus la liste des noms commençant par A uniquement dans une seule colonne mais je veux afficher dans dans une liste de 4 colonnes les noms commençant par A, B, C et D puis dans la seconde ligne les 4 noms suivants (E, F, G, H) etc...

j'arrive bien à afficher dans une seule colonne la totalité des noms mais je n'arrive pas à afficher les résultats pour chaque lettre dans 4 colonnes soit 1 colonne pour chaque lettre.

je ne vois pas comment faire un affichage séparé pour chaque lettre ni comment les récupérer sachant que le tri est déjà fait dans le tableau du glossaire.

un expert php aurait-il un début de piste ?

merci :)

le code avant le header
<?php
/*
 * Template Name: Alphabet
 */

/**
 * Recuperation de la liste complete des noms
 */

  // $glossaire : tableau dont chaque clé est une lettre de l'alphabet
  // Chaque entrée contiendra la liste des noms
  $glossaire = array();
  foreach (range('A', 'Z') as $lettre) {
    $glossaire[$lettre] = array();
  }

// Récuperation des catégories dans la BDD
$categories=get_categories(array(
	'type'                     => 'post',
	'parent'                   => 7589,
	'orderby'                  => 'name',
	'order'                    => 'ASC',
	'hide_empty'               => 1,
	'taxonomy'                 => 'category',
	'pad_counts'               => false ));

// Stockage des infos sur chaque catégorie dans le glossaire
foreach ($categories as $category) {
  $lettre = strtoupper($category->name[0]);
  $glossaire[$lettre][] = array("slug" => $category->slug, "name" => $category->name);
}

// Par defaut, on affiche la lettre A
$currentLetter = 'A';

?>
/* ################################
corps de la page html
################################
*/

/* Affichage du glossaire avec chaque lettre de l'alphabet */
<?php foreach (range('A', 'Z') as $lettre) { ?>
    <a href="#inter-tab-<?php echo $lettre;?>" class="<?php if ($lettre == $currentLetter) { echo 'active'; } ?>"><?php echo $lettre;?></a> 
    <?php } ?>
/* Affichage de la liste des noms commençant par la lettre A ; les autres sont préchargés mais non affichés */
<?php foreach($data as $intervenant) { ?>
      <li><a class="tooltip-bottom" title="<?php echo $intervenant['name']; ?>" href="<?php echo $pageLink; ?>inter=<?php echo $intervenant['slug'] ?>"><?php echo $intervenant['name']; ?></a></li>
      <?php } ?>

Eléphant du PHP | 116 Messages

14 oct. 2013, 13:12

Salut,

Est ce que tu as essayé quelque chose du genre ?
$comptecolonne=1;
boucle d'affichage {
si $comptecolonne=4 > nouvelle ligne
sinon > nouvelle colonne
}
@+,
Computarelier

ViPHP
xTG
ViPHP | 7331 Messages

14 oct. 2013, 13:15

Ce n'est pas un problème PHP mais plutôt CSS je dirais.
Ce n'est pas PHP qui formate l'affichage.

Tout ce que PHP peut faire c'est de ne fournir les données de la lettre #LETTRE# dans un conteneur différent des autres lettres :
$lettreVisite = NULL;
foreach (range('A', 'Z') as $lettre) {
  if( $lettreVisite != NULL && $lettre != $lettreVisite ) // on change de lettre
  {
    echo '</element_html>';
  }
  if( $lettre != $lettreVisite )
  {
    $lettreVisite = $lettre;
    echo '<element_html>';
  }

  // code....
}
echo '</element_html>';
Après tableau ou div, à toi de voir. ;)

web4
Invité n'ayant pas de compte PHPfrance

14 oct. 2013, 13:31

merci :) j'essaye la version html c'est vrai que tout est chargé mais avec un display:none; sauf sur la 1ère lettre,

j'aimerais bien soit une liste sur 4 colonnes soit le div { columns: 3 100px }

je vous tiens informé :)

[Résolu]
Invité n'ayant pas de compte PHPfrance

15 oct. 2013, 14:12

[Résolu]