Autor Zpráva
Honca
Profil
Chtěl bych poradit s vyspělejším stránkováním.
Potřebuju udělat odkazy na jednotlivé stránky, ale pokud těch stránek bude třeba několik stovek, nechci, aby se mi vypisovaly všechny, ale třeba jen určitý počet a odkazy na ty stránky by podle toho mizely nebo naopak přibývaly. Nějak nemůžu přijít na podmínku v tom cyklu ... :-P

Díky moc
Patrick_ROY
Profil *
ahoj, taky by me zajimalo jak udelat tohle strankovani. jestli nekdo vi, prosim poradte!
Alphard
Profil
přepokládám, že znáš aktuální stránku a vypisuješ cyklem:
potom jen kontroluješ, jestli jsi v určitém rozsahu od aktuální stránky, např
if ($i >= $m - ROZSAH && $i <= $m + ROZSAH)
echo "<a>$i</a>";
vysvětlení:
$i ... proměnná, která se v každé iteraci cyklu zvyšuje o 1
$m ... proměnná s aktuální stránkou
ROZSAH ... konstatnta s rozsahem
jestli bude rozsah např. 3 a $m 18, vznikne
15 16 17 18 19 20 21
Patrick_ROY
Profil *
diky, problem je uz vyresen :))
HGD
Profil
potřeboval bych tenhle script taky použít, ale nepochopil sem co je to to $i
Alphard
Profil
proměnná navyšovaná v cyklu, např. for ($i = 1; ; $i++)
bukaj
Profil
HGD
ale nepochopil sem co je to to $i
Viz: $i ... proměnná, která se v každé iteraci cyklu zvyšuje o 1
HGD
Profil
to ale stejně nechápu :(
proč to je vůbec v cyklu, co to vypíše?
centi
Profil
Pred pár rokmi som trochu experimentoval a vyšlo z toho toto: http://ukazky.centi.sk/php/pager/index.html
krteczek
Profil
taky jedna stránkovací třída:

<?php

class Strankovani
{
/***
Stránkování výpisu,
Autor: krteczek
Weby: www.jaknato.com texyla.jaknato.com
Autor původního scriptu je k_23 (myslim presne si ten nick nepamatuji :-( když tak ad se ozve)
Nicmene puvodni script mi nevyhovoval, takze sem ho komplet prepsal,
zacal sem si hrat s tridami a toto je moje treti trida, tak se moc necertete
vyzaduje pro svou praci mou prvni tridu, tou je db();
neni problem ale prepsat vytahovani dat z db tak aby to fungovaloi bez ni
dnes je tato trida soucasti me db();

Pouziti:
1. nejprve si sestavte podminky pro vytazeni dat z db:
$podminky = " WHERE `active` = 1 ORDER BY `id` DESC " ;

2. inicializujte tridu:
$pocetVypisuNaStranku = 20;
$tabulka = 'tabulka';
$str = new Strankovani($tabulka, $podminky, $pocetVypisuNaStranku);

3. vytahnete pozadovana data z db podobnym dotazem (zjednoduseno):
$dotaz = "SELECT * FROM `" . $tabulka . "` " . $podminky . " LIMIT " . $str->start . ", " $str->rows;

4. zobrazite strankovaci odkazy:
$odkazy = $str->BlokCisel();
echo $odkazy;

5. vypisete obsah toho co jste vybrali z db

6. mužete opet zobrazit odkazy
echo $odkazy
***/

var $l; # promenna pres kterou filtrujeme SQL dotaz
var $tabulka; # tabulka ze ktere tahame data
var $rows; # po kolika zaznamech zobrazujeme
var $pocet_radku; # kolik radku obsahuje tabulka
var $podminky;#poslane podminky pro
var $delkaSeznamu = 4; //kolik čísel se zobrazí v řadě před a za aktuálním číslem

function Strankovani($tabulka, $podminky, $rows = 5)
{
$this->dbs = new db();
$this->podminky = $podminky;
$this->l = (!empty($_GET['l']) ? intval($_GET['l']) : 1);
$this->tabulka = $tabulka;
$this->rows = $rows;
$this->pocet_radku = $this->PocetRadku();
$this->bloku = ceil($this->pocet_radku / $this->rows);
$this->l = ($this->l > $this->bloku ? $this->bloku : $this->l);
$this->start = ($this->l - 1) * $this->rows;
$this->start = ($this->start < 0 ? 0 : ($this->start > $this->bloku ? $this->bloku : $this->start ));
}

function PocetRadku()
{
$dotaz = "SELECT COUNT(*) as `pocet` FROM " . $this->tabulka . $this->podminky;
$v = $this->dbs->q($dotaz);
if(is_array($v))
{
return $v[0]['pocet'];
}
return 0;
}


function BlokCisel()
{
/*
Tato část se stará o vytvoření systémů odkazů ve tvaru:
|<< < 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 > >>|

*/
$blok = '';

$a = 0;
$pocetOdkazu = (2 * $this->delkaSeznamu) +1;
$pocetOdkazu = ($this->bloku < $pocetOdkazu ? $this->bloku : $pocetOdkazu);
$prvnizBloku = $this->l - $this->delkaSeznamu;
$prvnizBloku = ($prvnizBloku < 1 ? 1 : $prvnizBloku);
$poslednizBloku = $this->l + $this->delkaSeznamu;
$poslednizBloku = ($poslednizBloku > $this->bloku ? $this->bloku : $poslednizBloku);
$poslednizBloku = ($prvnizBloku == 1 ? $pocetOdkazu : $poslednizBloku);

$txtZacatekNeOdkaz = ' <b title="Jít na začátek výpisu">|&lt;&lt;</b> ';
$txtZacatexOdkaz = ' <a href="?l=1" title="Jít na začátek výpisu"><b>|&lt;&lt;</b></a> ';
$txtKonecNeOdkaz = ' <b title="Jít na konec výpisu">&gt&gt;|</b> ';
$txtKonecOdkaz = ' <a href="?l=' . $this->bloku . '" title="Jít na konec výpisu"><b>&gt;&gt;|</b></a> ';
$txtPredchoziNeOdkaz = ' <b title="Jít na předchozí stranu výpisu">&lt;</b> ';
$txtPredchoziOdkaz = ' <a href="?l=' . ($this->l - 1) . '" title="Jít na konec výpisu"><b>&lt;</b></a> ';
$txtNasledujNeOdkaz = ' <b title="Jít na následující stranu výpisu">&gt;</b> ';
$txtNasledujOdkaz = ' <a href="?l=' . ($this->l + 1) . '" title="Jít na následující stranu výpisu"><b>&gt;</b></a> ';

$naZacatek = ($this->l < 2 ? $txtZacatekNeOdkaz : $txtZacatexOdkaz);
$naKonec = ($this->l == $this->bloku ? $txtKonecNeOdkaz : $txtKonecOdkaz);
$predchozi = ($this->l < 2 ? $txtPredchoziNeOdkaz : $txtPredchoziOdkaz);
$nasledujici = ($this->l < $this->bloku ? $txtNasledujOdkaz : $txtNasledujNeOdkaz);

for ($i = $prvnizBloku; $i <= $poslednizBloku; $i++)
{
$pocatek = ($i * $this->rows) + 1 - $this->rows;
$konec = ($i * $this->rows);
/*
zobrazování aktuálně nejbližších (-4 a +4) stránek výpisu
je nutno ošetřit příliš malé a příliš velké hodnoty
*/
$blok .= ($a == 1 ? ' &middot; ' : '');
if ($this->l == $i)
{
$blok .= '<b title="Výpis inzerátů od: ' . $pocatek . ' do ' . $konec . '">' . $i . "</b> ";
}
else
{
$blok .= ' <a href="?l=' . $i . '" title="Výpis inzerátů od: ' . $pocatek . ' do ' . $konec . '">' . $i . '</a> ';
}
$a = 1;
}
$this->blok = $naZacatek . $predchozi . $blok . $nasledujici . $naKonec;
return $this->blok;
}
}
?>
HGD
Profil
tak já zkoušim upravit jeden script co sem někde vyhrabal, ale potřeboval bych poradit přesně co znamená:
$page_start = $page_start <= 0 ? 1 : $page_start;

THX
krteczek
Profil
$page_start = $page_start <= 0 ? 1 : $page_start;//jestli je $pagestart mensí než jedna nastav ji na 1 else nech puvodni hodnotu
HGD
Profil
tak bych potřeboval asi nějakou lepčejší radu, protože je asi chyba někde v tom cyklu :(
tady je ten script, chyba je v tom, že se nevypisuje aktuální stránka
    $report = mysql_result(mysql_query("SELECT COUNT(*) FROM clanky"), 0);

$page = strana();
$pages_total = ceil($report / $rows);
$page_start = floor($page - $ext / 2);
$page_start = $page_start <= 0 ? 1 : $page_start;
$page_end = ($page_start + $ext - 1);
$page_end = $page_end >= $pages_total ? $pages_total : $page_end;


if ($page > 1) {
$page_minus = $page-1;
$navlista= "<a href=$adresa&new=1>|<</a> <a href=$adresa&new=$page_minus><<</a>";
}

if ($page_start > 1) {
$navlista .= "<a href=$adresa&new=1>1</a> ... ";
}

for ($i = $page_start; $i <= $page_end; $i++) {
if ($i == $page) {
if ($pages_total > 1) {
$navlista .= " [".$i."] ";
}
}
else {
$navlista .= " <a href="".$adresa."&new=$i">$i</a> ";
}
}
if ($page_end < $pages_total) {
$navlista .= "... <a href=$adresa&new=$pages_total>$pages_total</a>";
}

if ($page < $pages_total) {
$page_plus = $page+1;
$navlista .= "<a href=$adresa&new=$page_plus>>></a> <a href=$adresa&new=$pages_total>>|</a>";}
HGD
Profil
tak sem se zase pustil do toho stránkování, páč to je potřba furt a neustále, a nemůžu na to nějak pořád přijít.
mam index.php

<?php
require_once "admin/conect.php";
require_once "engine/funkce.php";

$stranky = mysql_query("SELECT * FROM settings");
$nastaveni = mysql_fetch_assoc($stranky);

$rows = $nastaveni['pocet_na_stranu'];
$celkem = mysql_result(mysql_query("SELECT COUNT(*) FROM clanky"), 0);
$strana = $_GET['new']-1;

if ((!isset($_GET['new'])) or ($_GET['new']=='1')){
$od = 0;
}elseif ($_GET['new']>'1'){
$od = $strana*$rows;
}

$data=mysql_query("SELECT *,DATE_FORMAT(date, '%d. %m. %y') AS datum FROM clanky ORDER BY date DESC LIMIT ".($od).", ".$rows);
while($clanek=mysql_fetch_array($data)){
echo "
<p>
<div>
<div valign='top' id='cl_datum'>
<b>".$clanek['datum']."'&nbsp; -</b>
</div>
<div id='cl_obsah'>
".$clanek['nazev']."<br />".$clanek['obsah']."
</div>
</div>
";}
echo "<br />";
echo "<div align='center'>".nav()."</div>";
?>


a pak mam funkce.php

<?php
require_once "admin/conect.php"; // Spojení na databázi

$stranky = mysql_query("SELECT pocet_na_stranu FROM settings");
$nastaveni = mysql_fetch_assoc($stranky);
$rows = $nastaveni['pocet_na_stranu'];
$ext = $nastaveni['rozsah'];


function strana() {
if (isset($_GET['new'])){
if (!is_numeric($_GET['new']) || empty($_GET['new']) || $_GET['new'] < 0) {
$page = 1;
}else{
$page = $_GET['new'];
}
}else{
$page = 1;
}
return $page;
}
function nav(){

for ($i = 1; $i <= 5; $i++){
if ($i == strana()){
echo $i;
}
}
}


tak fakt newim, pomozte pls
Toto téma je uzamčeno. Odpověď nelze zaslat.