<?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\widgets; use Yii; use yii\base\InvalidConfigException; use yii\base\Widget; use yii\data\Sort; use yii\helpers\Html; /** * LinkSorter renders a list of sort links for the given sort definition. * * LinkSorter will generate a hyperlink for every attribute declared in [[sort]]. * * @author Qiang Xue <qiang.xue@gmail.com> * @since 2.0 */ class LinkSorter extends Widget { /** * @var Sort the sort definition */ public $sort; /** * @var array list of the attributes that support sorting. If not set, it will be determined * using [[Sort::attributes]]. */ public $attributes; /** * @var array HTML attributes for the sorter container tag. * See [[yii\helpers\Html::ul()]] for special attributes. */ public $options = ['class' => 'sorter']; /** * Initializes the sorter. */ public function init() { if ($this->sort === null) { throw new InvalidConfigException('The "sort" property must be set.'); } } /** * Executes the widget. * This method renders the sort links. */ public function run() { echo $this->renderSortLinks(); } /** * Renders the sort links. * @return string the rendering result */ protected function renderSortLinks() { $attributes = empty($this->attributes) ? array_keys($this->sort->attributes) : $this->attributes; $links = []; foreach ($attributes as $name) { $links[] = $this->sort->link($name); } return Html::ul($links, array_merge($this->options, ['encode' => false])); } }