Как правильно воспользоваться плагином Smarty {wa_pagination} для создания пагинации (постраничной навигации)

Добрый день

Подскажите пожалуйста как правильно воспользоваться плагином Smarty конструкцией {wa_pagination} для создания корректной пагинации (постраничной навигации) в приложении блог?

В данный момент в приложении Блог в шаблоне stream.html используется такая конструкция:

{if !$is_lazyloading}
</div>
<div class="pageLinkWrap">
<ul class="menu-h" id="stream-paging">
    {for $p=1 to $pages}
        <li{if $p eq $page} class="selected"{/if}><a class="pageLink" href="{if $p eq $page}#page_{$page}{else}?page={$p}{/if}">{$p}</a></li>
    {/for}
</ul>
</div>
{/if}

Эта конструкция сначала определяет, не включена ли ленивая подгрузка страниц, если нет, то запускает цикл перебора страниц по 10 записей и затем выводит постраничную навигацию - пагинацию: 1 2 3 4 5 6 7 и т.д.

Но в этой конструкции есть большой минус, если записей будет более 1000, то соответственно и в навигации будет более сотни цифр, как в данном случае возникло у меня, образовалась клавиатурная навигация...

Поискав решение из документации Webasyst нашел казалось бы то, что мне нужно:

{wa_pagination total=100 page=5 prev="«" next="»" nb=3 attrs=['class' => 'menu-h']}

С помощью этой конструкции:

Можно настроить и количество отображаемых цифр (total=);
И указать текущую страницу, на которой находится пользователь (page=);
Есть возможность указать количество отображения ссылок в начале и в конце (nb=);
Есть кнопки назад, вперед (prev="«" next="»");
И есть возможность применить стиль для пагинации (attrs=['class' => 'menu-h']);

В моем случае эта конструкция заработала после указания ID в аттрибуте:

attrs=['id' => 'stream-paging']

В шаблоне stream.html я заменил выше описанную конструкцию циклического вывода ссылок на такую:

{if !$is_lazyloading}
<div class="pageLinkWrap">
{wa_pagination total=100 page=1 prev="«" next="»" nb=5 attrs=['class' => 'menu-h', 'id' => 'stream-paging']}
</div>
{/if}

Но так как, я фактически не разбираюсь в Smarty, у меня возникли 2 проблемы:

1) Как применить переменную для total=100, чтобы он сам определял количество выводимых ссылок страниц (ведь на самом деле у меня не 100 страниц, и в дальнейшем количество страниц будет постоянно увеличиваться)...
Где-то на форуме видел такое (total=$pages_count) - но для $pages_count нужно ведь сначала определить количество страниц...

2) Как определить текущую страницу, на которой находится пользователь в данный момент (page=), чтобы задать ей другой стиль, скажем class="selected". После указания единицы (page=1), разумеется на какой-бы странице не находился бы пользователь, будет высвечиваться всегда первая...

Заранее благодарю за помощь

4 ответа

  • 2
    Михаил Ушенин Webasyst 24 ноября 2015 02:47 #
    1. total=count($pages)

      Вам ведь доступна переменная $pages, содержащая список страниц? Используйте PHP-функцию count(), чтобы узнать количество элементов массива.

    2. page=$wa->get('page', 1)
  • 1
    GENIY9 24 ноября 2015 07:19 #

    Спасибо большое Михаил!

    Второй вопрос сработал так:

    total=$pages
    {if !$is_lazyloading}
    <div class="pageLinkWrap">
    {wa_pagination total=$pages page=$wa->get('page',1) prev="«" next="»" nb=5 attrs=['class' => 'menu-h', 'id' => 'stream-paging']}
    </div>
    {/if}

  • 1
    Distrupt 8 декабря 2019 19:56 #

    Как добавить класс к элементами в <ul>...<li>,<a>?

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите