Autor Zpráva
Raider
Profil
Mám knihu návštev (index.php) - príspevky z nej ukladám do databázy (tabuľka kniha), každý príspevok ma svoje vlastné ID. Vedel by mi niekto poradiť, akým spôsobom spraviť stránkovanie na hlavnej stránke index.php tak, aby mi vždy na začiatku ukazovalo napr. 10 najnovších príspevkov a ostatné by bolo možné listovať (predchádzajúce,nasledujúce;..2,3,4..) ?
jozob
Profil
V skripte použiť niečo takéto:
<?php

$pr_str=10 //pocet prispevkov na stranku
if(isset($_GET["str"]))
{
$str=$_GET["str"]-1; //ak existuje premenna GET
}
else
{
$str=0; //ak nie (este nebola zvolena ziadna stranka)
}
$dotaz=mysql_query("SELECT * FROM tabulka LIMIT ".$str.",".($str+$pr_str)); //dotaz, pouzitie LIMITu

//atd...
//este treba spravit odkazy

$dotaz=mysql_query("SELECT * FROM tabulka");
$pocet=mysql_num_rows($dotaz); //pocet riadkov (prispevkov)
$stranok=ceil($pocet/$pr_str); //pocet stranok

for($i=0; $i<$stranok; $i++)
{
echo("<a href=\"?str=".$i."\">".$i."</a>&nbsp;");
}
?>


Možno som niekde spravil chybu...
Je to len hrubý návrh "z brucha"...
Uprav si to podľa potreby...
Hugo
Profil
Na konec dotazu přidej

ORDER BY ID DESC LIMIT 0,10

Další strana bude

ORDER BY ID DESC LIMIT 10,10

atd.
jozob
Profil
Ak niečomu nerozumieš, napíš...
jozob
Profil
Ešte doplním:
Je to to isté ako napísal Hugo, akurát ja som Ti rozpísal základnú štruktúru toho skriptu...
Falcon16
Profil
Kedze som to robil nenidavno, aj dnes, tak tu je moj vyplod.

define ("poc_na_stranu", 15);

include "./incfile/mysqlconnect.php";
$dotaz = MySql_Query( "SELECT COUNT(*) AS cnt FROM guest" , $spojenie );
$vysledok = MySql_Fetch_Array($dotaz);
$cnt = $vysledok["cnt"];

if ( !isset($_GET["page"]) )
{$page = 1;}
else
{$page = $_GET["page"];}

if ($cnt != 0)
{
if ( $cnt % poc_na_stranu == 0 )
{
$poc_stran = $cnt / poc_na_stranu;
$poc_stran = floor($poc_stran);
}
ELSE
{
$poc_stran = $cnt / poc_na_stranu;
$poc_stran = floor($poc_stran);
$poc_stran++;
}
}
$od = ($page - 1) * poc_na_stranu ;
$do = poc_na_stranu;

if ($poc_stran > 1)
{
for ( $i=1 ; $i <= $poc_stran ; $i++ )
{
if ( $i == 1 || $i == 2 || $i == 3 || $i == $poc_stran-2 || $i == $poc_stran-1 || $i == $poc_stran || $i == $page || $i-1 == $page || $i+1 == $page )
{
if ($i == $page)
{
echo " <B>[$i]</B> ";
$medzera = false;
}
ELSE
{
echo " <A href=\"forum.php?page=$i\">$i</A> ";
$medzera = false;
}
}
else
{
if ($medzera == false)
{
echo "..";
$medzera = true;
}
}
}
}

Inak ak niekto nepochopil, nevypisuju odkazy na stranky dalsia-predchadzajuca, ale prve tri, posledne tri , aktualna stranka, stranka pred nou a stranka za nou. Este mam u seba pridane, ze sa da prejst cez form select na hociktoru stranku
jozob
Profil
Falcon16
Malá pripomienka...
Tento zápis je IMHO zbytočný:
if ( $cnt % poc_na_stranu == 0 ) 

{
$poc_stran = $cnt / poc_na_stranu;
$poc_stran = floor($poc_stran);
}
ELSE
{
$poc_stran = $cnt / poc_na_stranu;
$poc_stran = floor($poc_stran);
$poc_stran++;
}




Na čo zaokrúhľuješ číslo, ktoré má po celočíselnom delení zvyšok 0?
A prečo používaš floor a potom inkrementuješ zaokrúlené číslo? Ten istý efekt má funkcia ceil...
A podmienka je tam úplne zbytočná, presne to isté sa dá zapísať takto (a ušetríš pár riadkov):
$poc_stran = $cnt / poc_na_stranu; 

$poc_stran = ceil($poc_stran);


Je to len taká pripomienka k dokonalosti :-)
Raider
Profil
Stránkovanie sa mi podarilo spraviť podľa toho vzoru od Falcona 16. Diki moc všetkým, už som tomu trochu porozumel
Anonymní
Profil *
tu je jeden skvely kod

<?
define ("ROWS", 50);
if (!isset($_GET["celkem"])) //pokud nevíme, kolik bude záznamů tak to zjistíme...
{
$vysledek=mysql_query("select count(*) as pocet from psc");
$zaznam=mysql_fetch_array($vysledek);
$celkem=$zaznam["pocet"];
}
else
{
$celkem=$_GET["celkem"];
}
if ($celkem>ROWS)
{
if (!isset($_GET["od"])) $od=1; else $od=$_GET["od"];
$vysledek=mysql_query("select * from psc"." limit ".($od-1).", ".ROWS);
echo "Záznamů: ".$od."-";
echo (($od+ROWS-1)<=$celkem)?($od+ROWS-1):$celkem;
echo " z celkem $celkem&nbsp;&nbsp;&nbsp;";
//začátek - vytvoř odkaz pouze pokud nejsme na začátku
if ($od==1) echo "Začátek&nbsp;|&nbsp;";
else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=1\">Začátek</a>&nbsp ;|&nbsp;";
//zpět - vytvoř odkaz pouze pokud nejsme v prvních ROWS
if ($od<ROWS) echo "Předchozí&nbsp;|&nbsp;";
else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od-ROWS)."\">Pře dchozí</a>&nbsp;|&nbsp;";
//další - vytvoř, pouze pokud nejsme v posledních ROWS
if ($od+ROWS>$celkem) echo "Následující&nbsp;|&nbsp;";
else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od+ROWS)."\">Nás ledující</a>&nbsp;|&nbsp;";
//poslední - to je posledních (zbytek po dělení ROWS) záznamů
if ($od>$celkem-ROWS) echo "Konec&nbsp;<BR>";
else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($celkem-$celkem%R OWS+1)."\">Konec</a><BR>";
}
?>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0