Avatar billede wale Nybegynder
14. marts 2006 - 16:52 Der er 18 kommentarer og
1 løsning

Pageing ved visning af mappes indhold

Hej

Jeg er ved at lave et galleri. Jeg har foreløbigt lavet et script der kan åbne og vise alle filer i en mappe. Jeg vil gerne have et limit på hvor mange filer der vises. Jeg ved hvordan det kunne laves via noget mysql, men det er ikke det jeg skal bruge da jeg synes det gør det hele lidt mere besværligt ved upload.
Mit spørgsmål er derfor om det er muligt at lave pageing ved listning af indhold i en mappe. Dvs. så den tager de første 10 billeder og viser dem, og så kan der gås til næste side og der vises de næste 10.

min kode er foreløbig:

echo "<center><table border='0'>";
echo "<tr>";
$tal=0;
if ($handle = opendir("galeri/thumbs/")) {
  while (false !== ($file = readdir($handle))) {
   
    $filtype = explode(".", $file);
    if ($filtype[1] == "jpg" || $filtype[1] == "gif" || $filtype[1] == "png" || $filtype[1] == "JPG") {
    if ($file != "." && $file != "..") {
      if($tal==4){
        echo "<tr>";
        $tal=0;
      }
    echo "<td class='tdHeaderText' align='center'>";
      echo "<a href=\"galeri/images/$file\" target='_blank'><img src=\"galeri/thumbs/$file\"  border='0'></a>\n";
      echo "".$file."";
    echo "</td>";
    if($tal==4){
        echo "</tr>";
        $tal=0;
      }

  }
    $tal++;
    }
}
  closedir($handle);
}

echo "</tr>";
echo "</table></center>";
Avatar billede jakobdo Ekspert
14. marts 2006 - 17:38 #1
Du skal i hvert fald starte med at indlæse samtlige filer i et array, herefter skal du sortere dem, evt efter oprettelses dato (filemtime()).
Herefter skal du have et offset, hvor det sættes til 0, hvis intet er angivet.
Dette offset bruger du så til at trække fil: $offset til og med $offset + 10.
Avatar billede wale Nybegynder
14. marts 2006 - 18:20 #2
Okay det prøver jeg at leje lidt med i aften
Avatar billede jakobdo Ekspert
14. marts 2006 - 18:30 #3
Ellers må du spørge!
Avatar billede wale Nybegynder
15. marts 2006 - 17:53 #4
Har et spørgsmål angående, sorteringen i arrayet. Jeg har foreløbig kun gemt filnavnet i et array og så vist billedet. Hvordan gemmes (filemtime()) sammen med navnet i et array og derefter sorteres efter dato?
Jeg gemmer sådan her:

if ($handle = opendir("galeri/thumbs/")) {
  while (false !== ($file = readdir($handle))) {
   
    $filtype = explode(".", $file);
    if ($filtype[1] == "jpg" || $filtype[1] == "gif" || $filtype[1] == "png" || $filtype[1] == "JPG") {
    if ($file != "." && $file != "..") {

      $billeder[$arraytal]=$file;
  }
    $tal++;
    $arraytal++;
    }
}
  closedir($handle);
}
Avatar billede jakobdo Ekspert
15. marts 2006 - 18:19 #5
Problemet med at sortere efter dato kan blive at 2 filer godt kan have samme tid.
Du burde evt kigge på glob() den kan gøre det du laver der i en linie.

$billeder = glob("/galleri/thumbs/{*.gif,*.jpg,*.png,*.GIF,*.JPG,*.PNG}", GLOB_BRACE);
Avatar billede wale Nybegynder
15. marts 2006 - 18:22 #6
okay, men sandsynligheden for at to filer har samme tid er i mit tilfælde stortset lig 0. Er helt væk i det med sorteringen. Kan du evt. give et hint
Avatar billede jakobdo Ekspert
15. marts 2006 - 18:51 #7
$billeder = array();
foreach(glob("/galleri/thumbs/{*.gif,*.jpg,*.png,*.GIF,*.JPG,*.PNG}", GLOB_BRACE) as $file)
{
$billeder[filemtime($file)] = $file;
}
Avatar billede wale Nybegynder
15. marts 2006 - 18:59 #8
dvs. de nu ligger som $billeder[2006-xx-xx], vil dette ikke gøre det svært at hente dem ud igen.
havde tænkt på et to dimensionelt array. er det muligt ?
Avatar billede jakobdo Ekspert
15. marts 2006 - 19:01 #9
Det burde nu ikke være det store problem.
Og jeg mener da også filemtime() giver unixtimestamp og ikke 2006-xx-xx
Avatar billede wale Nybegynder
15. marts 2006 - 19:07 #10
Skal jeg så lave en
foreach løkke ?

ps. jeg kigger på det i morgen igen.
Avatar billede jakobdo Ekspert
15. marts 2006 - 19:10 #11
Prøv koden:
foreach(glob("/galleri/thumbs/{*.gif,*.jpg,*.png,*.GIF,*.JPG,*.PNG}", GLOB_BRACE) as $file)
{
$billeder[filemtime($file)] = $file;
}

og skriv så array'et ud.

echo "<pre>";
print_r($billeder);
echo "</pre>";
Avatar billede wale Nybegynder
15. marts 2006 - 23:01 #12
Det kan jeg ikke få til at virke.
Jeg skal også have printet det ud i en tabel, for at vise flere billeder ved siden af hinanden. (thumbnails). Det er noget med en for løkke, jeg har fået det til at virke med bare at kører over $billeder[$arraytal], hvor arraytal bare en int.
Avatar billede jakobdo Ekspert
16. marts 2006 - 08:03 #13
Virker denne kode ikke:

<?php
$ditDir = "/galleri/thumbs/";
foreach(glob($ditDir . "{*.gif,*.jpg,*.png,*.GIF,*.JPG,*.PNG}", GLOB_BRACE) as $file)
{
$billeder[filemtime($file)] = $file;
}

echo "<pre>";
print_r($billeder);
echo "</pre>";
?>
Avatar billede wale Nybegynder
16. marts 2006 - 12:37 #14
Jo det printer arrayet ud. Men nu opstår det problem du beskrev med tiden.
Avatar billede jakobdo Ekspert
16. marts 2006 - 14:48 #15
:)
Enten skal du så fodre hver fil med et lille stykke unikt...
F.eks. unikt = filemtime() . uniqid()
Men så kunne du lige så godt gemme filnavnet som key!
Avatar billede wale Nybegynder
16. marts 2006 - 17:35 #16
Har fundet en løsning nu
læg et svar
Avatar billede wale Nybegynder
16. marts 2006 - 17:36 #17
Tak for hjælpen :-)
Avatar billede jakobdo Ekspert
16. marts 2006 - 21:38 #18
Svar og godt jeg kunne hjælpe.
Avatar billede jakobdo Ekspert
17. marts 2006 - 09:08 #19
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