* @since 2.0 */ class LinkSorter extends Widget { /** * @var Sort the sort definition */ public $sort; /** * @var array HTML attributes for the sorter container tag. */ 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. */ public function init() { if ($this->sort === null) { throw new InvalidConfigException('The "sort" property must be set.'); } if ($this->template === null) { $this->template = ' {links}'; } } /** * Executes the widget. * This method renders the sort links. */ 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); } return Html::ul($links, array('encode' => false)); } }