function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = true) { $seperator = ' '; if ($total_pages == 1 || !$num_items) // ilość elementów = 1? { if ($start_item % $per_page == 0) { return '<b><span class="pagination">1</span></b>'; // 1 strona bez linka } else { return ($add_prevnext_text? '<a href="'. $base_url . $amp . 'start=0"><span class="pagination"><<</span></a>' . $seperator:'') . '<b><span class="pagination">1</span></b>'; // 1 strona z linkiem do poczatku (<<)- zaczeto nierówno z iloscia postow na strone (1 user ma 10/str, inny ma 15 i daje linka temu pierwszemu) } } $page_string = ($add_prevnext_text && $on_page!=1 || $start_item % $per_page != 0) ? '<a href="'. $base_url . $amp . 'start=' . max(0,($on_page-2)*$per_page) . '"><span class="pagination"><<</span></a>'.$seperator : ''; // poczatkowy << (o ile jestesmy dalej niz na 1 stronie) if ($total_pages>10) // wiecej niz 10 stron { for($i = 1; $i <= 3; $i++) // poczatkowe 3 strony wyswietlane zawsze { $page_string .= ($i == $on_page) ? '<b><span class="pagination">' . $i . '</span></b>' : '<a href="' . $base_url . $amp . "start=" . (($i - 1) * $per_page) . '"><span class="pagination">' . $i . '</span></a>'; $page_string .= $seperator; } if ($start1>4) { $page_string .= '...' . $seperator; // jesli 2 czesc sie zaczyna dalej niz na 4 stronie } if ($start2>=$end1) // jesli 2 czesc w ogole istnieje for($i = $start1; $i <= $end1; $i++) { $page_string .= ($i == $on_page) ? '<b><span class="pagination">' . $i . '</span></b>' : '<a href="' . $base_url . $amp . "start=" . (($i - 1) * $per_page) . '"><span class="pagination">' . $i . '</span></a>'; $page_string .= $seperator; } if ($start2-$end1>1) // jesli 2 czesc jest przynajmniej o 1 odlegla od nastepnej { $page_string .= '...' . $seperator; } for($i = $start2; $i <= $end2; $i++) // srodkowa czesc { $page_string .= ($i == $on_page) ? '<b><span class="pagination">' . $i . '</span></b>' : '<a href="' . $base_url . $amp . "start=" . (($i - 1) * $per_page) . '"><span class="pagination">' . $i . '</span></a>'; $page_string .= $seperator; } if ($start3-$end2>1) // jesli 4 czesc jest przynajmniej o 1 odlegla od nastepnej { $page_string .= '...' . $seperator; } for($i = $start3; $i <= $end3; $i++) // 4 czesc { $page_string .= ($i == $on_page) ? '<b><span class="pagination">' . $i . '</span></b>' : '<a href="' . $base_url . $amp . "start=" . (($i - 1) * $per_page) . '"><span class="pagination">' . $i . '</span></a>'; $page_string .= $seperator; } if ($end2<$total_pages-3) // jesli ostatnia czesc jest konczy sie na wiecej niz 3 strony od konca { $page_string .= '...' . $seperator; } for($i = $total_pages-2; $i <= $total_pages; $i++) // koncowe strony { $page_string .= ($i == $on_page) ? '<b><span class="pagination">' . $i . '</span></b>' : '<a href="' . $base_url . $amp . "start=" . (($i - 1) * $per_page) . '"><span class="pagination">' . $i . '</span></a>'; if ($i < $total_pages) { $page_string .= $seperator; } } } else // mniej niz 10 sttron - wyswietlamy cala liste { for($i = 1; $i <= $total_pages; $i++) { $page_string .= ($i == $on_page) ? '<b><span class="pagination">' . $i . '</span></b>' : '<a href="' . $base_url . $amp . "start=" . (($i - 1) * $per_page) . '"><span class="pagination">' . $i . '</span></a>'; if ($i < $total_pages) { $page_string .= $seperator; } } } // dodanie koncowej >>, jesli nie jestesmy na ostatniej stronie $page_string .= ($on_page == $total_pages || !$add_prevnext_text) ?'': $seperator.'<a href="'. $base_url . $amp . 'start='.$on_page*$per_page . '"><span class="pagination">>></span></a>'; return '<br><br><br><center>'.$page_string.'</center>'; }
Problem jest tego typu, że jeśli w linku wpiszemy sobie np. index.php?start=1000000 to link wchodzi. Próbowałem na początku dodać taki warunek:
if ( $start_item > $total_pagaes ) { $start_item = $total_pages; }
Ale z tym nic się nie dzieje, nadal bez problemu można pisać głupoty w linku. Jakaś rada, jak to "ugryźć" ?