Avatar billede nicker Nybegynder
10. april 2007 - 02:59 Der er 11 kommentarer og
1 løsning

Galleri og sortering

Hej!

Har mit galleri i php som henter billeder fra en mappe alt efter hvilken mappe man peger på. Det virker fint, men mine billeder bliver bare vist helt tilfældigt. Billederne hedder i mappen 1,2,3,4 osv.. Hvordan sørger man for de bliver vist i den rækkefølge? Min kode er:

if ($handle = opendir($album1))
{
    echo "<table cellpadding='10px'>";

    $picNo = 0;
    while (false !== ($file = readdir($handle)))
    {
        if ($file != "." && $file != "..")
        {

            if ($picNo % 5 == 0)
            {
                if ($picNo != 0) echo "</tr>";
                echo "<tr>";
            }
?><td>
<a href="#" onClick="window.open('showone.php?a=<? print $_GET[album]; ?>&&v=<? print $file; ?>','<? print $picNO; ?>','location=no,menubar=no,statusbar=no,directories=no,width=660,height=650,left=400'); return false;">
<img width="100" style='border: 2px solid #000000' src="<? print $album."/".$file; ?>">
</a></td>
<?
            $picNo++;
        }
    }

    while ($picNo % 5 != 0)
    {
        echo "<td>&nbsp;</td>";
        $picNo++;
    }}

    echo "</tr>";

    echo "</table>";

?>
Avatar billede jakobdo Ekspert
10. april 2007 - 09:25 #1
Jeg tror denne kode kan hjælpe dig:

<?php
//http://www.eksperten.dk/spm/772441

$images = glob($album1 ."//{*.jpg,*.JPG}", GLOB_BRACE);
if(count($images)>0)
{
    sort($images);
   
    echo '<table cellpadding="10px"><tr>';
    for($i = 0; $i < count($images); $i++)
    {
        if($i % 5 == 0)
        {
            echo '</tr><tr>';
        }
        echo '<td>';
        echo '<a href="#" onClick="window.open(\'showone.php?a='.$_GET['album'].'&v='.$images[$i].'\',\''.$i.'\',\'location=no,menubar=no,statusbar=no,directories=no,width=660,height=650,left=400\'); return false;">';
        echo '<img width="100" style="border: 2px solid #000000" src="'.$album.'/'.$images[$i].'">';
        echo '</a></td>';
    }
    echo '</tr></table>';
}

?>
Avatar billede nicker Nybegynder
10. april 2007 - 11:50 #2
Jaa nu sorterer den, men den sorterer 1,10,100,101,102,103,104,105,106,107,108,109,110,11,110 osv.. Er der en måde man kan undgå dette, så den sorterer i en helt alm. tal-rækkefølge?
Avatar billede jakobdo Ekspert
10. april 2007 - 11:56 #3
Ret sort() til natsort()
Avatar billede nicker Nybegynder
10. april 2007 - 12:06 #4
Har prøvet, også natcase.. Den udskriver billederne på samme måde. Andre måder man kan sortere på?

- I den kode du gav mig så indeholde variablen images nu både album-navn og billede-tal, men kan man få den til kun at indeholde tallet?
Avatar billede jakobdo Ekspert
10. april 2007 - 12:40 #5
natsort() burde bestemt sortere korrekt.
Du kan bruge basename() til kun at få filnavnet.
Avatar billede nicker Nybegynder
10. april 2007 - 12:52 #6
Det virker ret mærkeligt, fordi det gør den altså ikke, har bare sat nat foran sort:
if(count($images)>0)
{
natsort($images);

echo '<table cellpadding="10px"><tr>';
for($i = 0; $i < count($images); $i++)
{
if($i % 5 == 0)


bruge basename hvor?
Avatar billede jakobdo Ekspert
10. april 2007 - 13:00 #7
Det er fordi jeg sover.
natcase() bibeholder keys, så derfor skal du løbe filerne igennem med: foreach($images AS $image)
Kender du den metode?

Ellers skal jeg nok rette koden til.
Avatar billede nicker Nybegynder
10. april 2007 - 13:06 #8
Nåå.. nej kender den ikke lige, så du må meget gerne rette koden til, vil være nice.
Avatar billede jakobdo Ekspert
10. april 2007 - 13:18 #9
<?php
//http://www.eksperten.dk/spm/772441

$images = glob($album1 ."//{*.jpg,*.JPG}", GLOB_BRACE);
if(count($images)>0)
{
    natsort($images);
   
    $picNum = 0;
 
    echo '<table cellpadding="10px"><tr>';
    foreach($images AS $image)
    {
        if($picNum % 5 == 0)
        {
            echo '</tr><tr>';
        }
        echo '<td>';
        echo '<a href="#" onClick="window.open(\'showone.php?a='.$_GET['album'].'&v='.basename($image).'\',\''.$picNum.'\',\'location=no,menubar=no,statusbar=no,directories=no,width=660,height=650,left=400\'); return false;">';
        echo '<img width="100" style="border: 2px solid #000000" src="'.$album.'/'.basename($image).'">';
        echo '</a></td>';
        $picNum++;
    }
    echo '</tr></table>';
}

?>
Avatar billede nicker Nybegynder
10. april 2007 - 13:25 #10
Yea det virker perfekt :) Endelig fungerer det. Mange tak!
Avatar billede jakobdo Ekspert
10. april 2007 - 13:32 #11
Svar!
Avatar billede jakobdo Ekspert
10. april 2007 - 13:36 #12
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester