[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: скрипт постраничной навигации, проблема привязки к
semjaza
Проблемка такая-задался мыслью переделать свой сайт...в том числе и навигацию постраничную...так как она была написана не мной и случайно получилось прикрутить её на сайт...сейчас стараюсь осмыслить каждую строчку php кода на сайте...чтобы не возникало кучи "###кода"...
Смысл такой -есть страница статей,которые выводятся в цикле 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>     Читать далее &#8594;</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 = '&lsaquo;',
/*string*/ $nextChar = '&rsaquo;',
/*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>";


Понимаю что вроде как изобретаю велосипед,но хочу сделать универсальный пагинатор....понятный для себя...

помогите начинающему программисту)))
Быстрый ответ:

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