Avatar billede Peter Praktikant
23. maj 2004 - 16:39 Der er 17 kommentarer og
2 løsninger

Lave next og prev links på fullsize billede i galleri.

Hej
Jeg har lavet et simpelt galleri der viser thumbs for alle billeder i en mappe. Når man klikker på thumb'en bliver den vist i fuld størrelse, her vil jeg gerne have links til previous og next billede. Jeg ved bare ikke rigtigt hvordan jeg smart skal gøre det, for jeg har jo alt infoen i php-filen der viser thumbs'ne, men den skal jeg så have givet videre til php-filen der viser det store billede. Jeg har tænkt på at tilføje alle filnavne til et array, men det synes jeg ikke rigtigt at kunne få givet videre til php-filen der skal vise det store billede.
Hvordan kan jeg rimeligt let sørge for at 2.php har fuldt kendskab til et array der genereres i 1.php. Register globals er sat til off.
Avatar billede sukos Juniormester
23. maj 2004 - 16:46 #1
Hvordan laver du links?
fil.php?fil=2

????
Avatar billede dorgbar Nybegynder
23. maj 2004 - 16:47 #2
du giver alle billederne et nummer
derefter laver du en global variabel ($_GET[])
så laver du en løkke køre igennem 10 gange
og returnere et billede hver gang
hvis $_GET[] så er 1 tager den alle billederne fra 1 til 11
hvis $_GET[] er 10 tager den alle billederne fra 10 til 20
Avatar billede dorgbar Nybegynder
23. maj 2004 - 16:53 #3
hvis vi siger du har alle billedernes filnavne i et array med navn $billeder
sålaver du en while løkke hvor tæller variablen er sat i urlen under id

$prside = 10;
$i = $_GET[id];
$stop = $_GET[id] + $prside;
while(!($i == $stop))
{
billede();
}
$tilbage = $_GET[id] - stop;
$frem = $_GET[id] + stop;

$tilbage = gallery.php?id=$tilbage
$frem = gallery.php?id=$frem
Avatar billede dorgbar Nybegynder
23. maj 2004 - 16:55 #4
såkan du jo lave sådan at
if($_GET[id] == null) //så er den 0, eller
if($tilbage < 0) //så er den 0
Avatar billede Peter Praktikant
23. maj 2004 - 16:56 #5
sukos > jeg linker med filnavnet: file.php?image=path_image.jpg.

dorgbar > Jeg forstår ikke helt, det må du meget gerne uddybe. Jeg vil lave en side jeg linker til med filnavnet, problemet er så at jeg ikke ved hvad forrige og næste element i mappen hedder, derfor vil jeg gerne have denne info tilgængelig i file.php. Jeg ved ikke helt om du også har forstået det sådan, hvis du må du meget gerne uddybe.
Avatar billede Peter Praktikant
23. maj 2004 - 16:57 #6
Okay, jeg er godt med på at smide alle filnavne i et array og så give et index med, men hvordan sørger jeg for at arrayet er tilgængelig i 2.php?
Avatar billede Peter Praktikant
23. maj 2004 - 16:59 #7
ahh, vi snakker vist forbi hinanden, jeg snakker ikke om at lave en indexfil, jeg snakker om at lave den side hvor fullsize billederne er på, der vil jeg have et frem og et tilbage link som skal linke til næste og forrige billede. Derfor bliver den fil der skal vise det store billede jo nødt til at have kendskab til alle billeder i mappen, altså til arrayet.
Avatar billede dorgbar Nybegynder
23. maj 2004 - 17:21 #8
du opretter vel bare arrayet hver gang nogen henter siden
Avatar billede dorgbar Nybegynder
23. maj 2004 - 17:23 #9
er dernogen speciel grund tildu har valgt at skrive filnavnet i url'en istedet for et tal? fordi detvilvære meget lettere
Avatar billede sukos Juniormester
23. maj 2004 - 18:00 #10
Hvis du i den fil som viser det store billede, læser det dir igennem hvor de store billeder findes, kan du putte dem i et array.
Det er mit indtryk at php er hurtig til at læse dirs.


Derefter tjekker om filen rent faktisk findes, altså er i array'et

if(in_array($_GET["image"], $filer)) {
......vis billede.................
}else{
......biledet findes ikke.......
}

Hvis filen findes, er i array'et, kan du bruge denne til at finde placeringen i array'et:


function get_var($navn, $var="") {
global $filer; // array'et med filnavne
$key = array_search($navn, $filer);
    if(empty($var)) { // $var er tom, så det skal være "forrige"
    return @$filer[$key-1];
    }else{
    return @$filer[$key+1];
    }
}


Derefter, for at finde ud af om der skal være et forrige/næste link:

if(true == get_var($_GET["image"])) {
$a = <a href=\"". $_SERVER["PHP_SELF"] ."?image=". get_var($_GET["image"]) ."\">forrige</a>";
}else{
$a = "";
}

if(true == get_var($_GET["image"], 1)) {
$b = <a href=\"". $_SERVER["PHP_SELF"] ."?image=". get_var($_GET["image"], 1) ."\">næste</a>";
}else{
$b = "";
}

echo $a ." - ". $b;

Håber du er med! :O)

I stedet for at læsa dir igennem, kunne du evt. bruge sessions, og gemme filnavne i et session array
Avatar billede sukos Juniormester
23. maj 2004 - 18:18 #11
Lidt til at teste med: (fejl i koden ovenover også! :O] )

<center>
<?php
$filer= array("fil.jpg", "billede.jpg", "image.jpg", "morgensol.jpg", "galleri.jpg", "php.jpg", "mysql.jpg");

