webForumDet fria alternativet

Thumbnails som kommer i oordning

PHP

7 svar · 422 visningar · startad av ullan

Medlem sedan aug. 200442 inlägg
Frågan#1

Hej. håller på med ett bildgalleri och har fått ett php-script som skriver ut thumbnails. Thumbnailsen är klickbara och hämtas från olika bildmappar sorterade efter årtal. Allt är väl så långt förutom ett litet irriterande problem:Jag skulle bilja att bilderna visas sorterade årtalsvis, dvs att de nyaste bilderna kommer först och sen sorteras nedåt, dvs 2005, sedan 2004, 2003 osv. Nu hamnar de huller om buller. Nåon som vet hur det går at lösa? Tacksam för hjälp!
Så här ser det ut nu:http://www.vallnet.nu/mp00361-p1/galleri/index.php?ishome=1&filename=17.jpg&filenumber=1.

Bifogar koden här:

<html> 
<head> 

<script type="text/javascript"><!-- 
function openimg(img){ 
  foto1= new Image(); 
  foto1.src=(img); 
  Controlla(img); 
} 
function Controlla(img){ 
  if((foto1.width!=0)&&(foto1.height!=0)){ 
    viewFoto(img); 
  } 
  else{ 
    funzione="Controlla('"+img+"')"; 
    intervallo=setTimeout(funzione,20); 
  } 
} 
function viewFoto(img){ 
  largh=foto1.width+20; 
  altez=foto1.height+20; 
  stringa="width="+largh+",height="+altez; 
  finestra=window.open(img,"",stringa); 
} 
//--></script> 

</head> 
<body> 

<?php 

function printimages($path) { 
    $dh = opendir($path); 
    if (!$dh) return; 
    $breakcount = 0; 
    while($file = readdir($dh)) { 
        if ($file == "." && $file == "..") continue; 
        $thumb = "$path/$file"; 
    $image = 'stora_bilder/' . basename($path) . '/' . substr($file, 6); 
        if (is_file($thumb)) { 
            // En bild som ligger i en subkatalog. 
?> 
<a href="javascript:openimg('<?=$image?>')"><img height="71" width="71" border="0" src="<?=$thumb; ?>"></a> 
<?php         
            $breakcount++; 
            if ($breakcount > 8) { 
                echo "<br>"; 
                $breakcount = 0; 
            } 
        } 
    } 
    closedir($dh); 
} 

function printthumbs($dir) { 

    $dh = opendir($dir); 
    if (!$dh) return; 

    while($file = readdir($dh)) { 
        $path = "$dir/$file"; 
        if ($file != "." && $file != ".." && is_dir($path)) { 
            // En katalog i images (troligsvis den första året du har) 
            echo "<p>$file</p>"; 
            printimages($path); 
        } 

    } 
    closedir($dh); 

} 

printthumbs("./images"); 

?> 

</body> 
</html>
Medlem sedan aug. 20002 975 inlägg
#2

Det borde gå att göra så att du samlar årtalen/katalognamnen i en array, som du sorterar, och sedan loopar.
Något i stil med:

function printthumbs($dir) { 

    $dh = opendir($dir); 
    if (!$dh) return;

    $images = array();

    while($file = readdir($dh)) { 
        $path = "$dir/$file";
        if ($file != "." && $file != ".." && is_dir($path)) { 
            $images[$file] = $path;
        } 

    } 
    closedir($dh);

    krsort($images);

    foreach ($images as $year => $path) {
        echo "<p>$year</p>"; 
        printimages($path); 
    }

}
Medlem sedan aug. 200442 inlägg
#3

Hmmm...när jag byter ut koden du skickade syns ingenting...måste jag modifiera den på nåot sätt eller borde den fungera som den är?

<html> 
<body> 

<?php 

