Gå til innhold

Lage neste forrige side [Så å si løst]


Anbefalte innlegg

Videoannonse
Annonse

Det du vil ha er en pager funksjon (pager betyr personsøker, men det er ikke den betydningen av ordet vi er ute etter her nå).

 

Jeg regner med du bruker en for løkke av noe slag for å skrive ut IMG koden til miniatyrbildene dine. Da kan du bare bryte for hver 10. bilde ved hjelp av denne koden:

 

if ( (teller % 10) == 0 ) {
 // bryt her, bruk break eller noe.
}

 

SÅ kan du generere linker med en parameter slik:

gallery.php?index=20

 

hvor $_GET['index'] referer til bildet som skal være nr. 1 på sidene. Du kan da bare hoppe litt i array eller tabellen din.

 

Hvis du bruker readdir for å lese igjennom en mappe med bilder, så les inn filnavnene i en array førs, sorter denne arrayen og så bryt den opp i sider.

Lenke til kommentar

Nå har jeg fått til å lage neste side i hvertfall, så nå må jeg bare lage forrige side, rekner med det går like greit som neste side, her er koden jeg brukte:

<? 
//Finn alle filer i galleriet
$Filer=scandir("bilder/galleri/".$_GET['galleri']);
//Tell antall filer
$antall=count($Filer)-1;
//De første to filene er . og .. derfor hopper vi over disse
$i=2;
$imagecounter=2;
//Lager en variabel som teller antall kolonner
$rowcounter=1;
//Hvis det er neste side så henter vi navnet på det aller siste bilde på forrige side
if($_GET['siste']!=''){
//Finn nummeret på det siste bilde som var på forrige side
while($Filer[$nummer]!=$_GET['siste']){
 $nummer++;
}
//Vi vil ikke ha med det siste bilde fra forrige side til neste side derfor teller vi opp en til
$nummer++;
//Vi setter variabelen som forteller hvilket bilde vi skal begynne på til å være det nummeret som vi fant nå nettop
$i=$nummer;

}
//Skriv ut navnet på galleriet i toppen på siden
echo "<h2>". $_GET['galleri'] . "</h2>\n";
//Skriv ut en begynnelse på en tabell
echo "<table border=\"0\">\n<br><tr>";
//En løkke som skriver ut bildene som er i mappen

while ($i <= $antall){
//Skriv ut adressen til php filen som viser bildene
//echo $Filer[$i];
echo "<td ><a href=\"bilde.php?galleri=".$_GET['galleri']. "&bilde=".$Filer[$i]. "&stor=true\" target=\"_blank\"><img src=\"bilde.php?galleri=" . $_GET['galleri'] . "&bilde=".$Filer[$i]."\"></td></a>\n";
//Sjekk om du har 3 bilder på en kolonne
if($rowcounter==3){
 //Det er 3 bilder på en kolonne derfor hopper vi ned en linje før vi skriver ut neste bilde
 echo "<tr>";
 //Nullstille kolonne telleren slik at vi får 3 bilder på hver kolonne
 $rowcounter=0;
}
//Sjekker om det er blir skrevet ut 10 bilder
if($imagecounter==10){
 //Skriv ut linken til neste side
 echo "\n<td><td align=\"center\"><br><a href=\"?page=vis-galleri&galleri=".$_GET['galleri']."&siste=".$Filer[$i]. "\" >Neste side</td></td></a>\n";
 //Siden det har blitt skrevet ut 10 bilder setter vi $i lik antall og går ut av while løkken
 $i=$antall;
}
//Inkrementer i slik at vi teller hvert bilde
$i++;
//Inkrementer rowcounter slik at vi holder greie på hvor mange bilder det er i hver kolonne
$rowcounter++;
//Inkrementer imagecounter
$imagecounter++;
}
//Skriv ut slutten på tabellen
echo "</table>";
?>

Lenke til kommentar

Da fikk jeg det endelig til, her er koden jeg brukte, sleit litt med å få vekk tilbake knappen når jeg hadde gått frem en side og så gikk tilbake, men det ordet seg til slutt.

 

