Autor Zpráva
Tomikkk
Profil *
Zdravím všechny, z trupikoveho blogu jsem si natahl jeho strankovani, jelikoz mam stranky, kde se to strankuje do nekonecna, rad bych se zeptal vice znaleho cloveka v PHP nez jsem ja, jestli by se nepodival na tento script a neporadil mi kde presne pridat nejakou funkci, aby se mi strankoval vyber napr. po 10 strankach. Jelikoz mam nekolik tisic vypisu z DB, nechci mit 100 stranek primo na webu. Poradite mi prosim nekde? Prikladam kod:


<?
class CleverPager
{
// SQL prikaz pro vyber dat pred strankovanim,
// nesmi pouzivat LIMIT
public $SelectCommand;
// SQL prikaz na vypocitani poctu zaznamu lze nechat
// nenastaveny, v tom pripade se vygeneruje v metode DataBind
public $CountCommand;
// Pocet zaznamu na strance
public $PageSize = 10;
// Parametr URL, ze ktereho se cte cislo akt. stranky
public $UrlParameterName;
// atribut ID, ktery bude mit div kolem pageru
public $PagerID = "PagerId";
// atribut Class, ktery bude mit div kolem pageru
public $PagerCssClass = "PagerClass";
// zarovnani - hodnota text-align v atributu style,
// hodnota inherit znamena, ze div tento atribut
// vubec mit nebude
public $PagerAlign = "inherit";
// pocet cisel okolnich stranek, ktere se zobrazi
// hodnota -1 znamena, ze se zobrazi vsechny
// hodnota 0 znamena zadne
public $PageLinksDisplayed = -1;
// priznak zobrazovani tlacitek predchozi a nasledujici stranky
public $ShowPrevNext = 1;
// priznak zobrazovani tlacitek prvni a posledni stranky
public $ShowFirstLast = 1;

// text odkazu na prvni stranku
// public $FirstPage = "&raquo;&raquo;&lt;&lt;";
public $FirstPage = "<img src="img/pag-start.gif" style="margin: 2px; border: 0px; vertical-align: middle;" alt="" />";
// text odkazu na posledni stranku
public $LastPage = "<img src="img/pag-end.gif" style="margin: 2px; border: 0px; vertical-align: middle;" alt=""/>";
// text odkazu na predchozi stranku
public $PrevPage = "<img src="img/pag-prev.gif" style="margin: 2px; border: 0px; vertical-align: middle;" alt=""/>";
// text odkazu na nasledujici stranku
public $NextPage = "<img src="img/pag-next.gif" style="margin: 2px; border: 0px; vertical-align: middle;" alt=""/>";

// css tridy, ktere budou mit jednotlive odkazy na stranky
public $LinkCssClass;
public $FirstCssClass;
public $LastCssClass;
public $NextCssClass;
public $PrevCssClass;
public $CurrentPageCssClass;

// aktualni stranka
private $_targetedPage = 2;
// pocet stranek
private $_pageCount = 0;
// Zde bude vysledkova sada po zavolani DataBind
private $ResultSet = NULL;
// priznak prvniho parametru, nedulezite
private $first = 0;

// konstruktor - parametry jsou SQL prikaz na vyber vysledkove
// sady a parametr URL, ve kterem bude cislo aktualni stranky
public function __construct(
$SelectCommand,
$UrlParameterName)
{
$this->SelectCommand = $SelectCommand;
$this->UrlParameterName = $UrlParameterName;
}

// Spocita pocet zaznamu a z atributu _pageCount,
// PageSize a _targetedPage vybere pozadovanou stranku
public function DataBind()
{
// priprava prikazu pro spocitani zaznamu,
// pokud nebyl zadan zvenci
if (!$this->CountCommand || $this->CountCommand == "")
{
$this->CountCommand = preg_replace(
'@SELECT (.*) FROM@',
'SELECT COUNT($1) AS Count FROM',
$this->SelectCommand);
}
//zjisteni cisla aktualni stranky
if (isset($_GET[$this->UrlParameterName]))
$this->_targetedPage =
(int)($_GET[$this->UrlParameterName]);
else
$this->_targetedPage = 1;
if ($this->_targetedPage == 0)
$this->_targetedPage = 1;
//zjisteni poctu zaznamu
$c = (mysql_fetch_object(
mysql_query($this->CountCommand)));
//vypocet poctu stranek
$this->_pageCount =
(int) (($c->Count + $this->PageSize - 1) / $this->PageSize);
if ($this->_targetedPage > $this->_pageCount)
$this->_targetedPage = 1;
//vypocet parametru pro LIMIT
$firstrow =
($this->_targetedPage - 1) * $this->PageSize;
$this->ResultSet =
mysql_query("$this->SelectCommand ".
" LIMIT $firstrow, $this->PageSize" );
}

// postupne vraci radky vysledkove sady,
// po zavolani DataBind
public function GetOne()
{
return mysql_fetch_object($this->ResultSet);
}

//pomocna metoda pro vytvoreni odkazu
private function prepareLink(
$prefix,
$page,
$anchoringText,
$cssClass)
{
if ($page != $this->_targetedPage)
{
if ($page == 1)
$h = $prefix;
else {
if ($this->first)
//$h = $prefix."?".$this->UrlParameterName."=".$page;
$h = "/".$page."/";
else
//$h = $prefix."&".$this->UrlParameterName."=".$page;
$h = "/".$page."/";
}
if ($cssClass != "" && $cssClass)
$css = " class="$cssClass"" ;
else $css="";
return "<a href="$h"$css>$anchoringText</a> ";
} else {
if ($this->CurrentPageCssClass &&
$this->CurrentPageCssClass != "")
{
echo "<span class="$this->CurrentPageCssClass">";
echo $anchoringText;
echo "</span> ";
}
else
echo $anchoringText." ";
}
}

// vypise pager do tela stranky
public function DrawPager()
{
//analyza url
//$hrefprefix = $_SERVER['SCRIPT_NAME'];
$this->first=1;
foreach ( $_GET as $key=>$value) {
if ($key == $this->UrlParameterName)
continue;
if ($this->first)
{
// $hrefprefix .= "?".$key."=".$value;
$hrefprefix = "/".$value."/";
$this->first = 0;
}
else
// $hrefprefix .= "&".$key."=".$value;
$hrefprefix = "/1/";
if ($_GET["a"]=="a") {
echo "$key";
}

}

//vykresleni div tagu kolem pageru s odpovidajicimi atributy
if ($this->PagerID && $this->PagerID != "")
$id = "id="$this->PagerID"";
else $id ="";
if ($this->PagerCssClass && $this->PagerCssClass != "")
$class = "class="$this->PagerCssClass"";
else $class = "";
if ($this->PagerAlign != "inherit")
$align = "style="text-align: $this->PagerAlign"";
else
$align ="";
echo "<span $id $class $align >";

//prvni stranka
if ($this->ShowFirstLast)
{
echo $this->prepareLink(
$hrefprefix,
1,
$this->FirstPage,
$this->FirstCssClass);
}

//predchozi stranka
if ($this->ShowPrevNext)
{
$p = max($this->_targetedPage - 1, 1);
echo $this->prepareLink(
$hrefprefix,
$p,
$this->PrevPage,
$this->PrevCssClass);
}

//stranky mezi bez omezeni
if ($this->_pageCount <= $this->PageLinksDisplayed ||
$this->PageLinksDisplayed == -1)
{

for ($p = 1; $p <= $this->_pageCount; $p++)

echo $this->prepareLink(
$hrefprefix,
$p,
$p,
$this->LinkCssClass);
}
else //stranky mezi
{
$pagesBefore = (int)min(
$this->PageLinksDisplayed / 2,
$this->_targetedPage - 1);
$pagesAfter = (int)min(
$this->PageLinksDisplayed - $pagesBefore - 1,
$this->_pageCount - $this->_targetedPage);
if ($pagesAfter + $pagesBefore + 1 != $this->PageLinksDisplayed)
$pagesBefore = $this->PageLinksDisplayed - 1 - $pagesAfter;
for ($p = $this->_targetedPage - $pagesBefore;
$p <= $this->_targetedPage + $pagesAfter;
$p++)
echo $this->prepareLink($hrefprefix, $p, $p, $this->LinkCssClass);
}

//nasledujici stranka
if ($this->ShowPrevNext)
{
$p = min($this->_targetedPage + 1, $this->_pageCount);
echo $this->prepareLink(
$hrefprefix,
$p,
$this->NextPage,
$this->NextCssClass);
}

//posledni stranka
if ($this->ShowFirstLast)
XXyyXX
Profil *
Myslím, že stránkování jde udělat i jednodušším způsobem, bez tříd....
Tomikkk
Profil *
XXyyXX

no ja PHP moc nehovim, mam podle jeho scriptu udelany uz i vypis z DB, takze jsem spis potreboval zjistit jak udelat vypisovani treba po 10 strankach ... Trupikovi jsem psal a uz mi psal tak pred mesicem, ze kdyz bude mit cas, ze se na to podiva :-( Proto jsem pozadal o pomoc tady
Tomikkk
Profil *
Aha, vsiml jsem si, ze cely kod se zde nevesel, zde je odkaz na jeho blog odkud jsem script stahl

[url=Zdravím všechny, z trupikoveho blogu jsem si natahl jeho strankovani, jelikoz mam stranky, kde se to strankuje do nekonecna, rad bych se zeptal vice znaleho cloveka v PHP nez jsem ja, jestli by se nepodival na tento script a neporadil mi kde presne pridat nejakou funkci, aby se mi strankoval vyber napr. po 10 strankach. Jelikoz mam nekolik tisic vypisu z DB, nechci mit 100 stranek primo na webu. Poradite mi prosim nekde? Kod je přímo na jeho blogu:

http://trupik.aspweb.cz/programovani/php/strankovani-v-php-a-mysql-poh odlne-a-univerzalne.aspx
]Zdravím všechny, z trupikoveho blogu jsem si natahl jeho strankovani, jelikoz mam stranky, kde se to strankuje do nekonecna, rad bych se zeptal vice znaleho cloveka v PHP nez jsem ja, jestli by se nepodival na tento script a neporadil mi kde presne pridat nejakou funkci, aby se mi strankoval vyber napr. po 10 strankach. Jelikoz mam nekolik tisic vypisu z DB, nechci mit 100 stranek primo na webu. Poradite mi prosim nekde? Kod je přímo na jeho blogu:

http://trupik.aspweb.cz/programovani/php/strankovani-v-php-a-mysql-poh odlne-a-univerzalne.aspx[/url]
Trupik
Profil *
Uz je nova verze, ktera tyhle veci umi.
Odkaz viz vyse..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: