Autor Zpráva
unlucky
Profil
Na netu jsem našel opravdu pěkný pager, akorát se mi nějak nepovedlo udělat pro stránkování s mod rewrite typu

domena.cz/article/2/
zatim se zobrazuje akorat article.php?page=2

bude to asi funkce databind a preparelink

<div class="pre"><pre><?php

class Pager
{
/*
nasledujici atributy je potreba nastavit pred volanim databind
(vetsina je ale nepovinna)
*/
/** 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 z
* SelectCommandu
*/
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 <div> kolem pageru - hodnota text-align v atributu style,
* hodnota inherit znamena, ze div tento atribut
* vubec mit nebude
*/
public $PagerAlign = "inherit";
/** css trida pouzita pro vykresleni soucasne stranky */
public $CurrentPageCssClass;
/** priznak strankovani bez pouziti modu */
public $BasicPaging = 1;
/** nahrazovat entity na vystupu */
public $HtmlSpecialChars = 1;

/*
metody get_TargetedPage, get_ItemCount a get_PageCount ma smysl
pouzit az po zavolani DataBind, kdy jsou nastaveny prislusne atributy
*/
/** pozadovana stranka - precteno z parametru URL */
private $targetedPage = 1;
public function get_TargetedPage() { return $this->targetedPage; }
/** pocet radku nestrankovane vysledkove sady */
private $itemCount = 0;
public function get_ItemCount() { return $this->itemCount; }
/** celkovy pocet stranek = itemCount/PageSize */
private $pageCount = 0;
public function get_PageCount() { return $this->pageCount; }

/**
* Pole pouzitych modu strankovani
* @see AddPagerMode
* @see ClearPagerModes
*/
public $_modes;
/** vysledkova sada - ziskana v metode DataBind **/
private $ResultSet = NULL;
/**
* url prefix pro pager - zachovany vsechny atributy krome toho,
* ktery prislusi pageru
*/
private $prefix;
/**
* priznak, zda bude parametr pageru prvnim parametrem v url
*/
private $first = 0;

/**
* konstruktor - parametry jsou SQL prikaz na vyber vysledkove
* sady a parametr URL, ve kterem bude cislo aktualni stranky
* @param SelectCommand - SQL dotaz, ktery vraci vsechny zaznamy, ktere maji byt strankovany
* (tedy vsechny, ne jen jednu stranku)
* @param UrlParameterName - parametr, ktery bude cten z URL a zjisti se z nej, ktera stranka
* je prave vybrana (doporucene hodnoty napr. "strana", "page" apod.)
*/
public function __construct(
$SelectCommand,
$UrlParameterName)
{
$this->SelectCommand = $SelectCommand;
$this->UrlParameterName = $UrlParameterName;
$this->_modes = array();
}

/**
* Z konstruktoru predaneho SelectCommandu vytvori upraveny dotaz, ktery vraci pouze
* jednu stranku vysledkove sady. Dale vytvori CountCommand (pokud nebyl CountCommand
* nastaven explicitne), ktery je pouzit k spocitani vsech prvku, ktere vraci SelectCommand.
* Je vypocitan celkovy pocet stranek plne vysledkove sady (pageCount) a z databaze
* je ziskana pozadovana stranka vysledkove sady (ResultSet)
*/
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(*) 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)));
$this->itemCount = $c->Count;
//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;
//ziskani pozadovane stranky
$this->ResultSet =
mysql_query("$this->SelectCommand ".
" LIMIT $firstrow, $this->PageSize" );

//analyza url - zjisteni prefixu
$hrefprefix = $_SERVER['SCRIPT_NAME'];
$this->first=1;
foreach ( $_GET as $key=>$value)
{
if ($key == $this->UrlParameterName)
continue;
if ($this->first)
{
$hrefprefix .= "?".$key."=".$value;
$this->first = 0;
}
else
$hrefprefix .= "&".$key."=".$value;
}
$this->prefix = $hrefprefix;
}

/**
* Vypise ladici informace - predevsim pouzite SQL prikazy
*/
public function DebugPrint($htmlmode = 1)
{
$firstrow = ($this->targetedPage - 1) * $this->PageSize;


echo "Pager debug print: <br />";
echo "<ul>";
echo " <li>Targeted page: ".$this->targetedPage."</li>";
echo " <li>Page count: ".$this->pageCount."</li>";
echo " <li>Select command: ".$this->SelectCommand."</li>";
echo " <li>Select page command: ".$this->SelectCommand." LIMIT $firstrow, $this->PageSize </li>";
echo " <li>Count command: ".$this->CountCommand."</li>";
echo " <li>Url prefix: ".$this->prefix."</li>";
echo "</ul>";
}

/**
* Postupne vraci radky z vysledkove sady (jako objekty - fetch_object).
* Dava smysl az po zavolani DataBind()
* @return radek vysledkove sady jako objekt
*/
public function GetOne()
{
$obj = mysql_fetch_object($this->ResultSet);
if ($obj == null || !($this->HtmlSpecialChars))
return $obj;
else
{
foreach ($obj as $field => $value)
$obj->$field = htmlspecialchars($value);
return $obj;
}
}

/**
* vrati vsechny vysledky jako pole objektu
*
* @return array of object - vysledky
*/
public function GetAll()
{
$a = null;
$i = 0;
while ($obj = $this->GetOne())
{
$a[$i] = $obj;
$i++;
}
return $a;
}

/**
* Pomocna metoda pro vytvoreni odkazu na urcitou stranku.
* Dava smysl az po volani DataBind()
* @param page - stranka, na kterou bude odkazovano
* @param anchoringText - text odkazu
* @param cssClass - css trida odkazu
*/
public function prepareLink(
$page,
$anchoringText,
$cssClass)
{
$prefix = $this->prefix;
$s = "";
if ($page != $this->targetedPage)
{
if ($page == 1)
$h = $prefix;
else {
if ($this->first)
$h = $prefix."?".$this->UrlParameterName."=".$page;
else
$h = $prefix."&".$this->UrlParameterName."=".$page;
}
if ($cssClass != "" && $cssClass)
$css = " class=\"$cssClass\"" ;
else $css="";
return "<a href=\"$h\"$css>$anchoringText</a> ";
} else {
if ($this->CurrentPageCssClass &&
$this->CurrentPageCssClass != "")
{
$s.= "<span class=\"$this->CurrentPageCssClass\">";
$s.= $anchoringText;
$s.= "</span> ";
} else
if ($cssClass &&
$cssClass != "")
{
$s.= "<span class=\"$cssClass\">";
$s.= $anchoringText;
$s.= "</span> ";
}
else
$s.= $anchoringText." ";
return $s;
}
}

/**
* Vypise pager do tela stranky. Iteruje pres jednotlive mody
*/
public function DrawPager()
{
if ($this->BasicPaging)
{
//pokud uzivatel zadne mody nenastavil, nastavi se zakladni
//mody PrevNext, FirstLast a Default
$this->AddPagerMode(new FirstLastPagerMode);
$this->AddPagerMode(new PrevNextPagerMode);
$this->AddPagerMode(new DefaultPagerMode);
}

//vy
AM_
Profil
-chybí dotaz, nevíme, co po nás chceš
-tak dlouhým kódem se tu nikdo asi probírat nebude
-a to ještě spíš o to, že jsi ho nedal do a nechal ho v čisté nečitelné formě
unlucky
Profil
dotaz tam někdo dole je, nevejde se. DO tagu jsem dal, akorat při změně se vrátil zpátky

jenom chci vypsat linky pro mod rewrite adresy

nevim jak byste to udelali

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:

0