Mappen op datum sorteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

DJ Lars

DJ Lars

23/11/2008 18:48:00
Quote Anchor link
Ik gebruik op mijn website het fotoalbum van Arjan Kapteijn (v2), een prima fotoalbum waar voor mij 1 functie aan ontbreekt, en dat is dat de albums niet op datum worden gesorteerd.

Vandaag ben ik de hele dag bezig geweest om dit voor elkaar te krijgen.
De laatst gewijzigde datum van de map heb ik inmiddels weten te achterhalen.

Het lukt me echter niet om aan de hand van deze datum de volledige lijst op datum te sorteren.

Het gaat om dit stukje code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if(!empty($directories))
{

    foreach($directories as $directory)
    {

        $laatstgewijzigd = date ("d F Y H:i:s", filemtime($map.$directory));
        echo '<img src="images/folder.gif" class="albumicoon" alt="" /><a href="?pagina=smoelenboek&amp;map='.$map.$directory.'">'.str_replace("-"," ", $directory).'</a><br />';
        echo $laatstgewijzigd;
        echo '<br />';
    }

    echo '<img src="images/lijn.gif" alt=""/>';
}

?>

Hopelijk kan iemand me helpen!

Bedankt alvast.
Gewijzigd op 01/01/1970 01:00:00 door DJ Lars
 
PHP hulp

PHP hulp

21/11/2024 23:44:25
 
Bas Visscher

Bas Visscher

23/11/2008 19:14:00
Quote Anchor link
mag ik $directories eens zien?
 
DJ Lars

DJ Lars

23/11/2008 19:18:00
Quote Anchor link
Directories wordt eerst zo aangemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? $directories     = array(); ?>


Vervolgens wordt hij op deze manier gevuld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
            if(is_dir($map.$file))
            {

                //... kijken we eerst of het niet onze thumbs of thumbsgroot map is.
                if($file != 'thumbs' && $file != 'thumbsgroot' && $file != 'Geheim')
                {

                    //Toevoegen aan de directories array!
                    $directories[] = $file;
                }
                
?>


Wil je er naartoe dat ik de datum/tijd toe moet voegen aan de array?
 
DJ Lars

DJ Lars

23/11/2008 20:22:00
Quote Anchor link
Na wat gegoogled te hebben heb ik het geprobeerd om op de array op basis van datum/tijd te sorteren maar dat lukt ook niet.

Ik heb dat op deze manier gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
            if(is_dir($map.$file))
            {

                //... kijken we eerst of het niet onze thumbs of thumbsgroot map is.
                if($file != 'thumbs' && $file != 'thumbsgroot' && $file != 'Geheim')
                {

                    //Toevoegen aan de directories array!
                    $datumtijd = date ("d F Y H:i:s", filemtime($map.$file));
                    
                    $directories [] = array ($file, $datumtijd);
                    
                    function
DateCmp($a, $b)
                      {

                      return ($a[1] < $b[1]) ? -1 : 0;
                      }

                    usort ($directories, 'DateCmp');
                }
                
?>
 
DJ Lars

DJ Lars

23/11/2008 20:35:00
Quote Anchor link
Eerste fout heb ik er zelf uit gehaald, ik heb de functie braaf tussen de andere functies geplaatst, dan laad de pagina in ieder geval wel.

Echter bij de usort gaat het fout, als ik die doe dan gaat het weer mis.
 
DJ Lars

DJ Lars

24/11/2008 13:35:00
Quote Anchor link
Vandaag weer verder gaan proberen, hij sorteert nu op datum!
Echter loop ik nog tegen 1 probleem aan, hij laat nu ook de datums als album namen zien. Dit moet natuurlijk niet.

Ik vul de array nu op deze manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
                if($file != 'thumbs' && $file != 'thumbsgroot' && $file != 'Geheim')
                {

                    //Toevoegen aan de directories array!  
                    $directories [] = $file;
                    $directories [] = date ("d F Y H:i:s", filemtime($map.$file));
                }
  
?>


En sorteren doe ik zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
    foreach($directories as $directory)
      {

        $sorteren[] = $directory;
        if (is_array($sorteren))
        array_multisort($sorteren, SORT_DESC, $directories);
        echo '<img src="images/folder.gif" class="albumicoon" alt="" /><a href="?pagina=smoelenboek&amp;map='.$map.$directory.'">'.str_replace("-"," ", $directory).'</a><br />';
      }
  
?>


Eigenlijk moet dus alleen het eerste deel uit $directory worden weergegeven en niet het 2e deel.
 
Michael Voeten

Michael Voeten

24/11/2008 13:40:00
Quote Anchor link
waarom doe je niet dit ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php


// ergens bovenaan doe je $i=0;


if($file != 'thumbs' && $file != 'thumbsgroot' && $file != 'Geheim')
                {

                    //Toevoegen aan de directories array!  
                    $directories[$i]['file'] = $file;
                    $directories[$i]['date'] = date ("d F Y H:i:s", filemtime($map.$file));
$i++;
                }
  
?>
 
DJ Lars

DJ Lars

24/11/2008 14:29:00
Quote Anchor link
Thanks, dat lost het probleem inderdaad op.

Echter loop ik nog tegen 1 probleem aan, het sorteren gebeurd nu ascending terwijl ik in het script aangeef dat dit descending moet gebeuren. Ik heb geprobeerd om het op ascending te zetten om te kijken of dit het omgekeerde effect geeft maar de oudste mappen blijven dan bovenaan staan. Omdat ik de indeling van de datum en tijd iets heb aangepast heb ik geprobeerd deze naar standaard te zetten omdat ik dacht dat PHP hier misschien door in de war raakte. Echter lossen beide acties het probleem niet op, de oudste mappen blijven bovenaan staan.
 
/home/joost

/home/joost

24/11/2008 15:48:00
Quote Anchor link
Uhm... geef de mappen de naam van de datum, en dan daarin de map met de naam van de foto's bijv: naam evenement o.i.d. en dan daarin de foto's dan order je bij datum daarna kijk je in die mappen en die naam echo je, dan link je de mensen daarheen en echo je de foto's.........

mvg Joost.
 
DJ Lars

DJ Lars

24/11/2008 16:08:00
Quote Anchor link
Ik zie nu overigens dat er niet goed wordt gesorteerd, ik riep dat het wel zo was omdat inderdaad wel de meest oude map bovenaan staat en de meest nieuwe map onderaan. Als ik wat verder door de lijst scroll zie ik dat het geheel toch nog aardig door elkaar staat, zie: http://www.dj-lars.com/test.php

Ik sorteer het geheel en laat het nu zo zien:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
if(!empty($directories))
{

    $achtergrond=0;
    echo '<table>';
 
    foreach($directories as $directory)
      {

        $achtergrond ^= 1;
        $sorteren[] = $directory;
        if (is_array($sorteren))
        array_multisort($sorteren, SORT_DESC, $directories);
        echo '<tr>';
        echo '<td class="achtergrond'.$achtergrond.'"><img src="images/folder.gif" class="albumicoon" alt="" /><a href="?pagina=smoelenboek&amp;map='.$map.$directory['file'].'">'.str_replace("-"," ", $directory['file']).'</a><br />';
        echo '<b>Laatst gewijzigd:</b>';
        echo $directory['date'];  
        echo '</td>';
        echo '</tr>';
      }
  
    echo '</table>';
    echo '<img src="images/lijn.gif" alt=""/>';
}

?>
Gewijzigd op 01/01/1970 01:00:00 door DJ Lars
 
DJ Lars

DJ Lars

24/11/2008 19:38:00
Quote Anchor link
Weer een hoop uren verder, maar het werkt!

Ik heb de array_multisort er uitgehaald en vervangen door een arsort.
Daarnaast heb ik de tijd/datum notatie op standaard gezet en hij sorteert nu netjes op datum. Het heeft me dan in totaal bijna 8 uur werk gekost, maar het werkt!

Bedankt voor de reacties.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.