function get_var($navn, $var="") {
global $filer; // array'et med filnavne
$key = array_search($navn, $filer);
    if(empty($var)) { // $var er tom, så det skal være "forrige"
    return @$filer[$key-1];
    }else{
    return @$filer[$key+1];
    }
}


echo"Blot til at starte med: <a href=\"". $_SERVER["PHP_SELF"] ."?image=morgensol.jpg\">morgensol.jpg</a>";
echo"<p>";

if(isset($_GET["image"])) {
if(in_array($_GET["image"], $filer)) {
echo $_GET["image"];
echo"<p>";

if(true == get_var($_GET["image"])) {
$a = "<a href=\"". $_SERVER["PHP_SELF"] ."?image=". get_var($_GET["image"]) ."\">forrige</a>";
}else{
$a = "";
}

if(true == get_var($_GET["image"], 1)) {
$b = "<a href=\"". $_SERVER["PHP_SELF"] ."?image=". get_var($_GET["image"], 1) ."\">næste</a>";
}else{
$b = "";
}

echo $a ." - ". $b;


}else{
echo"Sorry, filen findes ikke";
    }
}

?>
</center>
Avatar billede Peter Praktikant
23. maj 2004 - 18:45 #12
Jeg tror desværre vi snakker lidt forbi hinanden stadigvæk. Jeg har allerede en side med thumbs, der løber jeg mappen igennem. Jeg åbner det store billede i et nyt vindue, altså en ny fil. Jeg vil gerne undgå at løbe hele mappen igennem hver gang et stort billede skal vises. Derfor vil jeg tilføje alle billeder til et array på index-siden, altså siden med thumbs. Dette array vil jeg gerne have er tilgængeligt på siderne der viser de store billeder. Jeg kunne sagtens løbe hele mappen igennem hver gang et stort billede skal vises, så ville jeg ikke behøve at bruge et array overhovedet, men hvis jeg kan lave arrayet globalt tilgængeligt vil jeg for at løbe hver mappe igennem mere end 1 gang for hver besøgende.
Så hvordan kan jeg gøre arrayet globalt tilgængeligt.

sukos > tak fordi du har gidet skrive alt det kode, men jeg kan ikke rigtigt bruge det til noget lige umiddelbart da det ikke løser mit problem ordentligt så vidt jeg ser.

dorgbar > Jeg vil helst kalde siden med et tal, men det kræver jo at jeg har filnavnene i et array, det har jeg ikke pt da jeg ikke kan tilgå arrayet fra side 2 når det er oprettet på side 1, det er der mit problem ligger.
Avatar billede sukos Juniormester
23. maj 2004 - 18:52 #13
Så brug sessions!
Og jow, du kan godt bruge tal.
Du kan jo tælle antal filer som kan vises.
Avatar billede detox Nybegynder
23. maj 2004 - 18:59 #14
Jeg vil osse anbefale sessions. Med sessions kan du nemt gøre et array tilgængeligt på flere sider.
Avatar billede Peter Praktikant
23. maj 2004 - 21:05 #15
okay, det lyder som om sessions er vejen frem, men jeg synes bare det er lidt tosset at skulle lave sessions når det er det samme array alle brugere skal bruge.
Jeg prøver at kigge på det og se om jeg kan få det til at køre.
Avatar billede sukos Juniormester
23. maj 2004 - 22:04 #16
Du kan ikke lave et array på en side, og så få en helt anden side til at finde det array medmindre du "gør et eller andet", som session eller cookie, f.eks.

Du kan også bruge txt filer, til at gemme filnavne, og så lade hver side læse den igennem.
Så er du også sikker på at alle kan se billeder, uanset browserindstillinger for cookies.
Avatar billede Peter Praktikant
24. maj 2004 - 19:37 #17
Jeg har endnu ikke lavet det med sessions. Jeg synes ikke det er så overdrevet smart til formålet i forhold til at gennemløbe mappen hver gang. Galleriet skal være så simpelt som muligt at opdatere, derfor vil jeg ikke bruge en database da dette vil medføre at jeg enten ikke kan uploade via ftp uden at skulle ind på en admin-side og opdatere databasen, ellers skal jeg uploade via en admin-side, men det vil betyde at jeg skal definere hver enkelt fil der skal uploades.
Så derfor har jeg valgt at gennemløbe mappen hver gang en indexside skal vises. Men for at vise links til forrige og næste på den side der viser det store billede er jeg jo nødt til at kende til hele indholdet af mappen.
Så det er lidt af et dilemma, den mest elegante løsning vil kræve at billednavne holdes i en database, men det vil kræve lidt mere at vedligeholde. Den letteste løsning at vedligeholde er jo den jeg har tænkt mig, men den er vel ikke så effektivt. Har jeg overset noget? Hvordan ville i gøre det når det skal være så let at opdatere som muligt?

sukos > Hvis du vil ligge et svar, så får du halvdelen af pointene.
Avatar billede sukos Juniormester
26. maj 2004 - 08:09 #18
Kan jeg da godt! :O)

Nemmeste er jo nok blot at uploade billeder til en mappe, som så læses igennem.
Hvis du ikke vil læse dir'et igennem to gange, 1 ved thumbs og 1 ved visning af stort billede, så brug session til at gemme billeder 1. gang du læser igennem.

Hvis du bruger DB, har du jo mulighed for at f.eks. kommentere de enkelte billeder.
Dette kunne nu osse gøres ved at ha' en txtfil med navnet billedenavn.txt
Avatar billede Peter Praktikant
31. maj 2004 - 22:27 #19
Tak for hjælpen til jer begge, jeg er nu i fuld gang med at lave galleriet og kan lige smide et link når jeg er færdig så i kan se det endelige resultat.
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