Данный код выводит все номера страниц из БД в виде ссылок, но как реализовать навигацию типа ( предыдущая [номер страницы] следующая ) , пока не разобрался. Если кому не сложно подскажите пожалуйста. PHP: <?php // имя этого файла mysql.php // require_once "config.php"; $idSQLConnection = mysql_connect($config['mysqlhost'], $config['mysqluser'], $config['mysqlpass']); if ( !$idSQLConnection ); $result = mysql_select_db( $config['mysqldb'], $idSQLConnection ); $order = isset($_REQUEST["order"]) ? $_REQUEST["order"] : "ID"; while ($result2 && $field2 = mysql_fetch_assoc($result2)){}; $result = mysql_query("SELECT films.* , sum(Size) as SSize FROM films LEFT JOIN files ON(films.ID=files.FilmID) WHERE hide=0 GROUP BY films.ID ORDER BY $order $dir"); echo "<table border='0'>" ." "; while ($field=mysql_fetch_assoc($result)) { echo " " ."<a href='{$config['siteurl']}/#film:{$field['ID']}:1:0'>".$field["ID"].""; }; ?> В index.php PHP: { template += "<?php require_once "mysql.php"; ?><span style='margin-left:3em;' id='backbox'><a href='#film:"+film.ID+":1:0'>Текущая страница:["+film.ID+"]</a></span>"; }
Код (Text): $currentPage = 0; //текущая страница $itemsPerPage = 30; //позиций на станицу $itemsAll = 0; // сколько всего позиций $currentPage = intval($_GET['page']); $result = mysql_query("SELECT count(*) itemsAll FROM films LEFT JOIN files ON(films.ID=files.FilmID) WHERE hide=0 GROUP BY films.ID"); $row = mysql_fetch_array($result); $itemsAll = $row['itemsAll']; $pages = ceil($itemsAll/$itemsPerPage); // считаем сколько всего страниц получилось if($currentPage >= $pages-1) $currentPage = $pages-1; $offset = $currentPage * $itemsPerPage; $query = "SELECT films.* , sum(Size) as SSize FROM films LEFT JOIN files ON(films.ID=files.FilmID) WHERE hide=0 GROUP BY films.ID ORDER BY $order $dir"; $query.= " limit {$offset},{$itemsPerPage}"; $result = mysql_query($query); while ($field=mysql_fetch_assoc($result)) { echo "\n<a href='{$config['siteurl']}/#film:{$field['ID']}:1:0'>".$field["ID"].""; //тут похоже тэг закрыть надо, но как есть отставлю } $prev = $currentPage - 1; if($prev<0) $prev = 0; $next = $currentPage+1; if($next>$pages-1)$next = $pages - 1; echo "<a href='?page={$prev}'>предыдущая</a> текущая: {$currentPage} <a href='?page={$prev}'>следующая</a>"; так вот как то....
Может, пригодится. Файл pager.php PHP: <?php /** * pager.php * Клас для генерации ссылок на другие страницы * @author Sandro */ class Pager{ /** * @var int Общее количество элементов. */ public $records_count=0; /** * @var int Количество элементов на страницу. */ public $numrows=10; private $page=0; /** * @var array Массив параметров из глоб. массива $_GET. */ public $get=array(); /** * Шаблоны к пунктам * @var array (a=>шаблон для ссылок, b=>шаблон для текущей страницы,points=>шаблон для многоточия) */ public $template=array( 'a'=>'<span><a href="%1$s">[%2$s]</a></span>', 'b'=>'<span><b>%s</b></span>', 'points'=>'<span>%s</span>' ); /** * Слова Назад и Вперед * @var array ('prev'=>назад, 'next'=>вперед) */ public $words=array('prev'=>'prev','next'=>'next','pages'=>'pages'); /** * @var array Все пункты для вывода. */ private $outArr=array(); private function GetPageLink($get){ $link=''; $first=true; foreach($get as $name=>$value){ if($first){ $link='?'; $first=false; }else{ $link.='&'; } $link.=$name.'='.$value; } return $link; } public function GetPageList(){ $this->outArr[]=sprintf('%s:', $this->words['pages']); $maxpage=ceil($this->records_count/$this->numrows); if($maxpage>1){ $page_from=$this->page-4; if($maxpage-$this->page<5){$page_from=$maxpage-10;} if($page_from<0){$page_from=0;} $page_to=$page_from+10; if($page_to>$maxpage){$page_to=$maxpage;} if($this->page!=0){ $this->get['page']=$this->page-1; $link = $this->GetPageLink($this->get); $this->outArr[]=sprintf($this->template['a'],$link,$this->words['prev']); } if($page_from>0){ $this->get['page']=0; $link=$this->GetPageLink($this->get); $this->outArr[]=sprintf($this->template['a'],$link,1); $this->outArr[]=sprintf($this->template['points'],'...'); } for($i = $page_from; $i<$page_to; $i++){ if($this->page==$i){ $this->outArr[]=sprintf($this->template['b'],$i+1); }else{ $this->get['page'] = $i; $link = $this->GetPageLink($this->get); $this->outArr[]=sprintf($this->template['a'],$link,$i+1); } } if(($page_to)< $maxpage){ $this->get['page']=$maxpage-1; $link=$this->GetPageLink($this->get); // if($page_to != $maxpage-1) { $this->outArr[]=sprintf($this->template['points'],'...'); } $this->outArr[]=sprintf($this->template['a'],$link,$maxpage); } if(($this->page+1)!=$maxpage){ $this->get['page']=$this->page+1; $link=$this->GetPageLink($this->get); $this->outArr[]=sprintf($this->template['a'],$link,$this->words['next']); } }else{ $this->outArr=array(); } return implode('',$this->outArr); } /** * @param int $page */ function __construct($page=-1){ if($page>=0){$this->page=$page;} $this->get=$_GET; } } ?> Использовать: PHP: <?php include_once 'pager.php'; $page=1;//текущая страница, можно взять, например, из $_GET массива: $page=(int)$_GET['page']; $pager=new Pager($page);//создаём объект $c=100;//всего записей (взять из БД через COUNT()) $pager->records_count=$c; $numrows=10;//количество записей на страницу $pager->numrows=$numrows; $pager->words=array('prev'=>'сюда','next'=>'туда','pages'=>'Страницы');//локализация, если нужна //вывод на странице, или лучше запомнить в переменную echo '<div class="pager">'.$pager->GetPageList().'</div>'; //выборка из базы, как выше предложено $offset = $page * $numrows; $query = "SELECT films.* , sum(Size) as SSize FROM films LEFT JOIN files ON(films.ID=files.FilmID) WHERE hide=0 GROUP BY films.ID ORDER BY $order $dir"; $query.= " LIMIT {$offset},{$numrows}"; ?>