| Server IP : 210.245.233.93 / Your IP : 216.73.216.226 Web Server : Apache/2.2.15 (CentOS) System : Linux webserver2.onesolution.com.hk 2.6.32-754.35.1.el6.x86_64 #1 SMP Sat Nov 7 12:42:14 UTC 2020 x86_64 User : apache ( 48) PHP Version : 5.3.3 Disable Function : exec, shell_exec, system, passthru, popen, proc_open, pcntl_exec MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/(Del)gepgroup.hk/webadmin/ |
Upload File : |
<?php
function get_pagination(&$models, &$pagination, $model_class, $options, $target_page, $page=1, $url_params='', $numberOfShow=10, $numberOfAdjacent=5)
{
//-----------------------------------------
// Initialize reference type parameters
//-----------------------------------------
$models = array();
$pagination = "";
//-----------------------------------------
// Initialize
//-----------------------------------------
$page = abs(intval($page));
$adjacents = $numberOfAdjacent;
$limit = $numberOfShow;
//-----------------------------------------
// Setup page vars for display.
//-----------------------------------------
// Get count of pages
unset($options['limit'], $options['offset']);
try
{
$total_pages = call_user_func(array($model_class, 'count'), $options);
}
catch (ActiveRecord\DatabaseException $exception)
{
// Do a structure like following comments
/*
SELECT COUNT(*)
FROM (
... original select statment query ...
) tmp
*/
$conn = ActiveRecord\ConnectionManager::get_connection('production');
if (isset($options['from']))
$table = $options['from'];
else
{
$class = new ReflectionClass($model_class);
$table = $class->getStaticPropertyValue('table_name');
}
$builder = new ActiveRecord\SQLBuilder($conn, $table);
foreach ($options as $operation => $parameter)
{
if ($operation == 'conditions')
call_user_func_array(array($builder, 'where'), $parameter);
elseif ($operation == 'from')
; // ignore from
else
$builder->$operation($parameter);
}
$tmp_conditions = array('');
foreach ($builder->get_where_values() as $where_value)
$tmp_conditions[] = $where_value;
/*
echo $builder->to_s();
print_r($tmp_conditions);
exit;
*/
$tmp_options = array(
'from' => '( ' . $builder->to_s() . ' ) tmp',
'conditions' => $tmp_conditions,
);
$total_pages = call_user_func(array($model_class, 'count'), $tmp_options);
}
$lastpage = ceil($total_pages/$limit); //lastpage is = total pages / items per page, rounded up.
if ($page > $lastpage) $page = $lastpage;
$start = (max($page, 1) - 1) * $limit;
//-----------------------------------------
// Get models
//-----------------------------------------
$options['limit'] = $limit;
$options['offset'] = $start;
$models = call_user_func(array($model_class, 'all'), $options);
//-----------------------------------------
// Generate pagination div
//-----------------------------------------
$target_url_params = strlen($url_params) ? $url_params . '&' : '';
if ($page == 0) $page = 1; //if no page var is given, default to 1.
$prev = $page - 1; //previous page is page - 1
$next = $page + 1; //next page is page + 1
$lpm1 = $lastpage - 1; //last page minus 1
if ($lastpage > 1)
{
$pagination .= "<div class=\"pagination\">";
//previous button
if ($page > 1)
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$prev\">« previous</a>";
else
$pagination.= "<span class=\"disabled\">« previous</span>";
//pages
if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$counter\">$counter</a>";
}
}
elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some
{
//close to beginning; only hide later pages
if($page < 1 + ($adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$counter\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$lpm1\">$lpm1</a>";
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$lastpage\">$lastpage</a>";
}
//in middle; hide some front and some back
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=1\">1</a>";
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=2\">2</a>";
$pagination.= "...";
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$counter\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$lpm1\">$lpm1</a>";
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$lastpage\">$lastpage</a>";
}
//close to end; only hide early pages
else
{
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=1\">1</a>";
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=2\">2</a>";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$counter\">$counter</a>";
}
}
}
//next button
if ($page < $counter - 1)
$pagination.= "<a href=\"$targetpage?{$target_url_params}page=$next\">next »</a>";
else
$pagination.= "<span class=\"disabled\">next »</span>";
$pagination.= "</div>" . PHP_EOL;
}
//-----------------------------------------
// Return result
//-----------------------------------------
return true;
}
?>