Autor Zpráva
master2222
Profil
Ahoj, stáhnul jsem si script ze stránky Odkaz

Kód paginator.class.php
<?php

class Paginator{
	var $items_per_page;
	var $items_total;
	var $current_page;
	var $num_pages;
	var $mid_range;
	var $low;
	var $high;
	var $limit;
	var $return;
	var $default_ipp = 25;
	var $querystring;

	function Paginator()
	{
		$this->current_page = 1;
		$this->mid_range = 7;
		$this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
	}

	function paginate()
	{
		if($_GET['ipp'] == 'All')
		{
			$this->num_pages = ceil($this->items_total/$this->default_ipp);
			$this->items_per_page = $this->default_ipp;
		}
		else
		{
			if(!is_numeric($this->items_per_page) OR $this->items_per_page <= 0) $this->items_per_page = $this->default_ipp;
			$this->num_pages = ceil($this->items_total/$this->items_per_page);
		}
		$this->current_page = (int) $_GET['page']; // must be numeric > 0
		if($this->current_page < 1 Or !is_numeric($this->current_page)) $this->current_page = 1;
		if($this->current_page > $this->num_pages) $this->current_page = $this->num_pages;
		$prev_page = $this->current_page-1;
		$next_page = $this->current_page+1;

		if($_GET)
		{
			$args = explode("&",$_SERVER['QUERY_STRING']);
			foreach($args as $arg)
			{
				$keyval = explode("=",$arg);
				if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg;
			}
		}

		if($_POST)
		{
			foreach($_POST as $key=>$val)
			{
				if($key != "page" And $key != "ipp") $this->querystring .= "&$key=$val";
			}
		}

		if($this->num_pages > 10)
		{
			$this->return = ($this->current_page != 1 And $this->items_total >= 10) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$prev_page&ipp=$this->items_per_page$this->querystring\">&laquo; Previous</a> ":"<span class=\"inactive\" href=\"#\">&laquo; Previous</span> ";

			$this->start_range = $this->current_page - floor($this->mid_range/2);
			$this->end_range = $this->current_page + floor($this->mid_range/2);

			if($this->start_range <= 0)
			{
				$this->end_range += abs($this->start_range)+1;
				$this->start_range = 1;
			}
			if($this->end_range > $this->num_pages)
			{
				$this->start_range -= $this->end_range-$this->num_pages;
				$this->end_range = $this->num_pages;
			}
			$this->range = range($this->start_range,$this->end_range);

			for($i=1;$i<=$this->num_pages;$i++)
			{
				if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... ";
				// loop through all pages. if first, last, or in range, display
				if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range))
				{
					$this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
				}
				if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
			}
			$this->return .= (($this->current_page != $this->num_pages And $this->items_total >= 10) And ($_GET['page'] != 'All')) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$next_page&ipp=$this->items_per_page$this->querystring\">Next &raquo;</a>\n":"<span class=\"inactive\" href=\"#\">&raquo; Next</span>\n";
			$this->return .= ($_GET['page'] == 'All') ? "<a class=\"current\" style=\"margin-left:10px\" href=\"#\">All</a> \n":"<a class=\"paginate\" style=\"margin-left:10px\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
		}
		else
		{
			for($i=1;$i<=$this->num_pages;$i++)
			{
				$this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
			}
			$this->return .= "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
		}
		$this->low = ($this->current_page-1) * $this->items_per_page;
		$this->high = ($_GET['ipp'] == 'All') ? $this->items_total:($this->current_page * $this->items_per_page)-1;
		$this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page";
	}

	function display_items_per_page()
	{
		$items = '';
		$ipp_array = array(10,25,50,100,'All');
		foreach($ipp_array as $ipp_opt)	$items .= ($ipp_opt == $this->items_per_page) ? "<option selected value=\"$ipp_opt\">$ipp_opt</option>\n":"<option value=\"$ipp_opt\">$ipp_opt</option>\n";
		return "<span class=\"paginate\">Items per page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>\n";
	}

	function display_jump_menu()
	{
		for($i=1;$i<=$this->num_pages;$i++)
		{
			$option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n";
		}
		return "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page$this->querystring';return false\">$option</select>\n";
	}

	function display_pages()
	{
		return $this->return;
	}
}


a podle návodu dole ne té stránce připsal svůj kód

<?php 
require_once 'paginator.class.php';
require_once 'db.php';
?>
<?php

$num_rows = "select count (*) from articles"; 

$pages = new Paginator;
$pages->items_total = $num_rows[0];
$pages->mid_range = 9;
$pages->paginate(); 
echo $pages->display_pages();


$nazvy = MySQL_Query("SELECT * FROM articles WHERE ArticleTitle != '' ORDER BY ArticleID ASC $pages->limit");
while($nacti = MySQL_Fetch_Array($nazvy)){
echo "
<br /><br />\n<table width='500' border='1' cellpadding='4'> \n
<tr>
<td>
ID:
</td>
<td>
$nacti[ArticleID]
</td>
</tr>
\n
<tr>
<td>
Název:
</td>
<td>
$nacti[ArticleTitle]
</td>
</tr>\n
</table>\n
";
}

?>


Jenže na mě vyskočí toto

Notice: Undefined index: ipp in F:\EasyPHP\www\testy\paginator.class.php on line 25

Notice: Undefined index: page in F:\EasyPHP\www\testy\paginator.class.php on line 35

Notice: Undefined index: ipp in F:\EasyPHP\www\testy\paginator.class.php on line 100

Notice: Undefined index: ipp in F:\EasyPHP\www\testy\paginator.class.php on line 101
All
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in F:\EasyPHP\www\testy\index2.php on line 25


To All tam je odkaz a když na něj kliknu, tak se mi vypíše všechny záznamy bez žadné chyby. Budu rád za každé rady.
AM_
Profil
Členské proměnné nelze zapsat přímo do řetězce, takže ORDER BY ID ASC ".$pages->limit
FAQ sis přečetl, takže víš, proč dostáváš supplied argument is not valid.

Paginator není koukám napsaný nejlépe, před všechny $_GET v něm připiš @, takže místo $_GET['ipp'] tam bude @$_GET['ipp']

$num_rows = "select count (*) from articles"; 

$pages = new Paginator;
$pages->items_total = $num_rows[0];

nechybí ti tam query? :)
master2222
Profil
no já se v tom moc nevyznám, z php začínám, jak by měl ten příkaz vypadat?
AM_
Profil
O kus níž pokládáš dotaz správně (mysql_query), tak to stejně udělej i tady:
$num_rows = mysql_fetch_row(mysql_query("select count (*) from articles"));

$pages = new Paginator;
$pages->items_total = $num_rows[0];
Mike8748
Profil
AM_
před všechny $_GET v něm připiš @, takže místo $_GET['ipp'] tam bude @$_GET['ipp']
to je doufam vtip.

schovavat chybu misto toho aby si ji opravil? prijde ti to normalni?


edit: tak nic, LIMIT tam je. ta trida je fakt hrozne napsana
master2222
Profil
pořád mi to píše ty chby a když tám dám ty zavináče, tek to přestane fungovat celé
AM_
Profil
Mike8748
Uklidni se a dýchej ;)
Není jednodušší místo
if (isset($_GET['ipp']) AND ($_GET['ipp'] == 'All'))
psát
if (@$_GET['ipp'] == 'All')
?
To nepovažuji za schovávání chyby, jen potlačení výpisu tam, kde v logice programu k chybě nedošlo, jen PHP upozoní na pokus o čtení neexistující proměnné. Prospěje to i čitelnosti kódu.

Ale shodneme se na tom, že ta třída je napsaná hrozně, předtím jsem ji moc podrobně nezkoumal.

Můžeš místo ní zkusit tuhle funkci z mé vlastní kuchyně:
<?php
  function pager($pgurl, $page, $minpage, $maxpage, $around=3){
/*
pgurl: url to link with %PGID% replaced by page number (example: "list.php?page=%pgid%");
page:current page
minpage: number of first page
maxpage: number of last page
around: how many numbers to print out around current page
*/
    if (($minpage >= $maxpage) || ($page < $minpage) || ($page > $maxpage)) return ''; /*no pages or bad values*/
    $vrat = '<div class="pgr_main">';
     $vrat .= ($page > $minpage) ? "<a href=\"".str_replace("%PGID%", $page-1, $pgurl)."\">&lt;</a>&nbsp;" : "&lt;&nbsp;";
     $vrat .= ($page > $minpage) ? "<a href=\"".str_replace("%PGID%", $minpage, $pgurl)."\">$minpage</a>&nbsp;" : "<span class=\"pgr_active\">$minpage</span>&nbsp;";
     if ($page-$around > $minpage+1) $vrat .= "...&nbsp;";
     for ($x = max($page-$around, $minpage+1); $x <= min($page+$around, $maxpage-1); $x++){
       $vrat .= ($x == $page) ? "<span class=\"pgr_active\">$x</span>&nbsp;" : "<a href=\"".str_replace("%PGID%", $x, $pgurl)."\">$x</a>&nbsp;";
     }
     if ($page+$around < $maxpage-1) $vrat .= "...&nbsp;";
     $vrat .= ($page < $maxpage) ? "<a href=\"".str_replace("%PGID%", $maxpage, $pgurl)."\">$maxpage</a>&nbsp;" : "<span class=\"pgr_active\">$maxpage</span>&nbsp;";
     $vrat .= ($page < $maxpage) ? "<a href=\"".str_replace("%PGID%", $page+1, $pgurl)."\">&gt;</a>&nbsp;" : "&gt;&nbsp;";
    $vrat .= '</div>';
    return $vrat;
  }
?>
Styl:
.pgr_main{
  font-size:12px;
  color:#999 !important;
  text-align:center;
}
.pgr_main a, .pgr_main a:visited{
  color:#000 !important;
  text-decoration:none !important;
  font-weight:bold;
  font-size:12px !important;
}
.pgr_main a:hover, .pgr_main a:active{
  color:#2eb2bb !important;
  font-weight:bold;
  text-decoration:none !important;
}
.pgr_inact{
  font-weight:bold;
  color:#999;
}

Sice tu chybí takové srandičky jako výpis LIMITu do DB, to už si musíš ošetřit sám z proměnné, kterou dostaneš přes GET, ale mám odzkoušené, že to bez problému funguje. Funkce ti po předání příslušných parametrů vyplivne HTML kód stránkovače.
master2222
Profil
Moc díky, ale nenapsal bys mi, jak to ještě implentovat do index.php
AM_
Profil
V _GET ti přijde číslo stránky (když dáš url třeba list.php?page=%PGID%, bude to v $_GET['page']). pro výběr z databáze se používá LIMIT cislo_stranky*pocet_prispevku_na_stranku,pocet_prispevku_na_stranku
přičemž stránky čísluješ od nuly. A ten kód, co vyplivne ta funkce, někam do stránky vyechuješ.
master2222
Profil
úromin, že ješte ptravuji, ale nechces mi k tomu napsat jeste ukazkovej script, jak to pouzit, jako index.php, kde by si mi napsal jak to dál použít... tu funkci
blizz_boz
Profil
AM_

Členské proměnné nelze zapsat přímo do řetězce

daju sa zapisat priamo do retazca a nie len premenne ale aj metody a polia staci pouzit zlozene zatvorky napr.:

$string = "Retazec {$this->clenskaPremenna}";

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: