|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @link http://www.yiiframework.com/
|
|
|
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
|
|
|
* @license http://www.yiiframework.com/license/
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace yii\widgets;
|
|
|
|
|
|
|
|
use yii\base\InvalidConfigException;
|
|
|
|
use yii\helpers\Html;
|
|
|
|
use yii\base\Widget;
|
|
|
|
use yii\web\Pagination;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ListPager displays a drop-down list that contains options leading to different pages.
|
|
|
|
*
|
|
|
|
* ListPager works with a [[Pagination]] object which specifies the totally number
|
|
|
|
* of pages and the current page number.
|
|
|
|
*
|
|
|
|
* Note that ListPager requires JavaScript to work. You should consider using [[LinkPager]]
|
|
|
|
* if you want to make your page work without JavaScript.
|
|
|
|
*
|
|
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
|
|
* @since 2.0
|
|
|
|
*/
|
|
|
|
class ListPager extends Widget
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var Pagination the pagination object that this pager is associated with.
|
|
|
|
* You must set this property in order to make ListPager work.
|
|
|
|
*/
|
|
|
|
public $pagination;
|
|
|
|
/**
|
|
|
|
* @var array HTML attributes for the drop-down list tag. The following options are specially handled:
|
|
|
|
*
|
|
|
|
* - prompt: string, a prompt text to be displayed as the first option.
|
|
|
|
*
|
|
|
|
* The rest of the options will be rendered as the attributes of the resulting tag. The values will
|
|
|
|
* be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered.
|
|
|
|
*/
|
|
|
|
public $options = array();
|
|
|
|
/**
|
|
|
|
* @var string the template used to render the label for each list option.
|
|
|
|
* The token "{page}" will be replaced with the actual page number (1-based).
|
|
|
|
*/
|
|
|
|
public $template = '{page}';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes the pager.
|
|
|
|
*/
|
|
|
|
public function init()
|
|
|
|
{
|
|
|
|
if ($this->pagination === null) {
|
|
|
|
throw new InvalidConfigException('The "pagination" property must be set.');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Executes the widget.
|
|
|
|
* This overrides the parent implementation by displaying the generated page buttons.
|
|
|
|
*/
|
|
|
|
public function run()
|
|
|
|
{
|
|
|
|
$pageCount = $this->pagination->getPageCount();
|
|
|
|
$currentPage = $this->pagination->getPage();
|
|
|
|
|
|
|
|
$pages = array();
|
|
|
|
for ($i = 0; $i < $pageCount; ++$i) {
|
|
|
|
$pages[$this->pagination->createUrl($i)] = $this->generatePageText($i);
|
|
|
|
}
|
|
|
|
$selection = $this->pagination->createUrl($currentPage);
|
|
|
|
|
|
|
|
if (!isset($this->options['onchange'])) {
|
|
|
|
$this->options['onchange'] = "if (this.value != '') { window.location = this.value; };";
|
|
|
|
}
|
|
|
|
|
|
|
|
echo Html::dropDownList(null, $selection, $pages, $this->options);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates the label of the list option for the specified page number.
|
|
|
|
* You may override this method to customize the option display.
|
|
|
|
* @param integer $page zero-based page number
|
|
|
|
* @return string the list option for the page number
|
|
|
|
*/
|
|
|
|
protected function generatePageText($page)
|
|
|
|
{
|
|
|
|
return strtr($this->template, array(
|
|
|
|
'{page}' => $page + 1,
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|