Page 1 sur 1

Affichage fichiers triés par date de modif dans tableau

Posté : 04 oct. 2010, 12:54
par Seboochoo
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.

Re: Affichage fichiers triés par date de modif dans tableau

Posté : 04 oct. 2010, 16:25
par Seboochoo
Up !!! :agenouille:

Re: Affichage fichiers triés par date de modif dans tableau

Posté : 04 oct. 2010, 16:45
par stealth35
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);

Re: Affichage fichiers triés par date de modif dans tableau

Posté : 04 oct. 2010, 17:09
par Seboochoo
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: