Функция постраничного вывода – пагинатор
Копался тут в своих библиотеках и нарыл свою первую функцию!!! Функция постраничного разбиения – нынче в народе зовется “пагинатор” (paginator). Написал я сее творение аж в 2002 году, когда учил php еще по манам php3. Далее этот код перекачивал в мою CMS и стал там использоваться направо и налево, естественно мутируя под ЧПУ и требования сеошников – отслеживать чтобы при постраничном выводе не было дублей страниц.
Функция возвращает строку вида:
<< < 1 2 3 4 5 > >>
, где:
- << – переход к самому первому блоку
- < – переход к предыдущему блоку
- > – переход к следующему блоку
- >> – переход к последнему блоку
на входе имеет 4 параметра:
- integer $total – общее количество страниц ( ceil(общее кол-во. записей / кол-во. записей на странице) )
- integer $currentpage – номер текущей страницы ( отсчет идет от 0 )
- string $link – какую ссылку вставлять в пагинаторе (пример: page.php?id=3&page = )
- integer $block – по сколько страниц делать в блоке, в данном примере 5
Далее собственно сам код, он не претендует на оскара…
/** * Создает постраничное разбиение * @author PHPLancer 2002 * * @param integer $total * @param integer $currentpage * @param string $link * @param integer $block * @return string */ function pageListing($total, $currentpage, $link, $block) { $j = 0; $s = ""; $array = array(); for($i = 0, $max = ceil($total/$block); $i <= $max; $i++) { $array[$i] = $j; $j += $block; } for($i = 0, $max = sizeof($array); $i < $max; $i++) if($currentpage >= $array[$i] &amp;amp;&amp;amp; $currentpage < $array[$i]+$block) break; if($i > 0) $s .= "<a href=\"".$link.$array[0]."\"> << </a> <a href=\"".$link.($array[$i-1]+$block-1)."\" > < </a> \n"; $z = (($array[$i]+$block) > $total) ? $total : $array[$i+1]; for($j=$array[$i];$j<$z;$j++) $s .= ($currentpage==$j) ? "<span>".($j+1)." </span> " : "<a href=\"".$link.$j."\">".($j+1)."</a> \n"; $max = sizeof($array); if($i<($max-2)) $s .= "<a href=\"".$link.$array[$i+1]."\" > > </a> <a href=\"".$link.$array[$max-2]."\" > >> </a> \n"; return $s; }
Хорошая статья – за минуту становится все понятно, конечно код плоховат особенно эти циклы с кучей ненужных действий, например sizeof как бы быстрее count, но у вас в цикле каждый раз вымеряется sizeof это не то что не профессианально, это просто не понимание основ!! Наверно в 2000 так было нормально,))