diff --git a/framework/yii/widgets/LinkPager.php b/framework/yii/widgets/LinkPager.php index 62d99f6..f3af72f 100644 --- a/framework/yii/widgets/LinkPager.php +++ b/framework/yii/widgets/LinkPager.php @@ -87,9 +87,9 @@ class LinkPager extends Widget public $lastPageLabel; /** * @var string the template used to render the content within the pager container. - * The token "{buttons}" will be replaced with the actual page buttons. + * The token "{pages}" will be replaced with the actual page buttons. */ - public $template = '{buttons}'; + public $template; /** @@ -100,6 +100,9 @@ class LinkPager extends Widget if ($this->pagination === null) { throw new InvalidConfigException('The "pagination" property must be set.'); } + if ($this->template === null) { + $this->template = ' {pages}'; + } } /** @@ -109,16 +112,16 @@ class LinkPager extends Widget public function run() { $buttons = strtr($this->template, array( - '{buttons}' => Html::tag('ul', implode("\n", $this->createPageButtons())), + '{pages}' => $this->renderPageButtons(), )); echo Html::tag('div', $buttons, $this->options); } /** - * Creates the page buttons. - * @return array a list of page buttons (in HTML code). + * Renders the page buttons. + * @return string the rendering result */ - protected function createPageButtons() + protected function renderPageButtons() { $buttons = array(); @@ -127,7 +130,7 @@ class LinkPager extends Widget // first page if ($this->firstPageLabel !== null) { - $buttons[] = $this->createPageButton($this->firstPageLabel, 0, $this->firstPageCssClass, $currentPage <= 0, false); + $buttons[] = $this->renderPageButton($this->firstPageLabel, 0, $this->firstPageCssClass, $currentPage <= 0, false); } // prev page @@ -135,13 +138,13 @@ class LinkPager extends Widget if (($page = $currentPage - 1) < 0) { $page = 0; } - $buttons[] = $this->createPageButton($this->prevPageLabel, $page, $this->prevPageCssClass, $currentPage <= 0, false); + $buttons[] = $this->renderPageButton($this->prevPageLabel, $page, $this->prevPageCssClass, $currentPage <= 0, false); } // internal pages list($beginPage, $endPage) = $this->getPageRange(); for ($i = $beginPage; $i <= $endPage; ++$i) { - $buttons[] = $this->createPageButton($i + 1, $i, null, false, $i == $currentPage); + $buttons[] = $this->renderPageButton($i + 1, $i, null, false, $i == $currentPage); } // next page @@ -149,28 +152,28 @@ class LinkPager extends Widget if (($page = $currentPage + 1) >= $pageCount - 1) { $page = $pageCount - 1; } - $buttons[] = $this->createPageButton($this->nextPageLabel, $page, $this->nextPageCssClass, $currentPage >= $pageCount - 1, false); + $buttons[] = $this->renderPageButton($this->nextPageLabel, $page, $this->nextPageCssClass, $currentPage >= $pageCount - 1, false); } // last page if ($this->lastPageLabel !== null) { - $buttons[] = $this->createPageButton($this->lastPageLabel, $pageCount - 1, $this->lastPageCssClass, $currentPage >= $pageCount - 1, false); + $buttons[] = $this->renderPageButton($this->lastPageLabel, $pageCount - 1, $this->lastPageCssClass, $currentPage >= $pageCount - 1, false); } - return $buttons; + return Html::tag('ul', implode("\n", $buttons)); } /** - * Creates a page button. + * Renders a page button. * You may override this method to customize the generation of page buttons. * @param string $label the text label for the button * @param integer $page the page number * @param string $class the CSS class for the page button. * @param boolean $disabled whether this page button is disabled * @param boolean $active whether this page button is active - * @return string the generated button + * @return string the rendering result */ - protected function createPageButton($label, $page, $class, $disabled, $active) + protected function renderPageButton($label, $page, $class, $disabled, $active) { if ($active) { $class .= ' ' . $this->activePageCssClass; diff --git a/framework/yii/widgets/LinkSorter.php b/framework/yii/widgets/LinkSorter.php index 4921af5..d98d509 100644 --- a/framework/yii/widgets/LinkSorter.php +++ b/framework/yii/widgets/LinkSorter.php @@ -7,6 +7,7 @@ namespace yii\widgets; +use Yii; use yii\base\InvalidConfigException; use yii\base\Widget; use yii\data\Sort; @@ -28,9 +29,13 @@ class LinkSorter extends Widget public $sort; /** * @var array HTML attributes for the sorter container tag. - * Please refer to [[Html::ul()]] for supported special options. */ - public $options = array(); + public $options = array('class' => 'sorter'); + /** + * @var string the template used to render the content within the sorter container. + * The token "{links}" will be replaced with the actual sort links. + */ + public $template; /** * Initializes the sorter. @@ -40,6 +45,10 @@ class LinkSorter extends Widget if ($this->sort === null) { throw new InvalidConfigException('The "sort" property must be set.'); } + + if ($this->template === null) { + $this->template = ' {links}'; + } } /** @@ -48,10 +57,22 @@ class LinkSorter extends Widget */ public function run() { + $links = strtr($this->template, array( + '{links}' => $this->renderSortLinks(), + )); + echo Html::tag('div', $links, $this->options); + } + + /** + * Renders the sort links. + * @return string the rendering result + */ + protected function renderSortLinks() + { $links = array(); foreach (array_keys($this->sort->attributes) as $name) { $links[] = $this->sort->link($name); } - echo Html::ul($links, array_merge($this->options, array('encode' => false))); + return Html::ul($links, array('encode' => false)); } } diff --git a/framework/yii/widgets/ListPager.php b/framework/yii/widgets/ListPager.php deleted file mode 100644 index 30371d3..0000000 --- a/framework/yii/widgets/ListPager.php +++ /dev/null @@ -1,94 +0,0 @@ - - * @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, - )); - } -}