Files
zurawik.pl/core/plugins/Smarty/function.paginationOO.php
2026-05-15 18:33:51 +02:00

145 lines
3.9 KiB
PHP

<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: function.pagination.php
* Type: function
* Name: link
* Purpose: zwraca linki do pozostalych stron z danego zakresu
* Dependencies: function.url.php
* -------------------------------------------------------------
*/
/**
*
* @param <type> $params
* @param TemplateMaster $smarty
* @return <type>
*/
function smarty_function_pagination($params, &$smarty) {
$globalParams = $smarty->_tpl_vars['param'];
if( isset($globalParams[ROUTER_SORT_LABEL]) )
{
$params[ROUTER_SORT_LABEL] = $globalParams[ROUTER_SORT_LABEL];
}
if( isset($globalParams[ROUTER_DIR_LABEL]) )
{
$params[ROUTER_DIR_LABEL] = $globalParams[ROUTER_DIR_LABEL];
}
if( !isset($params['next']) ) {
$params['next'] = PAGE_NEXT_LABEL;
}
if( !isset($params['prev']) ) {
$params['prev'] = PAGE_PREV_LABEL;
}
// Jeżeli nie jest podany label to wstawiam current
if( !isset($params['label']) ) {
$params['label'] = 'current';
}
if( isset($params['count']) ) {
$count = $params['count'];
} else {
throw new Exception( 'Sortowanie: Wymagana ilość elementów - count!');
}
if( isset($params['ajax']) ){
$ajax = $params['ajax'];
} else {
$ajax = null;
}
if( isset($params['max']) ){
$max = $params['max'];
} else {
$max = 2;
}
if( isset($params['number']) ){
$number = $params['number'];
} else {
$number = 0;
}
$pageArray = $smarty->_tpl_vars['_page'];
if(is_array($pageArray)){
for ($i = 0; $i < $number+1; $i++) {
$pageArray[$i] = isset($pageArray[$i])? $pageArray[$i] : 1;
}
} else {
$pageArray = array();
for ($i = 0; $i < $number+1; $i++) {
$pageArray[$i] = 1;
}
}
// Wybór strony w tabeli o bierzącym numerku.
$page = $pageArray[$number];
$page = max(1, $page);
if ($count <= 1)
return '';
$pageArray[$number] = max(1, $page - 1);
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret = '<a href="' . pagination_generate_url($params, $smarty) . '" rel="nofollow"' . ($page > 1 ? '' : ' class="disabled" onclick="return false;"') . '>' . (isset($params['prev']) ? $params['prev'] : '<<') . ($page > 1 ? '</a>' : '') . '&nbsp;';
if ($page - $max > 1) {
$pageArray[$number] = 1;
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '" rel="nofollow">1</a> ... ';
}
for ($i = max(1, $page - $max) ; $i < $page; $i++) {
$pageArray[$number] = $i;
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '">' . $i . '</a>';
}
$pageArray[$number] = $page;
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '" class="selected" onclick="return false;">' . $page . '</a>';
for ($i = min($page + 1, $count) ; $i < $page + $max + 1 && $i <= $count && $page != $count; $i++) {
$pageArray[$number] = $i;
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '">' . $i . '</a>';
}
if ($page + $max < $count) {
$pageArray[$number] = $count;
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret .= ' ... <a href="' . pagination_generate_url($params, $smarty) . '">' . $count . '</a>';
}
$pageArray[$number] = min($page + 1, $count);
$params[ROUTER_PAGE_LABEL] = $pageArray; ;
$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '" rel="nofollow"' . ($page < $count ? '' : ' class="disabled" onclick="return false;"') . ">" . (isset($params['next']) ? $params['next'] : '>>') . '</a>';
return $ret;
}
function pagination_generate_url($params, &$smarty) {
include_once(dirname(__FILE__) . '/function.url.php');
$pageArray = $params[ROUTER_PAGE_LABEL];
if( array_sum($pageArray) <= count($pageArray))
$params[ROUTER_PAGE_LABEL] = null;
else
$params[ROUTER_PAGE_LABEL] = implode('-', $pageArray);
return smarty_function_url($params, $smarty);
}
?>