Как в цикле вывести определённое количество ссылок постраничной навигации

Рейтинг: 0Ответов: 2Опубликовано: 28.01.2015
<table id="pagination">
    <tr>
        <td>
            <?php if(count($this->pages) != 1) { ?>
                <?php for ($i = 0; $i <count($this->pages); $i++) { ?>
                    <a href="<?=$this->pages[$i]?>"><?=($i + 1)?></a>&nbsp
                <?php }} ?>
        </td>
    </tr>
</table>

У меня выводятся все ссылки подряд, а мне нужно хотя бы чтоб вывелось 5 шт и открытая страница выделялась

1  2  3  4  5  6  7  8  9  <b>10</b>  11 12 13 14

Нужно вывести от активной по 2 шт по бокам и желательно ссылка на первую и последую страницу, то есть всего 7 ссылок а остальные скрыть. Как это лучше сделать?

Ответы

▲ 1

Предлагаю Вам воспользоваться готовым плагином валидации: jquery.simplePagination.js

Плагин имеет достаточный перечень настроек.

А что касается отображаемых данных и как их запрашивать, то сделайте подгрузку данных при помощь ajax запроса.

Обновление

HTML, в который вставится пагинация:

<div id="light-pagination" class="pagination"></div>

Подключаем query.simplePagination.js. Инициализация:

$( document ).ready(function() {
    $(function () {
        $('#light-pagination').pagination({
            items: arPagen.allElement,
            itemsOnPage: arPagen.countElementPage,
            cssStyle: 'light-theme',
            currentPage: arPagen.currentPage,
            hrefTextPrefix: '?pagen=',
            prevText: 'Пред.',
            nextText: 'След.'
        });
    });
});
▲ 1

В двух словах. В твоем цикле(for) возьми диапазон от ($выбраннаяСтраница - 5) до ($выбраннаяСтраница + 5).

Внутри цикла поставь проверку, если $i отрицательное или больше общего кол-ва страниц то continue. Таким образом ты отрисуешь нужные тебе страницы, за минусом не существующих, но не более 11(1 страница это выбранная, 10 диапазон).

Ну и если $i == номер выбранной страницы, то обрамление в bold.

Пример моего кода, правда тяжелый для чтения, но логика по идее должна быть тебе понятной.

    if ($_pages["total_pages"] > 1){
        if ($_pages["selected_page"] > 1){
            $_pages["html_pages"] .= " <a href='".$array["module_link"]."?_page".$array["page_prefix"]."=1&_per_page=".$array["per_page"].$array["html_link"]."'>1</a> ";       
            $_pages["html_pages"] .= " <a href='".$array["module_link"]."?_page".$array["page_prefix"]."=".($_pages["selected_page"]-1)."&_per_page=".$array["per_page"].$array["html_link"]."'>&laquo;</a> ";
            $_pages["html_pages"] .= "<strong>...</strong>";
        }
        for ($i=$_pages["selected_page"]-15;$i<=$_pages["selected_page"]+15;$i++){
            if ($i<=0 || $i>$_pages["total_pages"]) continue;

            if ($i == $_pages["selected_page"]) 
                $_pages["html_pages"] .=    " <span> $i </span>";           
            else
                $_pages["html_pages"] .= " <a href='".$array["module_link"]."?_page".$array["page_prefix"]."=".$i."&_per_page=".$array["per_page"].$array["html_link"]."'>$i</a> ";

        }
        if ($_pages["selected_page"] < $_pages["total_pages"]){
            $_pages["html_pages"] .= "<strong>...</strong>";
            $_pages["html_pages"] .= " <a href='".$array["module_link"]."?_page".$array["page_prefix"]."=".($_pages["selected_page"]+1)."&_per_page=".$array["per_page"].$array["html_link"]."'>&raquo;</a> ";
            $_pages["html_pages"] .= " <a href='".$array["module_link"]."?_page".$array["page_prefix"]."=".$_pages["total_pages"]."&_per_page=".$array["per_page"].$array["html_link"]."'>".$_pages["total_pages"]."</a> ";
        }
    }