Hmm… ItemManager can paginate some things: items, categories and fields. There are tons of ways to render navigation for pagination with ItemManager:
The easiest way would be to use the pagination with default ItemManager’s templates. These are typically just fine, but there may be an instance where you want to modify the markup and behavior. If required so, you can completely customize your pagination, by implementing your own markup and CSS.
But today I'd like to share with non-programmers a function that you can use in your web projects to paginate your items and categories:
You can paste this paginate() function in your functions.php file.
This function could be called right after you are calling: $itemsAccessor->init() or $categoryAccessor->init() functions. For example, your functions.php code in this tutorial could then look something like this:
After that, you can call echo in your template.php file in order to output the value returned by the paginate() function:
Parameters:
Return Value:
The easiest way would be to use the pagination with default ItemManager’s templates. These are typically just fine, but there may be an instance where you want to modify the markup and behavior. If required so, you can completely customize your pagination, by implementing your own markup and CSS.
But today I'd like to share with non-programmers a function that you can use in your web projects to paginate your items and categories:
PHP Code:
function paginate(& $im, & $ia, $max = 20)
{
$tpls = array();
$tpl = $im->getTemplateEngine();
$tpl->init();
$pagination = $tpl->getTemplates('pagination');
if(empty($pagination)) return false;
$prevTpl = $im->newTemplate();
$prevTpl_inactive = $im->newTemplate();
$nextTpl = $im->newTemplate();
$nextTpl_inactive = $im->newTemplate();
$prevTpl->content = '<a class="paginator-left" href="[[href]]">prev</a>';
$prevTpl_inactive->content = '<span class="paginator-left">prev</span>';
$nextTpl->content = '<a class="paginator-left" href="[[href]]">next</a>';
$nextTpl_inactive->content = '<span class="paginator-left">next</span>';
$tpls['wrapper'] = $tpl->getTemplate('wrapper', $pagination);
$tpls['prev'] = $prevTpl;
$tpls['prev_inactive'] = $prevTpl_inactive;
$tpls['central'] = $tpl->getTemplate('central', $pagination);
$tpls['central_inactive'] = $tpl->getTemplate('central_inactive', $pagination);
$tpls['next'] = $nextTpl;
$tpls['next_inactive'] = $nextTpl_inactive;
$tpls['ellipsis'] = $tpl->getTemplate('ellipsis', $pagination);
$tpls['secondlast'] = $tpl->getTemplate('secondlast', $pagination);
$tpls['second'] = $tpl->getTemplate('second', $pagination);
$tpls['last'] = $tpl->getTemplate('last', $pagination);
$tpls['first'] = $tpl->getTemplate('first', $pagination);
$params['page'] = !empty($_GET['page']) ? (int) $_GET['page'] : 1;
$params['items'] = count($ia->items);
// start item
$start = (($params['page']-1) * $max+1);
// order items
$ia->filterItems('position', 'DESC', $start, $max);
$params['lastpage'] = ceil($params['items'] / $max);
$params['limit'] = $max;
$params['pageurl'] = '?page=';
return $im->buildPagination($tpls, $params);
}
You can paste this paginate() function in your functions.php file.
This function could be called right after you are calling: $itemsAccessor->init() or $categoryAccessor->init() functions. For example, your functions.php code in this tutorial could then look something like this:
PHP Code:
<?php
// get the current page slug
$slug = get_page_slug(false);
// Check whether the slug is 'catalog'
if($slug == 'catalog') {
// initialize ItemManager
$imanager = new IManager();
// let's get our DUMMY's category, we only need the ID-number of the category
$catAccessor = $imanager->getCategoryClass();
$categoryData = $catAccessor->getCategory('name=Category Data');
if(empty($categoryData)) die('Category Data was not found');
// get the items of DUMMY category
$itemsAccessor = $imanager->getItemClass();
$itemsAccessor->init($categoryData->get('id'));
///////// YOUR paginate() CALL COMING HERE ////////////
$pagination = paginate($imanager, $itemsAccessor, 1);
if(empty($itemsAccessor->items)) die('Categories not found');
// Done! We can now use our categories with $itemsAccessor->items in our template.php
}
After that, you can call echo in your template.php file in order to output the value returned by the paginate() function:
PHP Code:
<?php if($slug == 'catalog') { ?>
<h1>MY PRETTY CATALOG</h1>
<p>Select a category</p>
<?php foreach($itemsAccessor->items as $category) { ?>
<article>
<h2><a href="./<?php echo $category->fields->slug->value; ?>/"><?php echo $category->name ?></a></h2>
<div>
<p><img alt="<?php echo $category->fields->image->imagetitle[0] ?>"
src="<?php echo $category->fields->image->imagefullurl[0] ?>"></p>
<div class="category_text"><?php echo $category->fields->description->value; ?>
<a href="./<?php echo $category->fields->slug->value; ?>/">Shopping</a>
</div>
</div>
</article>
<?php
}
//////////// OUTPUT YOUR PAGINATION /////////////
echo (!empty($pagination) ? $pagination : '');
}
?>
Code:
paginate( object $imanager, object $itemAccessor, int $max )
- $imanager = is an instanze of IManager class
- $itemAccessor = is an instance of item- or category-accessor
- $max = the maximum number of items per page
Return Value:
- A markup output for your pagination