%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/template/helper/
Upload File :
Create Path :
Current File : //home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/template/helper/paginator.php

<?php
/**
 * @version		$Id$
 * @package		Koowa_Template
 * @subpackage	Helper
 * @copyright	Copyright (C) 2007 - 2012 Johan Janssens. All rights reserved.
 * @license		GNU GPLv3 <http://www.gnu.org/licenses/gpl.html>
 * @link     	http://www.nooku.org
 */

/**
 * Template Paginator Helper
 *
 * @author		Johan Janssens <johan@nooku.org>
 * @package		Koowa_Template
 * @subpackage	Helper
 */
class KTemplateHelperPaginator extends KTemplateHelperSelect
{
	/**
	 * Initializes the options for the object
	 *
	 * Called from {@link __construct()} as a first step of object instantiation.
	 *
	 * @param 	object 	An optional KConfig object with configuration options
	 * @return  void
	 */
	protected function _initialize(KConfig $config)
	{
	    if($config->total != 0)
        {
            $config->limit  = (int) max($config->limit, 1);
            $config->offset = (int) max($config->offset, 0);

            if($config->limit > $config->total) {
                $config->offset = 0;
            }

            if(!$config->limit)
            {
                $config->offset = 0;
                $config->limit  = $config->total;
            }

            $config->count  = (int) ceil($config->total / $config->limit);

            if($config->offset > $config->total) {
                $config->offset = ($config->count-1) * $config->limit;
            }

            $config->current = (int) floor($config->offset / $config->limit) + 1;
        }
        else
        {
            $config->limit   = 0;
            $config->offset  = 0;
            $config->count   = 0;
            $config->current = 0;
        }

       	parent::_initialize($config);
    }

	/**
	 * Render item pagination
	 *
	 * @param 	array 	An optional array with configuration options
	 * @return	string	Html
	 * @see  	http://developer.yahoo.com/ypatterns/navigation/pagination/
	 */
	public function pagination($config = array())
	{
		$config = new KConfig($config);
		$config->append(array(
			'total'      => 0,
			'display'    => 4,
			'offset'     => 0,
			'limit'	     => 0,
			'attribs'    => array('onchange' => 'this.form.submit();'),
		    'show_limit' => true,
		    'show_count' => true
		));

		$this->_initialize($config);

		$html = '';
		$html .= '<style src="media://lib_koowa/css/koowa.css" />';

		$html .= '<div class="-koowa-pagination">';
		if($config->show_limit) {
		    $html .= '<div class="limit">'.$this->translate('Display NUM').' '.$this->limit($config).'</div>';
		}
		$html .=  $this->_pages($this->_items($config));
		if($config->show_count) {
		    $html .= '<div class="count"> '.$this->translate('Page').' '.$config->current.' '.$this->translate('of').' '.$config->count.'</div>';
		}
		$html .= '</div>';

		return $html;
	}

	/**
	 * Render a select box with limit values
	 *
	 * @param 	array 	An optional array with configuration options
	 * @return 	string	Html select box
	 */
	public function limit($config = array())
	{
		$config = new KConfig($config);
		$config->append(array(
			'limit'	  	=> 0,
			'attribs'	=> array(),
		));

		$html = '';

		$selected = '';
		foreach(array(5 => 5, 10 => 10, 15 => 15, 20 => 20, 25 => 25, 30 => 30, 50 => 50, 100 => 100) as $value => $text)
		{
			if($value == $config->limit) {
				$selected = $value;
			}

			$options[] = $this->option(array('text' => $text, 'value' => $value));
		}

		$html .= $this->optionlist(array('options' => $options, 'name' => 'limit', 'attribs' => $config->attribs, 'selected' => $selected));
		return $html;
	}

