[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: постраничная навигация
xhugo
$connect=mysql_connect($sqlhost, $sqluser, $sqlpass); 
#$s=mysql_query("SET NAMES `CP1251`") or die (mysql_error());
$db=mysql_select_db($sqldb);
#предположим что мы уже имеем соединение с базой данных $db;
$query = "SELECT count(id) FROM zomplog_news ORDER BY id DESC";
#Запрос в базу данных, узнаем сколько всего есть записей.
$sql = mysql_query($query, $connect);
#fetch
$count = mysql_fetch_row($sql);
$count = $count[0];
#количество записей - $count
$page = abs($_REQUEST['page']);
# возмем модуль числа $_REQUEST['page']; так как мало ли, плохой человек пошел -1 или -100500.
$OnPage = 5; # на одну страницу будем выводить по 5 записей
#количество страниц, округляем до большего.

$pages = ceil( $count / $OnPage );
#считаем знач дальше.
if ($page > $pages){
$page = 1;
}
# выводить записи мы будем по LIMIT`у.
#синтаксис: LIMIT with,count

$with = $OnPage * ($page - 1);

$query = "SELECT * FROM zomplog_news ORDER BY id DESC LIMIT $with,$OnPage";
$sql = mysql_query($query,$connect);
while ( $news = mysql_fetch_assoc($sql)){
echo "Title: ".$news['title']
.
"<br /> Link: <A href='view.php?id=".$news['id']."'>Link</a>"
. "<br /> Text: ".$news['text'];
}
for ($p = 0; $p <= $pages-1; $p++){
echo "<a href='?page=$p'><B> $p </B></a>";
}
?>


получаю:
Notice: Undefined index: page in *\news\sos.php on line 19

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in
0 1 2 3 4



в чем проблема?



Спустя 14 минут, 43 секунды (24.02.2011 - 15:01) T1grOK написал(а):
Ну, а теперь посмотрите, что у вас будет, если из ГЕТ номер страницы = 0;
И еще, вы наверное не учли ситуации когда в ГЕТе отсутствует ключ page.
И вообще зачем изобретать велосипед?! На этом форуме подобные темы обсуждаются через день.

Спустя 23 минуты, 28 секунд (24.02.2011 - 15:24) xhugo написал(а):
тогда можете подсказать рабочий пример? без всяких дополнительных классов.

Спустя 17 минут, 40 секунд (24.02.2011 - 15:42) T1grOK написал(а):
А чем вам классы не угодили??? Вот, простой пагинатор:

class navigator{

private $pagename; //имя страницы

private $totalpages; //всего страниц

private $recordsperpage; //записей на страницу
private $maxpagesshown; //количество видимых страниц

private $currentstartpage; //начальная видимая страница
private $currentendpage; //конечная видимая страница
private $currentpage; //текущая страница

private $spannextinactive;
private $spanpreviousinactive;
private $firstinactivespan;
private $lastinactivespan;

private $strfirst = "|<";
private $strnext = "Next";
private $strprevious = "Prev";
private $strlast = ">|";

private $firstparamname = "page";

private $divwrappername = "navigator";

private $inactivespanname = "inactive"; //неактивные ссылки

public function __construct($pagename, $totalpages, $currentpage, $maxpagesshown = 4){
$this->pagename =$pagename;
$this->totalpages = $totalpages;
$this->maxpagesshown = $maxpagesshown;
$this->currentpage = $currentpage;

$this->checkCorrectPages($currentpage, $totalpages) or die($this->errorstring);
$this->createInactiveSpans();
$this->calculateCurrentStartPage();
$this->calculateCurrentEndPage();
}

private function checkCorrectPages($currentpage, $totalpages){
$error = true;
if ($currentpage > $totalpages){
$this->errorstring = "Ошибка - текущая страница не может быть больше общего количества страниц.";
$error = false;
}
return $error;
}

private function createInactiveSpans(){
$this->spannextinactive = '<span class="'.$this->inactivespanname.'">'.$this->strnext.'</span>';
$this->lastinactivespan = '<span class="'.$this->inactivespanname.'">'.$this->strlast.'</span>';
$this->spanpreviousinactive = '<span class="'.$this->inactivespanname.'">'.$this->strprevious.'</span>';
$this->firstinactivespan = '<span class="'.$this->inactivespanname.'">'.$this->strfirst.'</span>';
}

private function calculateCurrentStartPage(){
$this->currentstartpage = $this->currentpage - $this->maxpagesshown;
if ($this->currentstartpage < 1){
$this->currentstartpage = 1;
}
}


private function calculateCurrentEndPage(){
$this->currentendpage = $this->currentpage + $this->maxpagesshown;;
if ($this->currentendpage > $this->totalpages){
$this->currentendpage = $this->totalpages;
}
}


private function createLink ($offset, $strdisplay){
$strtemp = "<a href=\"$this->pagename&$this->firstparamname=";
$strtemp .= $offset;
$strtemp .= "$this->params\">$strdisplay</a>\n";
return $strtemp;
}

public function getNavigator(){
$strnavigator = "<div class=\"$this->divwrappername\">\n";
//Первая страница
if ($this->currentpage == 1){
$strnavigator .= $this->firstinactivespan;
}else{
$strnavigator .= $this->createLink(1, $this->strfirst);
}
//Предыдущая страница
if ($this->currentpage == 1){
$strnavigator .= $this->spanpreviousinactive;
}else{
$strnavigator .= $this->createLink($this->currentpage - 1, $this->strprevious);
}
//Вывод основных страниц
for ($x = $this->currentstartpage; $x < $this->currentendpage + 1; $x++){
if ($x == $this->currentpage){
$strnavigator .= "<span class=\"$this->inactivespanname\">";
$strnavigator .= $x;
$strnavigator .= "</span>\n";
}else{
$strnavigator .= $this->createLink($x, $x);
}
}

//Следующая страница
if ($this->currentpage == $this->totalpages){
$strnavigator .= $this->spannextinactive;
}else{
$strnavigator .= $this->createLink($this->currentpage + 1, $this->strnext);
}
//Последняя страница
if ($this->currentpage == $this->totalpages){
$strnavigator .= $this->lastinactivespan;
}else{
$strnavigator .= $this->createLink($this->totalpages, $this->strlast);
}

$strnavigator .= "</div>\n";

return $strnavigator;
}

}


Спустя 53 минуты, 44 секунды (24.02.2011 - 16:36) xhugo написал(а):
а пример? как его тут использовать?

Спустя 44 минуты, 6 секунд (24.02.2011 - 17:20) T1grOK написал(а):

$naginator = new navigator("имя страницы","общее кол-во страниц", "текущая страница", "количество видимых страниц");
echo $navigator->build();

Обратите внимание на свойство $firstparamname - оно содержит имя переменной из которой вы будете извлекать текущую страницу(в даном случае page($_GET['page']));
Естественно пагинатору нужно дать входные параметры(как вы и делали, выбрали количество записей, потом разделили.....).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.