Fotos over meerdere pagina's

Status
Niet open voor verdere reacties.

eisdatop

Gebruiker
Lid geworden
14 jul 2004
Berichten
434
Hallo allemaal,
Ik heb nu dit scriptje:
PHP:
<?php
$subdir = $_GET['dir'];
$i=1;
$dir = "fotos/$subdir/thumbs"; // thumbnails
$bigdir = "fotos/$subdir/full"; // dezelfde namen als de thumbnails !!!
echo '<table>';
if ($handle = opendir($dir)) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $i++;

            if ($i%2=='1'){ echo '<tr><td>'; }else{ echo '<td>'; }
           echo "<a href=javascript:NewWindow('$bigdir/$file','popup','480','350','center','front');>
<img src=$dir/$file border=1></a>";

            if ($i%2=='1'){ echo '</td>'; }else{ echo '</td></tr>'; }
      }
   }
   echo '</table>';
   closedir($handle);
}
?>

Hier wordt er een map uitgelezen en de bestanden die hij vindt worden weergegeven. Het gaat hier om foto's. Alleen als ik een map heb met bv. 100 fotos dan laad de browser maar de helft van de fotos. De gebruiker heeft dus niet de mogelijkheid om dan alle fotos te bekijken!

Ik heb al even rondgekeken en volgens mij moet ik 1 van deze gebruiken: Directory functies.
Wat ik hiermee wil is de 100 fotos verdelen over verschillende pagina's maken met elk 20 fotos.
Kan iemand me op weg helpen?
Alvast bedankt:)
 
Een paar variabelen gebruiken om de paginaverdeling mee bij te houden (3 ofzo: $huidige_pagina, $aantal_paginas, $fotos_per_pagina), deze standaardwaarden geven (bijv: huidige pagina is de eerste pagina, foto's per pagina 20).

Als de gebruiker via de adresbalk vervolgens een andere waarde opgeeft en de waarde geldig is (is het een integer, valt de opgegeven pagina binnen $aantal_paginas, is het aantal foto's per pagina kleiner dan 1000 (serverload besparen), dan is het goed), de waarde in de variabele overschrijven.

Vervolgens het toepassen van die variabelen, een lusje starten waarmee je elk bestand ophaalt en met een tellertje (zoals je nu ook hebt: $i) bijhouden wanneer er gestart moet worden met het weergeven van bestanden en wanneer er opgehouden moet worden. Bij pagina 2 moeten bestand 20 t/m bestand 40 getoond worden, de rest niet.

Dit laatst, dat tellertje, heb je nu ook ongeveer, maar dan niet voor 20 per pagina, maar voor de helft van alle foto's. Om de foto is $i % 2 namelijk 1 (niet '1', 1 !) :)

Succes !
 
Hey bedankt! Ik ga er even mee stoeien:)
Maar:
Geplaatst door JPeetje
Dit laatst, dat tellertje, heb je nu ook ongeveer, maar dan niet voor 20 per pagina, maar voor de helft van alle foto's. Om de foto is $i % 2 namelijk 1 (niet '1', 1 !) :)

Hoe bedoel je dit? moeten die '' weg?
danku:)

edit//
$aantal_paginas, moet dat het aantal fotos gedeeld door $fotos_per_pagina zijn?
Hoe tel je het aantal fotos in een map?
 
Laatst bewerkt:
Geplaatst door eisdatop
Hoe bedoel je dit? moeten die '' weg?
danku:)
Jup, de uitkomst van $i % 2 is een integer, geen string. Dus ook geen '' :)

Query's hoor je zo ook op te stellen, sommige database-servers verplichten je zelfs op het type te letten (MS Access bijv.).
$aantal_paginas, moet dat het aantal fotos gedeeld door $fotos_per_pagina zijn?
Hoe tel je het aantal fotos in een map?
In code:
PHP:
$aantal_paginas = ceil( $aantal_fotos / $fotos_per_pagina );
:)
 
Oke, dat stukje code had ik al maar zonder ceil() dat rondt af naar boven toch?
maar hoe verkrijg je de $aantal_fotos ?
een count op de map loslaten lijkt mij, maar hoe zet je dat in code?
 
Ik ben bezig geweest, maar kom er gewoonweg niet uit! Heeft iemand nog een idee?
Bedankt:)
 
Geplaatst door eisdatop
Oke, dat stukje code had ik al maar zonder ceil() dat rondt af naar boven toch?
Jup.
maar hoe verkrijg je de $aantal_fotos ?
een count op de map loslaten lijkt mij, maar hoe zet je dat in code?
Dit gebruik ik zelf bij een projectje:
PHP:
// Have photos been placed in the photos/new/ folder ? (also checking if the form of the new stockphotos has been submitted)
$form_submitted = TRUE;
$handle = opendir( 'photos/new/' );

$tpl['nr_new_stockphotos'] = 0;
while( FALSE !== ( $bestand = readdir( $handle ) ) )
{
  if( $bestand != '.' AND $bestand != '..' AND in_array( strtolower( end( explode( '.', $bestand ) ) ), array( 'jpg', 'jpeg', 'gif', 'png' ) ) )
  {
    if( $tpl['nr_new_stockphotos'] < $cfg['nr_new_stockphotos'] )
    {
      $dimensions = @getimagesize( 'photos/new/' . $bestand );
      $tpl['new_stockphotos']['filename'][] = $bestand;
      $tpl['new_stockphotos']['ext'][] = strtolower( end( explode( '.', $bestand ) ) );
      $tpl['new_stockphotos']['width'][] = $dimensions[0];
      $tpl['new_stockphotos']['height'][] = $dimensions[1];

      if( isset( $_POST['descriptions_' . $tpl['nr_new_stockphotos']], $_POST['catid_' . $tpl['nr_new_stockphotos']], $tpl['cats'] ) == FALSE OR in_array( $_POST['catid_' . $tpl['nr_new_stockphotos']], $tpl['cats']['catid'] ) == FALSE )
      {
        $form_submitted = FALSE;
      }
    }

    $tpl['nr_new_stockphotos']++;
  }
}
Kun je wel het één en ander uit concluderen lijkt me ;)

Ow, en mocht je om performance denken: de system32 map van mijn Windows bedraagd 1864 bestanden, met een while-lusje kon ik alle bestanden tellen in 0,2 seconden (of 0,02 ? Weet niet meer precies :p).

Een échte server (mijn desktop pc is geen echte diehard server nee) zal dit ongetwijfeld sneller doen :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan