<?php
/**
* Smarty {p_iterator}{/p_iterator} block plugin
*
* Paginator Iterator Plugin
*
* Simple paginator plugin with iterator features
*
*
* Simple usage:
-------------------------------------------------------------------------------------------------------
| index.php
|
| include('PaginatorIterator.php');
| PaginatorIterator::setConnection(new PDO('mysql:dbname=j15;host=127.0.0.1', 'root', '123456'));
|
| include('Smarty-2.6.19/Smarty.class.php');
| $smarty=new Smarty;
|
| $smarty->assign('ds', "select * from jos_menu limit :LIMIT offset :OFFSET");
| $smarty->assign('numrows', "select count(*) from jos_menu");
|
| $smarty->display("index.tpl");
-------------------------------------------------------------------------------------------------------
| index.tpl
|
| {p_iterator id='rec' ds=$ds numrows=$numrows pageno=$smarty.get.pageno numlinks=10 rowsperpage=10}
|
| {p_header}
| <a href="index.php?pageno={$rec.prev}">Prev</a>
| <a href="index.php?pageno={$rec.next}">Next</a>
|
| <table border="1" width="100%">
| {/p_header}
|
| {p_item}
| <tr>
| <td>{$rec.ds.name}</td>
| <td>{$rec.ds.link}</td>
| </tr>
| {/p_item}
|
| {p_footer}
| </table>
| {/p_footer}
|
| {/p_iterator}
-------------------------------------------------------------------------------------------------------
*
* @type block
* @name paginator
* @version 0.1
* @see
*
* @author Anderson A. Meggiolaro <ameggiolaro@gmail.com>
* @license LGPL
*
* @param id REQUIRED
* @param ds REQUIRED
* @param numrows REQUIRED
* @param pageno REQUIRED default: 1
* @param numlinks default: 10
* @param rowsperpage default: 10
* @param strip default: true
*/
function smarty_block_p_iterator($params, $content, &$smarty, &$repeat)
{
static $flag;
if(is_null($content)) {
if(!$smarty->_paginator)
$smarty->_paginator=array();
return;
}
if(!$params['id']) {
$smarty->trigger_error("paginator: missing 'id' attribute.");
}
if(!$params['ds']) {
$smarty->trigger_error("paginator: missing 'ds' attribute.");
}
if(!$params['numrows']) {
$smarty->trigger_error("paginator: missing 'numrows' attribute.");
}
if(!array_key_exists('pageno', $params)) {
$smarty->trigger_error("paginator: missing 'pageno' attribute.");
}
if(!$flag[$params['id']])
{
$smarty->_paginator[$params['id']]['counter']=0;
$paginator=new PaginatorIterator;
$paginator->ds=$params['ds'];
if($params['rowsperpage'])
$paginator->rowsperpage=$params['rowsperpage'];
$paginator->numrows=$params['numrows'];
if($params['numlinks'])
$paginator->numlinks=$params['numlinks'];
$paginator->pageno=$params['pageno'];
$smarty->assign($params['id'], $paginator->paginate());
$smarty->_tpl_vars[$params['id']]['data']=$smarty->_tpl_vars[$params['id']]['ds'][$smarty->_paginator[$params['id']]['counter']];
$smarty->_paginator[$params['id']]['is_alternating']=($smarty->_paginator[$params['id']]['counter']%2==0?false:true);
$flag[$params['id']]=1;
$repeat=true;
return;
}
else
$repeat=false;
$has_more_rows=$smarty->_paginator[$params['id']]['counter']<count($smarty->_tpl_vars[$params['id']]['ds'])-1;
if($has_more_rows)
{
$smarty->_paginator[$params['id']]['counter']++;
$smarty->_tpl_vars[$params['id']]['data']=$smarty->_tpl_vars[$params['id']]['ds'][$smarty->_paginator[$params['id']]['counter']];
$smarty->_paginator[$params['id']]['is_alternating']=($smarty->_paginator[$params['id']]['counter']%2==0?false:true);
$repeat=true;
return;
}
else
$repeat=false;
if(!@$params['strip'])
{
$_return=$smarty->_paginator[$params['id']]['header'].
($smarty->_tpl_vars[$params['id']]['numrows']>0?$smarty->_paginator[$params['id']]['content']:$smarty->_paginator[$params['id']]['empty']).
$smarty->_paginator[$params['id']]['footer'];
if(!$has_more_rows)
$smarty->_paginator[$params['id']]=null;
return preg_replace('!\s+!', ' ', $_return);
}
else
{
$_return=$smarty->_paginator[$params['id']]['header'].
($smarty->_tpl_vars[$params['id']]['numrows']>0?$smarty->_paginator[$params['id']]['content']:$smarty->_paginator[$params['id']]['empty']).
$smarty->_paginator[$params['id']]['footer'];
if(!$has_more_rows)
$smarty->_paginator[$params['id']]=null;
return $_return;
}
}
// from 'Banded Report Generator Framework' plugin [at]-> http://smarty.incutio.com/?page=BandedReportGenerator
if(!function_exists('smarty_get_parent_plugin_params'))
{
function &smarty_get_parent_plugin_params(&$smarty, $parent_plugin_name)
{
for ($i=count($smarty->_tag_stack)-1; $i>=0; $i--) {
$tag_name = $smarty->_tag_stack[$i][0];
if ($tag_name == $parent_plugin_name) break;
}
if ($i<0) {
/* $parent_plugin_name not found */
list($plugin_name, $plugin_params) = $smarty->_tag_stack[count($smarty->_tag_stack)-1];
$smarty->trigger_error("{".$plugin_name."}: not inside {".$parent_plugin_name."}-context", E_USER_ERROR);
return;
} else {
return $smarty->_tag_stack[$i][1];
}
}
}
?>
|