<? 
//Finn alle filer i galleriet
$Filer=scandir("bilder/galleri/".$_GET['galleri']);
//Tell antall filer
$antall=count($Filer)-1;
//De første to filene er . og .. derfor hopper vi over disse
$i=2;
$imagecounter=2;
//Lager en variabel som teller antall kolonner
$rowcounter=1;
//Hvis det er neste side så henter vi navnet på det aller siste bilde på forrige side
if($_GET['siste']!=''){
if($_GET['retning']=='neste'){
 //Finn nummeret på det siste bilde som var på forrige side
 while($Filer[$nummer]!=$_GET['siste']){
 	$nummer++;
 }
 //Vi vil ikke ha med det siste bilde fra forrige side til neste side derfor teller vi opp en til
 $nummer++;
 //Vi setter variabelen som forteller hvilket bilde vi skal begynne på til å være det nummeret som vi fant nå nettop
 $i=$nummer;
}
else if($_GET['retning']=='forrige'){
 //Finn de 10 bildene som var før bildene som var på forrige side
 //Først lagger vi en løkke som finner nummeret på siste bilde
 while($Filer[$nummer]!=$_GET['siste']){
 	$nummer++;
 }
 //Vi trekker fra 10 for å få første bilde på forrige side og så trekker vi fra 10 for å få de 10 bildene som skal stå på siden foran
 $nummer=$nummer-17;
 $i=$nummer;
}

}
//Skriv ut navnet på galleriet i toppen på siden
echo "<h2>". $_GET['galleri'] . "</h2>\n";
//Skriv ut en begynnelse på en tabell
echo "<table border=\"0\">\n<br><tr>";
//En løkke som skriver ut bildene som er i mappen

while ($i <= $antall){
//Skriv ut adressen til php filen som viser bildene
//echo $Filer[$i];
echo "<td ><a href=\"bilde.php?galleri=".$_GET['galleri']. "&bilde=".$Filer[$i]. "&stor=true\" target=\"_blank\"><img src=\"bilde.php?galleri=" . $_GET['galleri'] . "&bilde=".$Filer[$i]."\"></td></a>\n";
//Sjekk om du har 3 bilder på en kolonne
if($rowcounter==3){
 //Det er 3 bilder på en kolonne derfor hopper vi ned en linje før vi skriver ut neste bilde
 echo "<tr>";
 //Nullstille kolonne telleren slik at vi får 3 bilder på hver kolonne
 $rowcounter=0;
}
//Sjekker om det er blir skrevet ut 10 bilder
if($imagecounter==10){
 //Skriv ut linken til neste side
 echo "</table>";
 $max_bilder=true;
 echo "\n<br><a href=\"?page=vis-galleri&galleri=".$_GET['galleri']."&siste=".$Filer[$i]. "&retning=neste\" >Neste side</td></td></a>\n";
 $SisteBilde=$Filer[$i];
 
 //Siden det har blitt skrevet ut 10 bilder setter vi $i lik antall og går ut av while løkken
 $i=$antall;
}
//Inkrementer i slik at vi teller hvert bilde
$i++;
//Inkrementer rowcounter slik at vi holder greie på hvor mange bilder det er i hver kolonne
$rowcounter++;
//Inkrementer imagecounter
$imagecounter++;
}
//Skriv ut slutten på tabellen
if($_GET['siste']!=''){
//Det er bilder på forrige side
//En løkke som nummer og navn på siste bilde som ble vist
while($Filer[$SisteBildeCounter]!=$SisteBilde){
 $SisteBildeCounter++;
}
//Hvis retning er neste så skal vi ha forrige side link
$BildeForrigeSide=$SisteBildeCounter-17;
if($Filer[$BildeForrigeSide]!=''){
 
 if(file_exists("bilder/galleri/" . $_GET['galleri'] . "/". $Filer[$BildeForrigeSide])){
 	//Skriv ut forrige side link
 	echo "\n<br><a href=\"?page=vis-galleri&galleri=".$_GET['galleri']."&siste=".$Filer[$SisteBildeCounter]. "&retning=forrige\" >Forrige side</td></td></a>\n";
 }
}
}
//Sjekk om du har skrevet ut slutten på tabbellen før
if(!$max_bilder==true){
echo "</table>";
}
?>

