Affichage fichiers triés par date de modif dans tableau

Seboochoo
Invité n'ayant pas de compte PHPfrance

04 oct. 2010, 12:54

Bonjour à tous

Voici mon problème : Je créé un forum en php, sans base de données, qui manipule des fichiers texte. Sur ma page d'accueil, la liste des posts s'affiche comme dans tous forums :
Image

Pour un exemple simple, sur mon serveur j'ai 4 fichiers nommés "1.txt", "2.txt", "3.txt" et "4.txt" dans un dossier "sujets".
Voici le code qu'il y a dans chaque fichier txt :

Code : Tout sélectionner

<table id='tablesujet'> <tr> <td class='tdsujet'><a href='sujet.php'>&nbsp;test</a><br> <td class='tdnbrep'>Rep : 0</td> <td class='tdrep'>Aucune réponse</td> </tr> </table>
Avec ce code, mes 4 fichiers s'affichent dans l'ordre = "1.txt", "2.txt", "3.txt" et "4.txt" ( de bas en haut ) :

Code : Tout sélectionner

<html> <body> <table width="900" cellpadding="0" cellspacing="0"> <?php $page = 1; $dir2 = opendir("sujets/"); $tableau = array(); $i=0; while ($File = readdir($dir2)){ if($File != "." && $File != ".." && $File != "") { $tableau[] = "sujets/$File"; } $i++; } closedir($dir2); rsort($tableau); $nbsujet = 30; $Max = count($tableau); $pagemin = $page*$nbsujet-$nbsujet; $nbpage = $Max/$nbsujet; $nbpage = ceil($nbpage); if ($page == $nbpage) {$pagemax = $Max;} else {$pagemax = $page*$nbsujet;} if ($Max != 0){ for($i = $pagemin; $i != $pagemax; $i++){ include "$tableau[$i]"; } } ?> </table> </body> </html>
Or mon problème est le suivant : Si je modifie par exemple le fichier "3.txt", je voudrais qu'il remonte en tête de liste sans changer de nom.
J'ai essayé ceci, ça fonctionne :

Code : Tout sélectionner

$files = glob( 'sujets/*.txt' ); array_multisort( array_map( 'filemtime', $files ), SORT_NUMERIC, SORT_DESC, $files); print_r( $files );
...mais je n'arrive qu'à avoir ce style de phrase dans ma page d'accueil :
Array ( [0] => sujets/sujet3.txt [1] => sujets/sujet1.txt [2] => sujets/sujet2.txt [3] => sujets/sujet4.txt )

et non des tableaux comme la première version qui ne trie pas par date de modification

Je galère à intégrer le code pour trier les fichiers au script qui est en début de ce message, si quelqu'un pouvait m'éclairer ou me conseiller, ceci m'aiderait grandement dans l'avancement de ce forum.
Je continue à effectuer des recherches dans le code pour trouver cette fichue solution ! :evil:

Merci à vous ne serait-ce que d'avoir lu ce post.

Seboochoo
Invité n'ayant pas de compte PHPfrance

04 oct. 2010, 16:25

Up !!! :agenouille:

ViPHP
ViPHP | 5462 Messages

04 oct. 2010, 16:45

comme ca
$files = glob('sujets/*.txt');

function sorttime($a, $b)
{
    $timea = filemtime($a);
    $timeb = filemtime($b);
    
    if($timea == $timeb)
    {
        return 0;
    }
    
    return ($timea < $timeb) ? -1 : 1;
}

usort($files, 'sorttime');

$files = array_reverse($files);
print_r($files);

Seboochoo
Invité n'ayant pas de compte PHPfrance

04 oct. 2010, 17:09

Bonjour et merci Stealth35 pour ta réponse

Mais j'obtiens toujours une phrase comme celle-ci :

Code : Tout sélectionner

Array ( [0] => sujets/sujet12.txt [1] => sujets/sujet11.txt [2] => sujets/sujet10.txt [3] => sujets/sujet9.txt [4] => sujets/sujet8.txt [5] => sujets/sujet7.txt [6] => sujets/sujet6.txt [7] => sujets/sujet5.txt [8] => sujets/sujet4.txt [9] => sujets/sujet1.txt [10] => sujets/sujet3.txt [11] => sujets/sujet2.txt )
Je ne veux pas ce "mode" d'affichage
Je souhaite mettre le résultat sous forme de tableau comme sur la photo 8-|

Pour être simple, je veux rajouter un bout de code comme tu m'as fournis à celui-ci qui marche ( affichage tableau comme sur la photo ) mais qui ne trie pas :
    <?php
    $page = 1;
    $dir2 = opendir("sujets/");
    
    $tableau = array();
    $i=0;
    while ($File = readdir($dir2)){
      if($File != "." && $File != ".." && $File != "") {
        $tableau[] =  "sujets/$File";
      }
            $i++;
        }
    closedir($dir2);          
    rsort($tableau);
    $Max = count($tableau);
    $pagemin = $page*$nbsujet-$nbsujet;
    $nbpage = $Max/$nbsujet;
    $nbpage = ceil($nbpage);
    if ($page == $nbpage) {$pagemax = $Max;}
    else {$pagemax = $page*$nbsujet;}
    if ($Max != 0){   
      for($i = $pagemin; $i != $pagemax; $i++){
        include "$tableau[$i]";
      }
        }
        ?>
Perso je n'ai toujours pas trouvé mais je persiste... :evil: