Есть класс, который выводит алфавитный указатель имён (структура таблицы id_name, name, description)
Только переключатель страниц пишет что там не 3 страницы а 4. Знающие люди взгляните на код и укажите что не так...
PHP:
скопировать код в буфер обмена
<? $db_host = 'localhost'; $db_user = 'root'; $db_pass = ''; $db_base = 'base'; mysql_query("set collation_connection ='cp1251_general_ci'"); define("_TAB_NAME","name");// Таблица для навигации define("_FIELD_NAME","name");// поле для навигации define("_ID_NAME","id_name");// Ключевое поле для идентификации define("_ORDER_BY","id_name"); // Поле для сортировки define("_NUM_ON_PAGE",5 ); // Сколько строчек списка выводить на страницу ?> <? class alphaPages{ // Задаём алфавит var $ALPHA = '<center>A B C D E F G H I J K L M N O P Q R S T U V W X Y Z</center> <center>А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Щ Ш Э Ю Я</center> <center>0 1 2 3 4 5 6 7 8 9</center>'; // Инициализация объекта. Установка начальных условий списка function alphaPages(){ $this->sql = "SELECT * FROM "._TAB_NAME; } // Метод выводит "карточку" человека function profile(){ $this->sql .= " WHERE "._ID_NAME."=".$_GET['id']; $ret='<table>'; foreach($r as $field=>$value){ $ret .= "<tr><td>".$field."</td><td>".$value."</td></tr>"; } $ret.='</table>'; return $ret; } // метод строит панель алфавитной навигации function makeAlphaNavBar(){ $sql = 'select DISTINCT (LEFT(UPPER('._FIELD_NAME.'),1)) as letter from '._TAB_NAME; $this->ALPHA = str_replace($r['letter'],'<a href="?letter='.$r['letter'].'">'.$r['letter'].'</a>',$this->ALPHA); } return $this->ALPHA; } // метод строит панель постраничной навигации function makePageNavBar(){ $page = $_GET['page']; if(empty($page) or $page < 1 ) $page = 1; if($page > $total) $page = $total; // Проверяем нужны ли стрелки назад if ($page != 1) $pervpage = '<A href="?letter='.$_GET['letter'].'&page=1" class="pag">Начало</A> <A href="?letter='.$_GET['letter'].'&page='. ($page -1) .'" class="pag">Назад</A> '; // Проверяем нужны ли стрелки вперед if ($page != $total) $nextpage = ' <A href="?letter='.$_GET['letter'].'&page='. ($page + 1) .'" class="pag">Вперёд</A> <A href="?letter='.$_GET['letter'].'&page=' .$total. '" class="pag">Конец</A>'; // Находим две ближайшие станицы с обоих краев, если они есть if($page - 3 > 0)$page3left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 3) .'" class="pag">'. ($page - 3) .'</a> '; if($page - 2 > 0)$page2left = ' <a href="?letter='.$_GET['letter'].'&page='. ($page - 2) .'" class="pag">'. ($page - 2) .'</a> '; if($page - 1 > 0) $page1left = '<a href="?letter='.$_GET['letter'].'&page='. ($page - 1) .'" class="pag">'. ($page - 1) .'</a> '; if($page + 3 <= $total) $page3right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 3) .'" class="pag">'. ($page + 3) .'</a>'; if($page + 2 <= $total) $page2right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 2) .'" class="pag">'. ($page + 2) .'</a>'; if($page + 1 <= $total) $page1right = ' <a href="?letter='.$_GET['letter'].'&page='. ($page + 1) .'" class="pag">'. ($page + 1) .'</a>'; // Вывод пагинатора $ret = $pervpage.$page3left.$page2left.$page1left.'<FONT class="pags">'.$page.'</FONT>'.$page1right.$page2right.$page3right.$nextpage; return $ret; } ######### Набор фильтрующих список методов ############## // Метод фильтрует список по букве function setLetter(){ //SELECT DISTINCT artist FROM `table` WHERE `artist` LIKE 'X%'; $this->sql .= " WHERE "._FIELD_NAME." like '".$_GET['letter']."%'"; } // Метод ставит ограничения по странице function setPage(){ $this->setOrder(); if(empty($_GET['page'])) $page=0; else $page = $_GET['page']; $this->sql .= " LIMIT ".$page*_NUM_ON_PAGE.",".(_NUM_ON_PAGE); } // метод задаёт порядок сортировки function setOrder(){ $this->sql .= " ORDER BY "._ORDER_BY; } ######################################################### // метод строит итоговый список function getList(){ $ret .= '<a href="?id='.$r[_ID_NAME].'">'.$r[_FIELD_NAME].'</a><br>'; } return $ret; } } // the end of class ?> <? $nav = new alphaPages(); // Выводим алфавит $navBar = $nav->makeAlphaNavBar(); // Ставим букву if(!empty($_GET['letter'])) $nav->setLetter(); // Вычисляем сколько страниц. Обязательно после фильтрации по букве $pageBar = $nav->makePageNavBar(); // Что будем показывать if(!empty($_GET['id'])) $out = $nav->profile(); else{ $nav->setPage(); $out = $nav->getList(); } // показываем ?>
и на странице где меньше 5 имён надо чтоб показывало что это страница 1
|