I want to show up paging data like Displaying 1 – 5 of 16 . I am trying to do this as below
JavaScript
x
$nb_elem_per_page = 3;
$page = isset($_GET['pg'])?intval($_GET['pg']):0;
$data = $aawp_table['products'] ;
$number_of_pages = ceil(count($data)/$nb_elem_per_page);
$offset = ($page - 1) * $nb_elem_per_page;
Displaying <?php echo $offset .' - '.$nb_elem_per_page .' of ' . count($data); ?>
But I am not getting proper result for this
Advertisement
Answer
You could have a negative value of $offset
if ($page - 1)
.
You can juste remove it and it will work.
Code :
JavaScript
$nb_data = 20;
$nb_elem_per_page = 3;
$page = isset($_GET['pg']) ? intval($_GET['pg']) : 0;
$number_of_pages = ceil($nb_data / $nb_elem_per_page);
$offset = $page * $nb_elem_per_page;
echo $offset .' - ' . $nb_elem_per_page .' of ' . $nb_data;
- If
pg
is not defined, the result will be0 - 3 of 20
- If
pg
is 0, the result will be0 - 3 of 20
- If
pg
is 1 , the result will be3 - 3 of 20
- And so on…
Note that you should test if $page
is lower than $number_of_pages
to avoid to go to far, or lower than 0.
EDIT A more complete code :
JavaScript
function run_pager($pg = null)
{
$nb_data = 20;
$nb_elem_per_page = 3;
$number_of_pages = ceil($nb_data / $nb_elem_per_page);
$page = isset($pg) ? intval($pg) : 0;
if ($page < 0) $page = 0;
if ($page >= $number_of_pages) $page = $number_of_pages - 1;
$offset = $page * $nb_elem_per_page;
$end = $offset + $nb_elem_per_page;
if ($end > $nb_data) $end = $nb_data;
return ($offset + 1) .' - ' . ($end) .' of ' . $nb_data;
}
for ($i=0;$i<10;$i++) {
echo "i=$i : " . run_pager($i) . PHP_EOL;
}
Output :
JavaScript
i=0 : 1 - 3 of 20
i=1 : 4 - 6 of 20
i=2 : 7 - 9 of 20
i=3 : 10 - 12 of 20
i=4 : 13 - 15 of 20
i=5 : 16 - 18 of 20
i=6 : 19 - 20 of 20