Inverser l'affichage d'une liste

Petit nouveau ! | 4 Messages

13 juil. 2009, 16:36

Bonjour,

J'utilise un script de petites annonces que j'ai un peu modifier pour ce qui est de l'apparence et de l'encodage.

A chaque ajout d'une petite annonce celle-ci se voit attribuer un numéro supérieur a la précédente et s'affiche tout en bas de la page. Les produits que ne se vendent pas rapidement reste donc en haut de pages...Je souhaiterais inverser l'ordre de la liste.

Dans un repertoire "inc" ils se trouvent les fichiers qui cree les annonces, redimensionne les images, etc. Le fichier qui attribue les numéros aux annonces est celui-ci:
<?php
 
 // get the next number and increments the holder
 function getnextlistingnumber(){
 	$numberfile = fopen("./listings/listingnumber.txt", 'r');
	$number = fread($numberfile, 1000);
	fclose($numberfile);
	$number++;
 	$numberfile = fopen("./listings/listingnumber.txt", 'w');
 	fwrite($numberfile, $number);
 	fclose($numberfile);
 	return $number;
 }
?>
Un fichier du même dossier se nomme makelistingstring.inc.php , mais il est entièrement vide. Quant au fichier listing.php qui crée la liste en voici le code en question (je peux me tromper):
$listings = array();

$count = 0;

foreach (glob("./listings/*") as $filename) {

if is_dir($filename)&&($filename!="./listings/.")&&($filename!="./listings/..")){

$lid = substr($filename, 11);

include "./inc/fill_fields.inc.php";

$listing["lid"]=$lid;

//get image, too.

$mainimage = file_get_contents("./listings/$lid/imagefile.txt");

$listing["image"]=$mainimage;


$listings["$count"] = $listing;

$count++;

}

}
Tout conseil est le bienvenue, par avance merci,

Eléphant du PHP | 65 Messages

14 juil. 2009, 12:02

Un petit array_reverse() avant affichage,
ça ne ferait pas ton bonheur ?
Fred

Petit nouveau ! | 4 Messages

15 juil. 2009, 09:44

Fred,

Merci pour ton conseil. Je viens de me pencher sur le problème. Dans le fichier listing.php j'ai trouvé le code suivant:
function &array_reverse_ref(&$a) {
    $r = array();
    for($i=0, $j=count($a); $i<count($a); $i++, $j--) {
        $r[$i] =& $a[$j-1];
    }
    return $r;
}
Cela correspond à l'une des contributions de la page http://www.php.net/manual/fr/function.array-reverse.php Si je retire cette portion de code l'affichage de la page ne change pas. Et si je remplace ce code par celui-ci par exemple:
<?php
function arrayReverse(&$arr)
{
    $c = count($arr);
    for($i=$c-1;$i>=0;$i--)
    {
        $arr[$c+$i] = $arr[$i];
    }
    $arr = array_slice($arr,$c,$c*2);
}
?> 
Je n'ai pas plus de changement.

Dans la partie de la page au dessus du lanagage html j'ai le code php suivant:
<?php
$listings = array();
$count = 0;
  	foreach (glob("./listings/*") as $filename) {
	    if (is_dir($filename)&&($filename!="./listings/.")&&($filename!="./listings/..")){
	    	$lid = substr($filename, 11);
	    	include "./inc/fill_fields.inc.php";
			$listing["lid"]=$lid;
			//get image, too.
			$mainimage = file_get_contents("./listings/$lid/imagefile.txt");
			$listing["image"]=$mainimage;
			
			$listings["$count"] = $listing;
			$count++;
	    }
	}
?>
J'ai essayé de modifer array=() par array_reverse mais j'obtiens des erreurs. Quel serais le bon code à votre avis?

Eléphant du PHP | 111 Messages

15 juil. 2009, 12:03

array_reverse() est native php, tu as mal du lire la doc.

Avant d'afficher tes petites annonces, tu fais :

Code : Tout sélectionner

array_reverse($listing);
Ca devrait normalement régler ton problème.

Eléphant du PHP | 65 Messages

15 juil. 2009, 15:28

J'opterais plutôt pour :
array_reverse($listings); 
listings avec un s.
C'est ce tableau qui contient la liste des annonces.
Fred