Mappen op datum sorteren
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
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&map='.$map.$directory.'">'.str_replace("-"," ", $directory).'</a><br />';
echo $laatstgewijzigd;
echo '<br />';
}
echo '<img src="images/lijn.gif" alt=""/>';
}
?>
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&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
mag ik $directories eens zien?
Vervolgens wordt hij op deze manier gevuld:
Code (php)
Wil je er naartoe dat ik de datum/tijd toe moet voegen aan de array?
Ik heb dat op deze manier gedaan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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');
}
?>
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');
}
?>
Echter bij de usort gaat het fout, als ik die doe dan gaat het weer mis.
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)
En sorteren doe ik zo:
Code (php)
1
2
3
4
5
6
7
8
9
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&map='.$map.$directory.'">'.str_replace("-"," ", $directory).'</a><br />';
}
?>
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&map='.$map.$directory.'">'.str_replace("-"," ", $directory).'</a><br />';
}
?>
Eigenlijk moet dus alleen het eerste deel uit $directory worden weergegeven en niet het 2e deel.
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.
mvg Joost.
http://www.dj-lars.com/test.php
Ik sorteer het geheel en laat het nu zo zien:
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: Ik sorteer het geheel en laat het nu zo zien:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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&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=""/>';
}
?>
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&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
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.