1 (01.01.2008 11:42 отредактировано Freeman)

Тема: functions.php paginate()

Изменил функцию paginate() из сборки PunBB.ru 1.2.15. Главной целью было добавить ссылки "Предыдущая" и "Следующая" для листания страниц - удобнейшая, на мой взгляд, вещь. Заодно баг исправил.

Результат:

  • [li]Добавлены ссылки на предыдущую и следующую страницы многостраничных тем/форумов, работает совместно со "Все"[/li][li]Исправлена последовательность инициализации переменных, из-за которой в режиме "Все" номер последней страницы не выводился ссылкой[/li]

Думается, не только мне полезно будет.

function paginate($num_pages, $cur_page, $link_to)
{
/// MOD VIEW ALL PAGES IN ONE BEGIN    
    global $lang_common;

    $active_all = true;

/// MOD VIEW ALL PAGES IN ONE END

    $pages = array();
    $link_to_all = false;

    // If $cur_page > $num_pages, we show link to all pages
    if ($cur_page > $num_pages)
    {
        $active_all = false;
        $link_to_all = true;
        $cur_page--;
    }

    // If $cur_page == -1, we link to all pages (used in viewforum.php)
    if ($cur_page == -1)
    {
        $cur_page = 1;
        $link_to_all = true;
    }

    if ($num_pages <= 1)
        $pages = array('<strong>1</strong>');
    else
    {
        if (!$link_to_all && $cur_page > 1)
            $pages[] = '<a href="'.$link_to.'&amp;p='.($cur_page-1).'"><strong>&laquo;</strong></a>';

        if ($cur_page > 3)
        {
            $pages[] = '<a href="'.$link_to.'&amp;p=1">1</a>';
            if ($cur_page != 4)
                $pages[] = '&hellip;';
        }

        // Don't ask me how the following works. It just does, OK? :-)
        for ($current = $cur_page - 2, $stop = $cur_page + 3; $current < $stop; ++$current)
        {
            if ($current < 1 || $current > $num_pages)
                continue;
            else if ($current != $cur_page || $link_to_all)
                $pages[] = '<a href="'.$link_to.'&amp;p='.$current.'">'.$current.'</a>';
            else
                $pages[] = '<strong>'.$current.'</strong>';
        }

        if ($cur_page <= ($num_pages-3))
        {
            if ($cur_page != ($num_pages-3))
                $pages[] = '&hellip;';

            $pages[] = '<a href="'.$link_to.'&amp;p='.$num_pages.'">'.$num_pages.'</a>';
        }
/// MOD VIEW ALL PAGES IN ONE BEGIN            
        if (!$active_all) $pages[] = $lang_common['All'];
            else $pages[] = '<a href='.$link_to.'&amp;action=all>'.$lang_common['All'].'</a>';
/// MOD VIEW ALL PAGES IN ONE END         

        if (!$link_to_all && $cur_page < $num_pages)
            $pages[] = '<a href="'.$link_to.'&amp;p='.($cur_page+1).'"><strong>&raquo;</strong></a>';
    }

    return implode('&nbsp;', $pages);
}

Сайт Freeman

Поделиться

2

Re: functions.php paginate()

Спасибо, полезная вещь!

Сайт hcs

Поделиться