Lenke til kommentar

Kan jo det er ikke så mye så skal endres bare readdir slik at de som ikke har php5 også kan bruke det, så er det bare å endre img src fordi jeg har brukt gd og en php side for å vise mine bilder, derfor står det img src=bilde.php

 

 

Er altså ikke ferdig med scriptet ennå altså, eneste dette gjør er å vise 9 bilder på hver side og sette inn forrige og neste knapp, skal lage til slik at jeg kan få kommentar osv på bildene også, men det kan ta litt tid.

Endret av trrunde
Lenke til kommentar
Hvorfor i alle dager poster du koden din her dersom det ikke er meningen at andre skal bruke den?

5156210[/snapback]

 

Det kan jo hende at flere bruker PHP5 enn du tror da. Apache 2.0 er jo begynt å bli dominerende også (etter at barnesykdommene forsvant).

 

PHP 5 har veldig mange sterke sider og det er liksom to leiere siden PHP gruppen fortsatt gir ut oppdateringer til 4.x serien.

 

For mange som bare vil lese inn en filliste i en array er scandir() et must! Mulig man kan si det er noe som gjør PHP bloated, men for nybegynnere så er alle slike hjelpefunksjoner en kjærkommen gave. Senerer kan de jo bevege seg vekk fra disse hjelpefunksjonene og kode alt selv slik som jeg regner med du (???) gjør.

 

En ting hadde som hadde vært bra er at PHP 5 kunne hatt disse hjelpefunksjonene i en egen modul (DLL/DSO) slik at folk som ikke trenger det bare kan fjerne load linja fra php.ini.

 

Jeg kjører selv PHP5 på mitt XAMPP oppsett (ja jeg er lat!!).

Lenke til kommentar

Hehe... tro meg når jeg sier at de absolutt aller fleste fortsatt har PHP 4.

 

Og hva du mener med at scandir() er et must, når du kan gjøre det samme i PHP 4 skjønner ikke jeg. Det blir akuratt som å si at file_put_contents() er et must, men hvis du følger med så ser du at nesten alle scripts bruker fopen og fwrite fortsatt.

 

Poenget er ikke å bevege seg bort fra sånne enklere løsninger, men å bevege seg mot dem. Om et par år er jeg ikke i tvil om at de nye funksjonene vil ta over, nettopp fordi de er enklere. Probelemet er at det drøyer en stund før dette skjer, og nettopp fordi de fleste fortsatt kjører PHP 4 så vil det ikke bare være bra, men nødvendig å bruke PHP 4 funksjoner.

Lenke til kommentar

if (!function_exist("scandir")) {
function scandir($dir = './', $sort = 0) 
{
  
  $dir_open = @ opendir($dir);
  
  if (! $dir_open)
      return false;
      
      
  while (($dir_content = readdir($dir_open)) !== false)
          $files[] = $dir_content;
  
  if ($sort == 1)
      rsort($files, SORT_STRING);
  else
      sort($files, SORT_STRING);
  
  return $files;
}
}

 

Dette vil "lage" scandir-funksjonen hvis den ikke er der fra før, altså hvis det ikke er PHP5...

 

(Hentet fra www.php.net/scandir ;) )

Lenke til kommentar
  • 1 måned senere...
if (!function_exist("scandir")) {
function scandir($dir = './', $sort = 0) 
{
  
  $dir_open = @ opendir($dir);
  
  if (! $dir_open)
      return false;
      
      
  while (($dir_content = readdir($dir_open)) !== false)
          $files[] = $dir_content;
  
  if ($sort == 1)
      rsort($files, SORT_STRING);
  else
      sort($files, SORT_STRING);
  
  return $files;
}
}

 

Dette vil "lage" scandir-funksjonen hvis den ikke er der fra før, altså hvis det ikke er PHP5...

 

(Hentet fra www.php.net/scandir ;) )

5156514[/snapback]

 

Funket ikke, kom opp:

Fatal error: Call to undefined function: function_exist() in /home/sites/gnomen.1l.com/httpdocs/bilder2.php on line 2

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...