Ben al even bezig maar ik kom er niet uit. Ik heb er al iets eerder over gepost.
De opdracht is in wezen simpel:
- lees een stuk tekst
- verdeel dat in pagina's van maximaal x regels
- met een maximale breedte van y
- laat telkens 2 pagina's naast elkaar zien
- oneven pagina's links en even pagina's rechts
- zorg voor correcte navigatie (first, previous, next, last)
Het is me tot op zekere hoogte gelukt, maar:
- óf de laaste pagina wordt niet getoond bij [next]
- óf er staat een oneven pagina rechts
- óf er staat een even pagina links
Als trucje verhoog ik de totaal_pagina's_teller met 1, als dit een even getal is.
Maar dan zie je bij [last] twee lege pagina's.
Zucht. Iemand beter ideeën? Ik zou er erg dankbaar voor zijn.
Dit is de link: (let op: zit in 2 regels, dus even samenvoegen)
http://www.misdaadauteurs.be/site/gvm_boekfragment.php?
key=1056&p=1
Dit is de code:
<?php
// haal een veld uit de database in de variabele $x_fragment.
// dit is gebeurd.
// stop deze variabele in en global.
$_SESSION["thistext"] = $x_fragment;
if ($x_fragment <> "") {
// tekst in array plaatsen:
// - eerst de <br /> en <br> vervangen door \n (wordwrap ziet <br />/<br> niet als CR-LF
// - dan wordwrap op 45 tekens breed
// - dan \n replacen door <br /> met nl2br
$_SESSION["data"] = explode("<br />", nl2br(wordwrap (str_replace("<br>","\n",str_replace("<br />","\n",$_SESSION["thistext"])), 45)));
// maximaal aantal regels per bladzijde
$_SESSION["maxlines"] = 19;
// totaal aantal regels van fragment
$_SESSION["totallines"] = count($_SESSION["data"]);
// totaal aantal pagina's
$_SESSION["totalpages"] = ceil(($_SESSION["totallines"] / $_SESSION["maxlines"]));
// welke pagina moet worden getoond
$page = $_GET["p"];
// if pagina niet gedefinieerd, dan beginnen op pagina 1
if($page <= 0) {
$page = 1;
// if pagina groter dan totaal aantal pagina's, dan beginnen op laatste pagina
} elseif ($page > $_SESSION["totalpages"]) {
$page = $_SESSION["totalpages"];
}
if ((($page % 2) == 0) && ($page > 0)) {
// Gebruiker vraagt een even pagina op;
// begin bij de vorige (oneven) pagina.
$page--;
}
?>
<div id="boekImage"
style="z-index:1; position:relative; font-family:'Times New Roman', Times, serif;font-size:120%; color:#000000;
margin-left:16px; margin-top:10px; border:0px; width:775px; height:427px; background-image:url(images/sitesys/BoekOpen.jpg);">
<!-- bladzijde links -->
<div id="pagL"
style="z-index:2;position:absolute; left:64px; top:18px; width:310px; height:380px; border:0px solid #333333;">
<?php
// te tonen startpagina
$start = ($page * $_SESSION["maxlines"]) - $_SESSION["maxlines"];
// de regels met tekst die worden getoond in een sub-array
$displayLeft = array_slice($_SESSION["data"], $start, $_SESSION["maxlines"]);
// toon deze regels op de linker bladzijde
showPage($displayLeft);
?>
</div>
<div id="pagnrL"
style="z-index:3; position:absolute; font-size:small; left:74px; top:404px; width:23px; height:17px; ">
<?php
// toon pagina nummer
echo $page;
?>
</div>
<div id="titel"
style="z-index:3; font-size:small; color:#999999; position:absolute; left:103px; top:404px; width:265px; height:19px; z-index:2;">
<?php
// toon titel van het boek
echo $x_titel;
?>
</div>
<?php
// if verder dan pagina 1+2, toon link naar vorige pagina('s)
if ($page > 1) { ?>
<div id="prev" style="z-index:4; position:absolute;left:34px; top:403px; width:40px; height:16px;overflow:hidden">
<a href="<?=$PHP_SELF;?>?key=<?php echo $x_bkn_id; ?>&p=0">
<img src="images/sitesys/first.gif" width="16" height="16" border="0"></a>
<a href="<?=$PHP_SELF;?>?key=<?php echo $x_bkn_id; ?>&p=<?php echo ($page - 2); ?>">
<img src="images/sitesys/prev.gif" width="16" height="16" border="0"></a>
</div>
<?php } // end if ($page > 2) ?>
<!-- bladzijde rechts-->
<div id="pagR"
style="z-index:5; position:absolute; left:430px; top:18px; width:310px; height:380px; vertical-align:top; border:0px solid #333333;">
<?php
// te tonen startpagina
$start = ($page * $_SESSION["maxlines"]);
// de regels met tekst die worden getoond in een sub-array
$displayRight = array_slice($_SESSION["data"], $start, $_SESSION["maxlines"]);
// toon deze regels op de rechter bladzijde
showPage($displayRight);
?>
</div>
<div id="pagnrR" align="right"
style="z-index:6; position:absolute; font-size:small; left:661px; top:403px; width:23px; height:17px; ">
<?php
// if nog een rechter bladzijde: toon pagina nummer
if ($displayRight) { echo $page + 1; }
?>
</div>
<div id="auteur" align="right"
style="z-index:3; font-size:small; color:#999999; position:absolute; left:431px; top:403px; width:224px; height:18px;">
<?php
// toon auteur van het boek, ook al is de pagina leeg
echo $auteur;
?>
</div>
<?php
// if nog meer pagina's, toon link naar volgende pagina('s)
if (($page + 1) < $_SESSION["totalpages"]) { ?>
<div id="next" style="z-index:7;position:absolute; left:690px; top:402px; width:40px;overflow:hidden">
<a href="<?=$PHP_SELF;?>?key=<?php echo $x_bkn_id; ?>&p=<?=($page + 2 );?>">
<img src="images/sitesys/next.gif" width="16" height="16" border="0"></a>
<a href="<?=$PHP_SELF;?>?key=<?php echo $x_bkn_id; ?>&p=<?php echo $_SESSION["totalpages"]; ?>">
<img src="images/sitesys/last.gif" width="16" height="16" border="0"></a>
</div>
<?php } // end if (($page + 1) < $_SESSION["totalpages"]) ?>
</div>
<?php } // end if ($x_fragment <> "") ?>
<?php
function showPage($display) {
foreach($display as $key => $value) {
print($value . "<br />");
}
}
?>
686 views