Смысл такой -есть страница статей,которые выводятся в цикле foreach...
<?foreach($statii as $item):?>
<div class="krug"><?=$item['views'];?></div>
<div class="zag_stat"><a id="zagolovok" href="index.php?category_id=statii&t=<?=$item['title_url'];?>"><span><?=$item['title'];?></span></a><br /> <!--заголовок статьи-->
<span class="author_stat">Автор статьи: <span class="author_cvet"><?=$item['author'];?></span></span> <!--автор статьи-->
<span class="data_stat">Дата размещения: <span class="data_cvet"><?=$item['date'];?>/<?=$item['time'];?></span></span><!--дата размещения статьи-->
</div><br />
<div class="krug2"><img src="userfiles/news/<?=$item['img'];?>"/></div><!--картинка к статье-->
<div class="obram"><img src="images/obram_pravo.png"/></div><!--элемент оформления-->
<p class="text_stat"><?=str_size($item['text']),'...';?><a id="dalee" href="index.php?category_id=statii&t=<?=$item['title_url'];?>"><span> Читать далее →</span></a></p><!--текст статьи,обработанный функцией обрезки символов-->
<br /><br />
<div class="line"></div><!--элемент оформления-->
<?endforeach;}?>
нашёл целый класс в инете для пагинатора...
<?php
/**
* @author Artem aka Moskitos <arty-komarov@yandex.ru>
*/
class SimPageNav
{
protected $id;
protected $startChar;
protected $prevChar;
protected $nextChar;
protected $endChar;
/**
* Конструктор
* @param string $id - атрибут ID элемента <UL> - постраничной навигации
* @param string $startChar - текст ссылки "В начало"
* @param string $prevChar - текст ссылки "Назад"
* @param string $nextChar - текст ссылки "Вперед"
* @param string $endChar - текст ссылки "В конец"
*/
public function __construct( /*string*/ $id = 'pagination',
/*string*/ $startChar = '«',
/*string*/ $prevChar = '‹',
/*string*/ $nextChar = '›',
/*string*/ $endChar = '»' )
{
$this->id = $id;
$this->startChar = $startChar;
$this->prevChar = $prevChar;
$this->nextChar = $nextChar;
$this->endChar = $endChar;
}
/**
* Получить HTML - код постраничной навигации
* @param int $all - Полное кол-во элементов (Материалов в категории)
* @param int $limit - Кол-во элементов на странице
* @param int $start - Текущее смещение элементов
* @param int $linkLimit - Количество ссылок в состоянии
* @param string $varName - Имя GET - переменной которая будет использоваться в постр. навигации.
* @return string
*/
public function getLinks( /*int*/ $all, /*int*/ $limit, /*int*/ $start, $linkLimit = 10, $varName = 'start' )
{
// Нихрена не делаем, если лимит больше или равен кол-ву всех элементов вообще,
// И если лимит = 0. 0 - будет означать "не разбивать н астраницы".
if ( $limit >= $all || $limit == 0 ) {
return NULL;
}
$pages = 0; // кол-во страниц в пагинации
$needChunk = 0; // индекс нужного в данный момент чанка
$queryVars = array(); // ассоц. массив полученный из строки запроса
$pagesArr = array(); // пременная для промежуточного хранения массива навигации
$htmlOut = ''; // HTML - код постраничной навигации
$link = NULL; // формируемая ссылка
// В этом блоке мы просто строим ссылку - такую же, как та, по которой
// пришли на данную страницу, но извлекаем из неё нашу GET-переменную:
parse_str($_SERVER['QUERY_STRING'], $queryVars ); // &$queryVars
// Убиваем нашу GET-переменную
if( isset($queryVars[$varName]) ) {
unset( $queryVars[$varName] );
}
// Формируем такую же ссылку, ведущую на эту же страницу:
$link = $_SERVER['PHP_SELF'].'?'.http_build_query( $queryVars );
//--------------------------------------------------------
$pages = ceil( $all / $limit ); // кол-во страниц
// Заполняем массив: ключ - это номер страницы, значение - это смещение для БД.
// Нумерация здесь нужна с единицы. А смещение с шагом = кол-ву материалов на странице.
for( $i = 0; $i < $pages; $i++) {
$pagesArr[$i+1] = $i * $limit;
}
// Теперь что бы на странице отображать нужное кол-во ссылок
// дробим массив со значениями [№ страницы] => "смещение" на
// Части (чанки)
$allPages = array_chunk($pagesArr, $linkLimit, true);
// Получаем индекс чанка в котором находится нужное смещение.
// И далее только из него сформируем список ссылок:
$needChunk = $this->searchPage( $allPages, $start );
// Формируем ссылки "В начало", "передыдущая" ------------------------------------------------
if ( $start > 1 ) {
$htmlOut .= '<li><a href="'.$link.'&'.$varName.'=0">'.$this->startChar.'</a></li>'.
'<li><a href="'.$link.'&'.$varName.'='.($start - $limit).'">'.$this->prevChar.'</a></li>';
} else {
$htmlOut .= '<li><span>'.$this->startChar.'</span></li>'.
'<li><span>'.$this->prevChar.'</span></li>';
}
// Собсно выводим ссылки из нужного чанка
foreach( $allPages[$needChunk] AS $pageNum => $ofset ) {
// Делаем текущую страницу не активной:
if( $ofset == $start ) {
$htmlOut .= '<li><span>'. $pageNum .'</span></li>';
continue;
}
$htmlOut .= '<li><a href="'.$link.'&'.$varName.'='. $ofset .'">'. $pageNum . '</a></li>';
}
// Формируем ссылки "следующая", "в конец" ------------------------------------------------
if ( ($all - $limit) > $start) {
$htmlOut .= '<li><a href="' . $link . '&' . $varName . '=' . ( $start + $limit) . '">' . $this->nextChar . '</a></li>'.
'<li><a href="' . $link . '&' . $varName . '=' . array_pop( array_pop($allPages) ) . '">' . $this->endChar . '</a></li>';
} else {
$htmlOut .= '<li><span>' . $this->nextChar . '</span></li>'.
'<li><span>' . $this->endChar . '</span></li>';
}
return '<ul id="'.$this->id.'">' . $htmlOut . '<ul>';
}
/**
* Ищет в каком чанке находится сраница со смещением $needPage
* @param array $pagesList массив чанков (массивов страниц разбитый по лимиту ссылок на странице)
* @param int $needPage - смещение
* @return number Ключ чанка в котором есть нужная страница
*/
protected function searchPage( array $pagesList, /*int*/$needPage )
{
foreach( $pagesList AS $chunk => $pages ){
if( in_array($needPage, $pages) ){
return $chunk;
}
}
return 0;
}
}
Автор при использовании предлагает вставить код на страницу вида
//Пользоваться очень просто:
$start = isset($_GET['start']) ? intval($_GET['start']) : 0;
$pageNav = new SimPageNav();
echo $pageNav->getLinks( 110, 7, $start, 5, 'start' );
Это всё безусловно работает,НО
не могу понять как его связать с содержимым страницы?
понятно что через URL, но хоть убейте ...
у меня url формируется в рекурсивной функции...вот кусочек
echo "<ul>";
//перебираем в цикле массив и выводим на экран
for($i = 0; $i < count($arr[$parent_id]);$i++) {
echo "<li><a href=\"?category_id={$arr[$parent_id][$i]['title_url']}&parent_id={$parent_id}\""
.($_GET['category_id'] == $arr[$parent_id][$i]['title_url'] ? ' class="menu-active"':'')
.">{$arr[$parent_id][$i]['title']}</a>";
//рекурсия - проверяем нет ли дочерних категорий
view_cat($arr,$arr[$parent_id][$i]['title_url']);
echo "</li>";
}
echo "</ul>";
Понимаю что вроде как изобретаю велосипед,но хочу сделать универсальный пагинатор....понятный для себя...
помогите начинающему программисту)))