04. august 2004 - 20:22Der er
5 kommentarer og 1 løsning
Paging af simpel tekst udtrukket fra MySQL
Jeg har en tekst, som jeg godt vil have delt over f.eks. 3 sider, men den skal være dynamisk, så sidetallet passer til længden af teksten, hvis I forstår.
Jeg har trukket teksten ud fra db'en, og via nl2br også fået lavet afsnitsskifts, så det er kun selve pagingen, jeg skal have lidt hjælp til.
Jeg overvejer at analyser teksten, og lede efter <br> som jo gerne skulle være et naturligt skift, men hvordan gør jeg lige, så den f.eks. lave et sideskift efter 3 <br>?
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Grunden til at det skal være dynamisk med hensyn til sidetallet, er fodi brugerne skal kunne ændre i teksten, som deraf kan blive både længere og kortere.
Det her er et skud lidt hurtigt lavet, ved ikke om det virker. Jeg har ikke så meget tid i dag, hvis du ikke har fundet ud af det i morgen skal jeg nok kigge på det.
Jeg kører med dobbelt <br>, for at fastholde nogle pæne afsnit.
Min ide er nu at finde længden på arrayet, for på den måde at udregne hvor mange sider der skal bruges, hvis jeg f.eks. kun vil have 3 afsnit pr. side.
Okay, nu er jeg kommet rimeligt langt, hvis jeg selv skal sige det.
Det eneste problem jeg har, er en akkumulering. Det er lidt svært at forklare, men for at finde det nye index i arrayet, som jeg skal bruge til at få de bestemte afsnit uf af DB'en, har jeg sagt at den skal gange med sidetallet-1, men det passe kun til og med side 3, allerede med side 4 går det galt.
Så jeg skal lige have fundet en måde, så værdierne bliver som følger:
Side Index 1 0 2 6 3 12 4 18 5 24
osv.
Min kode lige nu ser sådanne ud:
<?php include 'forbindelse.php'; session_start();
$historie = mysql_query("SELECT * FROM RS_Historie"); $history = mysql_fetch_array($historie); $info = nl2br($history[tekst]); $hej = explode('<br />', $info);//Der er 2 <br /> imellem hvert afsnit, derfor vil de lige arrays indeholde denne string " ", så huske derfor at bruge <br> til at lave nye linieskift med $længde = count($hej);//Finder længden af array, både afsnit og afsnitsmellemrum $prSide = 6;//Antal afsnit og mellemrum pr. side. Det sidste mellemrum er med for ikke at komme på næste side $antalSider = ceil($længde/$prSide);//Udregner hvor mange sider der skal bruges, ud fra de 2 forgående oplysninger $output; //Variable til udskrive historie-teksten med. Bruges i forløkken $aktuelleSide; //for ($gennemløb=0;$gennemløb<$antalSider;$gennemløb++){ if (!$_GET[side] || $_GET[side]==1) { $aktuelleSide = 1; $arrayIndex = $prSide;
?> <html> <head> <title>test af paging, som skal gøres over én lang tekst</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="<?echo $PHP_SELF?>" method="POST" name="paging" target="_top"> <table> <tr> <td><? for ($index = 0; $index < $prSide; $index++) { $output = $hej[$index]; ?><br><? echo $output; }?> </td> </tr> <tr> <td><?=$aktuelleSide?></td><td><a href="paging.php?side=<?=$aktuelleSide+1?>&index=<?=$arrayIndex?>" target="_top">></a></td> </tr> </table> </form> </body> </html> <? //} } else if ($_GET[side]>1 && $_GET[side]<$antalSider) {//Alle sider imellem den første og den sidste $aktuelleSide = $_GET[side]; $næsteSide = $aktuelleSide + 1; $forrigeSide = $aktuelleSide -1; $arrayIndex = $_GET[index]; $nyArrayIndex = $arrayIndex*($næsteSide-1); $forrigeArrayIndex = $arrayIndex - $prSide; ?> <html> <head> <title>test af paging, som skal gøres over én lang tekst</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="<?echo $PHP_SELF?>" method="POST" name="paging" target="_top"> <table> <tr> <td><? for ($index = $arrayIndex; $index < $prSide+$arrayIndex; $index++) { $output = $hej[$index]; ?><br><? echo $output; }?> </td> </tr> <tr> <td><a href="paging.php?side=<?=$forrigeSide?>&index=<?=$forrigeArrayIndex?>" target="_top"><</a></td><td><?=$aktuelleSide?></td><td><a href="paging.php?side=<?=$næsteSide?>&index=<?=$nyArrayIndex?>" target="_top">></a></td> </tr> </table> </form> </body> </html> <? } else if ($_GET[side]==$antalSider) {//Den sidste side $aktuelleSide = $_GET[side]; $arrayIndex = $_GET[index]; $forrigeArrayIndex = $arrayIndex - $prSide; ?> <html> <head> <title>test af paging, som skal gøres over én lang tekst</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="<?echo $PHP_SELF?>" method="POST" name="paging" target="_top"> <table> <tr> <td><? for ($index = $arrayIndex; $index < $prSide+$arrayIndex; $index++) { $output = $hej[$index]; ?><br><? echo $output; }?> </td> </tr> <tr> <td><a href="paging.php?side=<?=$aktuelleSide-1?>&index=<?=$forrigeArrayIndex?>" target="_top"><</a></td><td><?=$aktuelleSide?></td> </tr> </table> </form> </body> </html> <? } ?>
Nu skal jeg vist snart i seng, når man bruger så lang tid på så simpel en løsning, som faktisk brude være lige foran næsen på én, men ak.
Løsningen er at
$nyArrayIndex = $arrayIndex*($næsteSide-1);
ændres til
$nyArrayIndex = $aktuelleSide*$prSide;
Synes godt om
Ny brugerNybegynder
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.