	/**
	 * Render a list of pages links
	 *
	 * @param	araay 	An array of page data
	 * @return	string	Html
	 */
	protected function _pages($pages)
	{
		$html = '<ul class="pages">';

		$html .= '<li class="first">&laquo; '.$this->_link($pages['first'], 'First').'</li>';
		$html .= '<li class="previous">&lt; '.$this->_link($pages['previous'], 'Prev').'</li>';

		foreach($pages['pages'] as $page) {
			$html .= '<li>'.$this->_link($page, $page->page).'</li>';
		}

		$html .= '<li class="next">'.$this->_link($pages['next'], 'Next').' &gt;</li>';
		$html .= '<li class="previous">'.$this->_link($pages['last'], 'Last').' &raquo;</li>';

		$html .= '</ul>';
		return $html;
	}

	/**
	 * Render a page link
	 *
	 * @param	object The page data
	 * @param	string The link title
	 * @return	string	Html
	 */
	protected function _link($page, $title)
	{
		$url   = clone KRequest::url();
		$query = $url->getQuery(true);

		$query['limit']  = $page->limit;
		$query['offset'] = $page->offset;

		$url->setQuery($query);

		$class = $page->current ? 'class="active"' : '';

		if($page->active && !$page->current) {
			$html = '<a href="'.$url.'" '.$class.'>'.$this->translate($title).'</a>';
		} else {
			$html = '<span '.$class.'>'.$this->translate($title).'</span>';
		}

		return $html;
	}

 	/**
     * Get a list of pages
     *
     * @return  array   Returns and array of pages information
     */
    protected function _items(KConfig $config)
    {
        $elements  = array();
        $prototype = new KObject();
        $current   = ($config->current - 1) * $config->limit;

        // First
        $page    = 1;
        $offset  = 0;
        $active  = $offset != $config->offset;
        $props   = array('page' => 1, 'offset' => $offset, 'limit' => $config->limit, 'current' => false, 'active' => $active );
        $element = clone $prototype;
        $elements['first'] = $element->set($props);

        // Previous
        $offset  = max(0, ($config->current - 2) * $config->limit);
        $active  = $offset != $config->offset;
        $props   = array('page' => $config->current - 1, 'offset' => $offset, 'limit' => $config->limit, 'current' => false, 'active' => $active);
        $element = clone $prototype;
        $elements['previous'] = $element->set($props);

        // Pages
        $elements['pages'] = array();
        foreach($this->_offsets($config) as $page => $offset)
        {
            $current = $offset == $config->offset;
            $props = array('page' => $page, 'offset' => $offset, 'limit' => $config->limit, 'current' => $current, 'active' => !$current);
            $element    = clone $prototype;
            $elements['pages'][] = $element->set($props);
        }

        // Next
        $offset  = min(($config->count-1) * $config->limit, ($config->current) * $config->limit);
        $active  = $offset != $config->offset;
        $props   = array('page' => $config->current + 1, 'offset' => $offset, 'limit' => $config->limit, 'current' => false, 'active' => $active);
        $element = clone $prototype;
        $elements['next'] = $element->set($props);

        // Last
        $offset  = ($config->count - 1) * $config->limit;
        $active  = $offset != $config->offset;
        $props   = array('page' => $config->count, 'offset' => $offset, 'limit' => $config->limit, 'current' => false, 'active' => $active);
        $element = clone $prototype;
        $elements['last'] = $element->set($props);

        return $elements;
    }

    /**
     * Get the offset for each page, optionally with a range
     *
     * @return  array   Page number => offset
     */
    protected function _offsets(KConfig $config)
    {
        if($display = $config->display)
        {
            $start  = (int) max($config->current - $display, 1);
            $start  = min($config->count, $start);
            $stop   = (int) min($config->current + $display, $config->count);
        }
        else // show all pages
        {
            $start = 1;
            $stop = $config->count;
        }

        $result = array();
        if($start > 0)
        {
            foreach(range($start, $stop) as $pagenumber) {
                $result[$pagenumber] =  ($pagenumber-1) * $config->limit;
            }
        }

        return $result;
    }
}

Zerion Mini Shell 1.0