Advertisement:
NameCheap

Author Topic: Fixing the pagination.  (Read 2513 times)

Offline ExcalibursZone

  • Jr. Member
  • **
  • Posts: 143
Fixing the pagination.
« on: September 28, 2006, 01:39:19 AM »
The pagination is lacking somewhat for topics that have quite a few pages. I see that there are next/previous links but that's to go to the next/previous TOPIC. I believe there should be a next/previous page in addition to the list of pages themselves. It makes perfect sense and I'm confused as to why nobody's mentioned this missing necessity.

Thanks.

Offline jacortina

  • Jr. Member
  • **
  • Posts: 229
Re: Fixing the pagination.
« Reply #1 on: September 28, 2006, 01:20:25 PM »
I added 1st, Next, Prev, Last to mine.

It's in function constructPageIndex in Sources/Subs.php (1.1 RC2/RC3).

Find:
Code: [Select]
{
// If they didn't enter an odd value, pretend they did.
$PageContiguous = (int) ($modSettings['compactTopicPagesContiguous'] - ($modSettings['compactTopicPagesContiguous'] % 2)) / 2;

// Show the first page. (>1< ... 6 7 [8] 9 10 ... 15)
if ($start > $num_per_page * $PageContiguous)
$pageindex = sprintf($base_link, 0, '1');
else
$pageindex = '';

// Show the ... after the first page.  (1 >...< 6 7 [8] 9 10 ... 15)
if ($start > $num_per_page * ($PageContiguous + 1))
$pageindex .= '<b> ... </b>';

// Show the pages before the current one. (1 ... >6 7< [8] 9 10 ... 15)
for ($nCont = $PageContiguous; $nCont >= 1; $nCont--)
if ($start >= $num_per_page * $nCont)
{
$tmpStart = $start - $num_per_page * $nCont;
$pageindex.= sprintf($base_link, $tmpStart, $tmpStart / $num_per_page + 1);
}

// Show the current page. (1 ... 6 7 >[8]< 9 10 ... 15)
if (!$start_invalid)
$pageindex .= '[<b>' . ($start / $num_per_page + 1) . '</b>] ';
else
$pageindex .= sprintf($base_link, $start, $start / $num_per_page + 1);

// Show the pages after the current one... (1 ... 6 7 [8] >9 10< ... 15)
$tmpMaxPages = (int) (($max_value - 1) / $num_per_page) * $num_per_page;
for ($nCont = 1; $nCont <= $PageContiguous; $nCont++)
if ($start + $num_per_page * $nCont <= $tmpMaxPages)
{
$tmpStart = $start + $num_per_page * $nCont;
$pageindex .= sprintf($base_link, $tmpStart, $tmpStart / $num_per_page + 1);
}

// Show the '...' part near the end. (1 ... 6 7 [8] 9 10 >...< 15)
if ($start + $num_per_page * ($PageContiguous + 1) < $tmpMaxPages)
$pageindex .= '<b> ... </b>';

// Show the last number in the list. (1 ... 6 7 [8] 9 10 ... >15<)
if ($start + $num_per_page * $PageContiguous < $tmpMaxPages)
$pageindex .= sprintf($base_link, $tmpMaxPages, $tmpMaxPages / $num_per_page + 1);
}

Replace with:
Code: [Select]
{
// If they didn't enter an odd value, pretend they did.
$PageContiguous = (int) ($modSettings['compactTopicPagesContiguous'] - ($modSettings['compactTopicPagesContiguous'] % 2)) / 2;

//////////////////////
$pageindex = '';

// Show '1st'
if ($start > 0)
$pageindex .= sprintf($base_link, 0, '<u>1st</u>');

// Show 'Prev'
if ($start > $num_per_page)
$pageindex .= sprintf($base_link, $start - $num_per_page, ' <u>Prev</u>');
//
// be sure the 2 "$pageindex =" in following 'if' construct are changed to "$pageindex .="
//
//////////////////////

// Show the first page. (>1< ... 6 7 [8] 9 10 ... 15)
if ($start > $num_per_page * $PageContiguous)
$pageindex .= sprintf($base_link, 0, '1');
else
$pageindex .= '';

// Show the ... after the first page.  (1 >...< 6 7 [8] 9 10 ... 15)
if ($start > $num_per_page * ($PageContiguous + 1))
$pageindex .= '<b> ... </b>';

// Show the pages before the current one. (1 ... >6 7< [8] 9 10 ... 15)
for ($nCont = $PageContiguous; $nCont >= 1; $nCont--)
if ($start >= $num_per_page * $nCont)
{
$tmpStart = $start - $num_per_page * $nCont;
$pageindex.= sprintf($base_link, $tmpStart, $tmpStart / $num_per_page + 1);
}

// Show the current page. (1 ... 6 7 >[8]< 9 10 ... 15)
if (!$start_invalid)
$pageindex .= '[<b>' . ($start / $num_per_page + 1) . '</b>] ';
else
$pageindex .= sprintf($base_link, $start, $start / $num_per_page + 1);

// Show the pages after the current one... (1 ... 6 7 [8] >9 10< ... 15)
$tmpMaxPages = (int) (($max_value - 1) / $num_per_page) * $num_per_page;
for ($nCont = 1; $nCont <= $PageContiguous; $nCont++)
if ($start + $num_per_page * $nCont <= $tmpMaxPages)
{
$tmpStart = $start + $num_per_page * $nCont;
$pageindex .= sprintf($base_link, $tmpStart, $tmpStart / $num_per_page + 1);
}

// Show the '...' part near the end. (1 ... 6 7 [8] 9 10 >...< 15)
if ($start + $num_per_page * ($PageContiguous + 1) < $tmpMaxPages)
$pageindex .= '<b> ... </b>';

// Show the last number in the list. (1 ... 6 7 [8] 9 10 ... >15<)
if ($start + $num_per_page * $PageContiguous < $tmpMaxPages)
$pageindex .= sprintf($base_link, $tmpMaxPages, $tmpMaxPages / $num_per_page + 1);

//////////////////////
// Show 'Next'.
$display_page = ($start + $num_per_page) > $max_value ? $max_value : ($start + $num_per_page);
if ($display_page < $tmpMaxPages)
$pageindex .= sprintf($base_link, $display_page, '<u>Next</u>');

// Show 'Last'.
if ($display_page <= $tmpMaxPages)
$pageindex .= sprintf($base_link, $tmpMaxPages, ' <u>Last</u>');
//////////////////////
}

Offline ExcalibursZone

  • Jr. Member
  • **
  • Posts: 143
Re: Fixing the pagination.
« Reply #2 on: September 29, 2006, 02:34:51 AM »
Only time will tell if this works for the posting ;) I saw that it worked for the member list. Thanks for the code! :D

Offline jacortina

  • Jr. Member
  • **
  • Posts: 229
Re: Fixing the pagination.
« Reply #3 on: September 29, 2006, 09:08:06 AM »
Well, they call the same routine for generating the $pageindex. Same with the PM inbox/outbox, topic lists, etc. I, too, disliked the lack of the links and trying to target that thin '1' digit to go to first page seemed downright silly.