function printimages($path) { 
    $dh = opendir($path); 
    if (!$dh) return; 
    $breakcount = 0; 
    while($file = readdir($dh)) { 
        if ($file == "." && $file == "..") continue; 
        $thumb = "$path/$file"; 
    $image = 'stora_bilder/' . basename($path) . '/' . substr($file, 6); 
        if (is_file($thumb)) { 
            // En bild som ligger i en subkatalog. 
?> 

<a href="javascript:openimg('<?=$image?>')"><img height="71" width="71" border="0" src="<?=$thumb; ?>"></a> 

<?php         
            $breakcount++; 
            if ($breakcount > 8) { 
                echo "<br>"; 
                $breakcount = 0; 
            } 
        } 
    } 
    closedir($dh); 
} 

function printthumbs($dir) { 

    $dh = opendir($dir); 
    if (!$dh) return; 

    $images = array(); 

    while($file = readdir($dh)) { 
        $path = "$dir/$file"; 
        if ($file != "." && $file != ".." && is_dir($path)) { 
            $images[$file] = $path; 
        } 

    } 
    closedir($dh); 

    krsort($images); 

    foreach ($images as $year => $path) { 
        echo "<p>$year</p>"; 
        printimages($path); 
    } 

} 

    closedir($dh); 

} 

printthumbs("./images"); 

?> 

</body> 
</html>
Medlem sedan aug. 20002 975 inlägg
#4

Ändra till

function printthumbs($dir) {

    $dh = opendir($dir);
    if (!$dh) return;

    $images = array();

    while($file = readdir($dh)) {
        $path = "$dir/$file";
        if ($file != "." && $file != ".." && is_dir($path)) {
            $images[$file] = $path;
        }

    }
    closedir($dh);

    krsort($images);

    foreach ($images as $year => $path) {
        echo "<p>$year</p>";
        printimages($path);
    }

}
Medlem sedan aug. 200442 inlägg
#5

Hej och tack. Provade att byta ut koden men det syns tyvärr fortfarande inget...kan det vara jag som klistrat in koden fel eller något? Såhär ser det ut:

<?php 

function printimages($path) { 
    $dh = opendir($path); 
    if (!$dh) return; 
    $breakcount = 0; 
    while($file = readdir($dh)) { 
        if ($file == "." && $file == "..") continue; 
        $thumb = "$path/$file"; 
    $image = 'stora_bilder/' . basename($path) . '/' . substr($file, 6); 
        if (is_file($thumb)) { 
            // En bild som ligger i en subkatalog. 
?> 
<a href="javascript:openimg('<?=$image?>')"><img height="71" width="71" border="0" src="<?=$thumb; ?>"></a> 
<?php         
            $breakcount++; 
            if ($breakcount > 8) { 
                echo "<br>"; 
                $breakcount = 0; 
            } 
        } 
    } 
    closedir($dh); 
} 

function printthumbs($dir) { 

    $dh = opendir($dir); 
    if (!$dh) return; 

    $images = array(); 

    while($file = readdir($dh)) { 
        $path = "$dir/$file"; 
        if ($file != "." && $file != ".." && is_dir($path)) { 
            $images[$file] = $path; 
        } 

    } 
    closedir($dh); 

    krsort($images); 

    foreach ($images as $year => $path) { 
        echo "<p>$year</p>"; 
        printimages($path); 
    } 

} 
    closedir($dh); 

} 

printthumbs("./images"); 

?>
Medlem sedan okt. 20001 285 inlägg
#6

Personligen hade jag sparat filnamnen, datum, katalog etc i en mysql db och sorterat från det, hur simpelt som helst... i mitt eget script ligger alla stora bilder i samma mapp, allt styrs från db, virtuella kataloger etc

Medlem sedan aug. 20002 975 inlägg
#7
//    closedir($dh); <-- Tag bort 

//} <-- Tag bort

printthumbs("./images");

Koppla på dina felmeddelande på din testserver så du ser dina parse error.

Medlem sedan aug. 200442 inlägg
#8

Nu funkar det, tusen tack!!

287 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
150 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)