Foto album

Status
Niet open voor verdere reacties.

timmiejboi

Gebruiker
Lid geworden
17 feb 2008
Berichten
32
Hey,

Ik ben bezig met een simpele foto-album
maar vraag me af of het mogelijk is zeg maar de laatst toegevoegde foto vooraan te zien
en als eerst toegevoegde foto aan het einde?

PHP:
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

##########################################
//Even wat dingen instellen.
$dirname= "./fotoalbum/";// directory met plaatjes ten opzichte van de huidige directory
$naast_elkaar = 2;// aantal plaatjes naast elkaar
$onder_elkaar = 3;// aantal plaatjes onder elkaar
$breedte = 250;// width van de plaatjes
$hoogte = 250;// height van de plaatjes
$img_extensions = array('jpg', 'JPG', 'gif', 'png', 'PNG', 'JPEG', 'jpeg');// de toegestane plaatjesop
##########################################



function check_file($filename)
{
    global $img_extensions;
    $file_array = explode(".", $filename);
    return ((count($file_array) == 2) and (in_array($file_array[1], $img_extensions)));
}

function get_file_array($dir)
{
    $file_array = array();
    if($handle = opendir($dir))
    {
        while(false !== ($file = readdir($handle)))
        {
            if(check_file($file))
            {
                //Het is een plaatje, laat hem zien...
                $file_array[] = $file;
            }
        }
        closedir($handle);
    }
    return $file_array;
}

function showImages($image_array, $begin, $eind)
{
    global $dirname, $naast_elkaar, $breedte, $hoogte;
    $begin_check = $begin;    
    $return = '<tr>';
    while ($begin < $eind and isset($image_array[$begin]))
    {
        $return .= '<td><img src="' . $dirname . $image_array[$begin] . '" width="' . $breedte . '" height="' . $hoogte . '"/></td>';
        $begin++ ;
        $return .= ($begin%$naast_elkaar == 0) ? '</tr><tr>' : '';
    }
    return $return . '</tr>';
}

function genPages($number_of_files, $page_limit)
{
    $pages = ($number_of_files%$page_limit == 0) ? $number_of_files / $page_limit : $number_of_files / $page_limit + 1;
    $i = 1 ;
    $return = '<table><tr>';
    while ($i <= $pages)
    {
        $return .= '<td><a href="?page=' . $i . '">' . $i . '</a></td>';
        $i++;
    }
    return $return . '</tr></table>';
}


echo '<html><body><table>';
$page_limit = $naast_elkaar * $onder_elkaar;
$file_list = get_file_array($dirname);
$page = (isset($_GET["page"])) ? $_GET['page'] : 1;
$begin = ($page * $page_limit) - $page_limit;
$eind = $page * $page_limit;
echo showImages($file_list, $begin, $eind);
echo '</table>';
echo genPages(count($file_list), $page_limit) ;
echo '</body></html>';
?>
</p>
 
filemtime hiermee kun je kijken wanneer een bestand is weggeschreven.
is niet ideaal, maar zou kunnen werken
 
filemtime kijkt wanneer het bestand voor het laatst is aangepat. filectime kijkt naar de datum waarop het is gemaakt.

Maar: database. Bestanden zijn leuk maar veel te beperkt.


En dan nog een aantal aandachtpuntjes onder het motto; daar ga je later last mee krijgen:

" $file_array = explode(".", $filename);"

Bestanden mogen meerdere punten bevatten dus je kunt zomaar splitsen op een punt.
Er is ook geen reden om te exploden, want je hebt geen array nodig. Wat je feitelijk wilt is zien of de laatste vier tekens gelijk zijn aan ".jpg", dus substr().

Gebruik geen globals.

" while ($begin < $eind and isset($image_array[$begin]))"

$begin is het begin, die moet je dus niet aanpassen en niet gebruiken als index van de image array.
Je kunt dit veel eenvoudiger maken als je met array_slice() een nieuwe array maakt waarin alleen de te-tonen images uit $image_array staan, dan kun je daar gewoon doorheen het foreach en dan kan al dat gedoe met $begin, $eind en isset() weg.


"$begin = ($page * $page_limit) - $page_limit;"
Doorgaans begint $page op nul en is $eind gelijk aan ($page+1)*page_limit.

en $page_limit is $page_size, want het is geen limiet van het aantal pagina's maar het maximale aantal images per pagina.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan