Avatar billede minus Nybegynder
21. oktober 2008 - 14:18 Der er 17 kommentarer og
1 løsning

Opdele galleri i sider

Hey,

Jeg har ud fra hjælp herinde tidligere formået at lave et galleri script. Sådan som den ser ud nu, viser den alle billeder fra en mappe.

Men jeg kunne godt tænke mig at billederne bliver delt op i sider.

Koden som den ser ud:
-----

<?php
$imgdir = 'galleri/';
$allowed_types = array('png','jpg','jpeg','gif');
$dimg = opendir($imgdir);
while($imgfile = readdir($dimg)){
    if(in_array(strtolower(substr($imgfile,-3)),$allowed_types)){
        $a_img[] = $imgfile;
        sort($a_img);
        reset($a_img);
    }
}
$totimg = count($a_img);
for($x=0; $x < $totimg; $x++){
    $size = getimagesize($imgdir.'/'.$a_img[$x]);
    $halfwidth = ceil($size[0]/2);
    $halfheight = ceil($size[1]/2);
    if(($x % 4)==0)echo '<br />';
    echo '<div class="billede"><a href="galleri/'.$a_img[$x].'" rel="lightbox"><img src="galleri/thumbs/thumb_'.$a_img[$x].'" alt="" /></a></div>';
}
?>

-----

Findes der en metode, som deler billederne op efter den har vist x antal billeder? Lad os sige 8 som et eksempel. :)

Det skal helst kunne lade sig gøre uden brug af database. Jeg forestiller mig noget i stil med at billederne bliver lagt i et array af en art, hvor den så viser dem pr. side indenfor 8-tabellen. (hvis jeg er til at forstå).

Hvis nogen kan lave det, gerne med en forklaring på hvordan og hvorfor, ville det være dejligt. Eller alternativt beskrive for mig, hvordan det kan laves, ville det også være fint.

Takker på forhånd :)
Avatar billede w13 Novice
21. oktober 2008 - 15:33 #1
Det må blive noget i denne stil:

<?php
$imgdir = 'galleri/';
$allowed_types = array('png','jpg','jpeg','gif');
$dimg = opendir($imgdir);
while($imgfile = readdir($dimg)){
    if(in_array(strtolower(substr($imgfile,-3)),$allowed_types)){
        $a_img[] = $imgfile;
        sort($a_img);
        reset($a_img);
    }
}
$totimg = count($a_img);

$antal = 8;

$start = $_GET['start'];
if (is_empty($start) or $start >= $totimg)
    $start = 0;

for($x = $start; $x < $totimg && $x < $start + $antal ; $x++){
        $size = getimagesize($imgdir.'/'.$a_img[$x]);
        $halfwidth = ceil($size[0]/2);
        $halfheight = ceil($size[1]/2);
        if(($x % 4)==0)echo '<br />';
        echo '<div class="billede"><a href="galleri/'.$a_img[$x].'" rel="lightbox"><img src="galleri/thumbs/thumb_'.$a_img[$x].'" alt="" /></a></div>';
}

if ($start > 0) {
    echo '<a title="Forrige" href="gallery.php?start=' . $start - 1 . '">&lt;</a>';
}

if ($start < $totimg - $antal) {
    echo '<a title="Næste" href="gallery.php?start=' . $start + 1 . '">&gt;</a>';
}
?>

Dog utestet.

Jeg bl.a. har tilføjet:

$antal = 8;

$start = $_GET['start'];
if (is_empty($start) or $start >= $totimg)
    $start = 0;

Her sættes antal til 8 pr. side.
Derefter henter jeg querystringen start ned. Hvis den ikke er sat eller hvis den er for høj, sættes den til 0.

Så kan jeg bruge for-løkken:

for($x = $start; $x < $totimg && $x < $start + $antal ; $x++){
Avatar billede w13 Novice
21. oktober 2008 - 15:41 #2
Sig til, hvis jeg skal uddybe noget. =)
Avatar billede minus Nybegynder
21. oktober 2008 - 16:08 #3
Javel, det kan jeg se :) Lyder også ret logisk, som jeg forstår det.

Men det virker desværre ikke. Får følgende fejl:

Fatal error: Call to undefined function is_empty() in C:\xampp\htdocs\rtard\index.php on line 31.

Den henviser til denne linje:
if (is_empty($start) or $start >= $totimg)
Avatar billede w13 Novice
21. oktober 2008 - 16:27 #4
Prøv at rette is_empty til isset
Avatar billede w13 Novice
21. oktober 2008 - 16:27 #5
Hov, til !isset altså med ! foran.
Avatar billede minus Nybegynder
21. oktober 2008 - 16:38 #6
Vi nærmer os, kan jeg se :)

Lige nu viser den 8 billeder, men under dem står der " 1">> "
Det er i en galleri hvor der er 13 billeder.

Jeg går ud fra at linjerne skal rettes til min side:

---
if ($start > 0) {
    echo '<a title="Forrige" href="gallery.php?start=' . $start - 1 . '">&lt;</a>';
}

if ($start < $totimg - $antal) {
    echo '<a title="Næste" href="gallery.php?start=' . $start + 1 . '">&gt;</a>';
}
----
Altså "gallery.php" skal ændres.

