Page 1 sur 1

Trier des liens par ordre alphabétique

Posté : 08 août 2013, 20:08
par Fana
Bonjour à tous,


J'ai une fonction qui me retourne des liens
<?php foreach (loop('items') as $item): ?>
<div class="item hentry">
    

<h2><?php echo link_to_item(metadata('item', array('Dublin Core', 'Title')), array('class'=>'permalink')); ?></h2>
Les liens sont sous la forme auteur, titre, dates. Exemple: Victor Hugo Les Misérables, 1862. ou encore Guy de Maupassant, Une vie, 1883.

Je veux que les liens affichés soient triés par ordre alphabétique.

C'est a dire

Guy de Maupassant, Une vie, 1883.
Victor Hugo Les Misérables, 1862.
etc...

Quel serait le code à rajouter pour réaliser cela?

Merci.

Re: Trié des liens par ordre alphabétique

Posté : 08 août 2013, 20:21
par moogli
salut,

la fonction sort est ton amie.

Globalement php.net est une bonne source d'info :)


@+

Re: Trié des liens par ordre alphabétique

Posté : 08 août 2013, 20:34
par Fana
Salut moogli,

En fait j'ai vu la fonction sort et j'ai essayé de la placer un peu partout mais sans résultat.

Je pense que j'ai pas très bien compris son utilisation.

Dois je mettre le sort entre le for each et echo link_to ou après echo link_to?

Les deux options ci dessous ne marchent pas.
<h2><?php echo $link =link_to_item(metadata('item', array('Dublin Core', 'Title')), array('class'=>'permalink'));
sort($link);
 ?></h2>
<h2><?php echo sort array (link_to_item(metadata('item', array('Dublin Core', 'Title')), array('class'=>'permalink')));
sort($link);
 ?></h2>

Re: Trier des liens par ordre alphabétique

Posté : 08 août 2013, 23:01
par moogli
commence par sortir ta fonction loop du foreach et tu pourras appliquer le sort sur le résultat.
<?php

$list = loop('item');
sort($list);
foreach($list as $item) {}

?>

@+

Re: Trier des liens par ordre alphabétique

Posté : 09 août 2013, 18:22
par Fana
Merci pour ces précisions moogli. Je n'avais pas pensé a modifié la boucle.

J'ai fais comme tu as dis
<?php $list = loop('item');
sort($list);
foreach($list as $item): ?>

<div class="item hentry">
    

<h2><?php echo link_to_item(metadata('item', array('Dublin Core', 'Title')), array('class'=>'permalink')); ?></h2>
Mais j'ai le message d'erreur suivant : Warning: sort() expects parameter 1 to be array, object given in /path/browse.php on line 30

Re: Trier des liens par ordre alphabétique

Posté : 09 août 2013, 22:24
par moogli
ah wé c'est un objet que retourne loop() va falloir revoir ton code la tu va pas pouvoir trier, soit tu trie avant soit tu récupère un tableau mais la c'est pas gagné :)


@+

Re: Trier des liens par ordre alphabétique

Posté : 11 août 2013, 04:17
par Fana
Je vois.

Si je veux trier avant j'ai besoin de revoir tout le code? Si c'est le cas, il faut trier avant le foreach. Mais je trie quoi exactement? Parce que moi ce que je veux trier c'est les liens obtenus.

Est ce qu'on peut par exemple affecter un chaque lien a une variable avant le echo et par la suite faire le 'sort' sur cette variable la?

Merci moogli...

Re: Trier des liens par ordre alphabétique

Posté : 11 août 2013, 06:01
par moogli
Le plus simple étant de trier dans la fonction ;)

Sinon oui tu peux imaginer plein de truc.


@+

Re: Trier des liens par ordre alphabétique

Posté : 11 août 2013, 16:18
par Fana
Tu veux dire la fonction link_to_item?

Re: Trier des liens par ordre alphabétique

Posté : 11 août 2013, 20:27
par sirakawa
On peut très bien créer une fonction qui trie des données au fur à mesure qu'elle les lit:
Création d'un tableau vide:
$z= array();
Si le nouvel élément est avant le premier ou après le dernier il est ajouté au début (array_unshift()) ou à la fin (array_push), sinon il faut chercher où l'insérer déplacer insérer...

Il y a un moyen en utilisant un tableau dont les clefs sont des chaînes inspirées la CDU: 0.1, 0.11
<
?PHP
$z = array ();
$z['0.1'] = "Chateau";
$z['0.11'] = "Chateaub";
$z['0.01'] = "Aristote";
ksort($z);
print_r($z);
?>
insérer entre 0.1 et 0.11 c'est insérer 0.10, 0.101...