Проблемка такая-задался мыслью переделать свой сайт www.юдиз.рф...в том числе и навигацию постраничную...так как она была написана не мной и случайно получилось прикрутить её на сайт...сейчас стараюсь осмыслить каждую строчку php кода на сайте...чтобы не возникало кучи "###кода"... Смысл такой -есть страница статей,которые выводятся в цикле foreach... Код (Text): <?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;}?> нашёл целый класс в инете для пагинатора... Код (Text): <?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; } } Автор при использовании предлагает вставить код на страницу вида Код (Text): //Пользоваться очень просто: $start = isset($_GET['start']) ? intval($_GET['start']) : 0; $pageNav = new SimPageNav(); echo $pageNav->getLinks( 110, 7, $start, 5, 'start' ); Это всё безусловно работает,НО не могу понять как его связать с содержимым страницы? понятно что через URL, но хоть убейте ... у меня url формируется в рекурсивной функции...вот кусочек Код (Text): 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>"; Понимаю что вроде как изобретаю велосипед,но хочу сделать универсальный пагинатор....понятный для себя... помогите начинающему программисту)))
Ты же часть ссылок выводишь это надо смотреть на запрос к базе что бы конкретней сказать. Товарищ а как вы относитесь к работе за идею? Мне тут надо для себя 2 не сложные страницы нарисовать, но нет дизайнера. Со своей стороны помогу постичь волшебный и загадочный мир программирования.