Men står fast med " " 1">> " " uden links.
Avatar billede w13 Novice
21. oktober 2008 - 16:44 #7
Prøv lige at paste kildekoden omkring det der " " 1">> " " for det lyder meget mærkeligt.
Avatar billede minus Nybegynder
21. oktober 2008 - 16:52 #8
Det ser sådan set kun sådan ud:

1">&gt;</a>

Det, som kommer før er billederne i galleriet, som virker fint. Og stykket efter er div'en til galleriet som bliver lukket.
Avatar billede minus Nybegynder
21. oktober 2008 - 16:52 #9
Rodede lidt med koden og kom frem til at det ovenstående kommer fra denne linje:
<a title="Næste" href="art.php?start=' . $start + 1 . '">
Avatar billede w13 Novice
21. oktober 2008 - 16:56 #10
Det forstår jeg slet ikke. Prøv lige at smide en parentes omkring $start - 1 og $start + 1
Avatar billede minus Nybegynder
21. oktober 2008 - 17:10 #11
Ahh, det virkede. :)

Der var en fejl, hvor den istedet for at skifte side og vise 8 ny billeder, valgte den bare at tilføje et nyt billede på listen og fjerne et fra starten.

Erstattede ($start - 1) og ($start + 1) med ($start - 8) og ($start + 8) og det virkede :)

Jeg takker mange gange igen :)
Avatar billede minus Nybegynder
21. oktober 2008 - 17:11 #12
Lige til sidst, hvis jeg gerne vil have en div med clear:both; omkring pilene til at skifte side med, hvordan får jeg det sat ind, uden at gøre noget forkert?
Avatar billede w13 Novice
21. oktober 2008 - 17:19 #13
Nå ja, det skulle selvfølgelig være 8 i stedet for 1. =)

Hvordan ser din piledel ud nu?
Avatar billede minus Nybegynder
21. oktober 2008 - 17:22 #14
den ligger sig under galleriet, når er 8 billeder (går ud fra at det er pga følgende linje: if(($x % 4)==0)echo '<br />';.)

På en side, hvor jeg har 7 eller færre billeder, ligger koden sig på næste billedes plads.
Avatar billede w13 Novice
21. oktober 2008 - 17:40 #15
Jeg mener, hvordan er din kode? :)

Så jeg kan tilføje i den rigtige kode.
Avatar billede w13 Novice
21. oktober 2008 - 17:41 #16
Men hvorfor har du billederne i div-elementer, når de alligevel skal floates?
Avatar billede minus Nybegynder
21. oktober 2008 - 17:59 #17
Hej fandt ud af det. :)

Billederne ligger i div elementer, som er en slags ramme for dem. Ellers ser det roddet ud, da mange af mine billeder ikke kvadratiske. Og eftersom, jeg ikke helt har fundet ud af hvordan man centrerer dem lodret, endte jeg med at ligge dem i disse "rammer":

http://peecee.dk/uploads/102008/rtardpic.jpg

Mht pilene tilføjede følgende, som jeg går ud fra er korrekt nok (kan ses i bunden af ovenstående billede):

---
echo '<div id="pages">';

if ($start > 0) {
    echo '<a title="Forrige" href="art.php?start=' . ($start - 8) . '">&lt;</a>';
}

if ($start < $totimg - $antal) {
    echo '<a title="Næste" href="art.php?start=' . ($start + 8) . '">&gt;</a>';
   
echo '</div>';
---

"pages" har en clear:both; og text-align:center;, som virker fint. :)

Men tak for hjælpen :P det var sådan set det førse jeg manglede + lidt modifikation, som jeg fik lavet :)

--
Til de interesserede ser den færdige kode sådan ud:

<?php
$imgdir = 'galart/';
$allowed_types = array('png','jpg','jpeg','gif');
$dimg = opendir($imgdir);
while($imgfile = readdir($dimg)){
    if(in_array(strtolower(substr($imgfile,-3)),$allowed_types)){
        $a_img[] = $imgfile;
        sort($a_img);
        reset($a_img);
    }
}
$totimg = count($a_img);

$antal = 8;

$start = $_GET['start'];
if (!isset($start) or $start >= $totimg)
    $start = 0;

for($x = $start; $x < $totimg && $x < $start + $antal ; $x++){
        $size = getimagesize($imgdir.'/'.$a_img[$x]);
        $halfwidth = ceil($size[0]/2);
        $halfheight = ceil($size[1]/2);
        if(($x % 4)==0)echo '<br />';
        echo '<div class="billede"><a href="galart/'.$a_img[$x].'" rel="roebox[art]"><img src="galart/thumbs/thumb_'.$a_img[$x].'" alt="" /></a></div>';
}

echo '<div id="pages">';

if ($start > 0) {
    echo '<a title="Forrige" href="art.php?start=' . ($start - 8) . '">&lt;</a>';
}

if ($start < $totimg - $antal) {
    echo '<a title="Næste" href="art.php?start=' . ($start + 8) . '">&gt;</a>';
   
echo '</div>';   
}
?>
Avatar billede w13 Novice
21. oktober 2008 - 18:19 #18
Jep, det er helt korrekt. =)
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

IT-JOB

Netcompany A/S

Managing Architect

Nextway Software A/S

Software Architect

Politiets Efterretningstjeneste

CNE-specialist til PET`s indhentningsafdeling

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Nye kolleger søges til IT Stab i Forsvaret