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:


<?
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.
mag ik $directories eens zien?
Directories wordt eerst zo aangemaakt:
<? $directories     = array(); ?>


Vervolgens wordt hij op deze manier gevuld:

<?
            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?
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:


<?
            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');
                }                
?>
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.
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:


<?
                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:


<?
    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.
waarom doe je niet dit ?


<?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++;
                }  
?>
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.
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.
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:


<?
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=""/>';
}
?>
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.

Reageren