Dans ce mini article, je vais vous montrer la manière utilisée pour réaliser une liste A-Z avec des hyperliens sur certaines lettres. Je réalise une requête sql me récupérant uniquement la première lettre de chaque titre et de manière unique puis je construis un tableau me permettant de contrôler l’existence de celle-ci dans ma boucle.

Index à produire:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Fonction réalisée dans mon modèle:

$results = Doctrine_Query::create()
->select('r.id, SUBSTRING(t.name,1,1) letter')
->from('Resource r')
->where()
->orderBy('t.name')
->groupBy('t.name')
->execute();

$letters = array();
foreach($results AS $result)
{
  $letters[] = $result->letter;
}
return $letters;

Je reçois en retour un tableau avec les lettres disponibles.

Génération de la liste dans mon Template:

<?php for($i = 65; $i < 91; $i++): ?> <?php $letter = strtoupper(chr($i)); ?> <?php echo (in_array($letter, $results)) ? link_to($letter, '/resources/index') : $letter; if($i < 91) { echo " "; } ?> <?php endfor; ?>

J’espère que cet exemple vous sera utile dans un de vos développements.

Share