Простой пагинатор

/**
     * Возвращает массив для пагинатора
     * @param int $page
     * @param int $pagesAfter
     * @return array
     *
     * @example
     * foreach ($this->pages as $page => $text) {
     *     echo 'page ? ' class="active"' : '') . '>' . $text . '';
     * }
     */
    public static function getPages($page, $pagesAfter) {

        $pages = array();

        if ($page >= 3) {
            $pages[0] = '1';
        }
        if ($page == 4 ) {
            $pages[1] = '2';
        }
        if ($page > 4 ) {
            $pg = floor((2+($page-2))/2);
            $pages[$pg]='...';
        }

        $lowerPage = $page - 2;
        $lowerPage = $lowerPage < 0 ? 0 : $lowerPage;
        $upperPage = $page + 2;
        $upperPage = $upperPage > $page+$pagesAfter ? $page+$pagesAfter : $upperPage;

        for ($p = $lowerPage; $p <= $upperPage; $p++) {
            $pages[$p] = $p+1;
        }

        if ($upperPage < $page + $pagesAfter) {
            $leftPages = $page + $pagesAfter - $upperPage;
            if ($leftPages > 1) {
                $pages[floor($leftPages/2 + $page + 2)] = '...';
            }
            $pages[$page + $pagesAfter] = $page + $pagesAfter + 1;
        }

        return $pages;
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.