Browse Source

Refactored Sort.

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
7eb33d65c6
  1. 31
      framework/yii/data/Sort.php
  2. 2
      framework/yii/widgets/LinkPager.php
  3. 21
      tests/unit/framework/data/SortTest.php

31
framework/yii/data/Sort.php

@ -275,8 +275,8 @@ class Sort extends Object
*/
public function getAttributeOrder($attribute)
{
$this->getAttributeOrders();
return isset($this->_attributeOrders[$attribute]) ? $this->_attributeOrders[$attribute] : null;
$orders = $this->getAttributeOrders();
return isset($orders[$attribute]) ? $orders[$attribute] : null;
}
/**
@ -300,8 +300,8 @@ class Sort extends Object
}
$url = $this->createUrl($attribute);
$definition = $this->attributes[$attribute];
return Html::a($definition['label'], $url, $options);
$options['data-sort'] = $this->createSortVar($attribute);
return Html::a($this->attributes[$attribute]['label'], $url, $options);
}
/**
@ -317,6 +317,23 @@ class Sort extends Object
*/
public function createUrl($attribute)
{
$params = $this->params === null ? $_GET : $this->params;
$params[$this->sortVar] = $this->createSortVar($attribute);
$route = $this->route === null ? Yii::$app->controller->getRoute() : $this->route;
$urlManager = $this->urlManager === null ? Yii::$app->getUrlManager() : $this->urlManager;
return $urlManager->createUrl($route, $params);
}
/**
* Creates the sort variable for the specified attribute.
* The newly created sort variable can be used to create a URL that will lead to
* sorting by the specified attribute.
* @param string $attribute the attribute name
* @return string the value of the sort variable
* @throws InvalidConfigException if the specified attribute is not defined in [[attributes]]
*/
public function createSortVar($attribute)
{
if (!isset($this->attributes[$attribute])) {
throw new InvalidConfigException("Unknown attribute: $attribute");
}
@ -339,10 +356,6 @@ class Sort extends Object
foreach ($directions as $attribute => $descending) {
$sorts[] = $descending ? $attribute . $this->separators[1] . $this->descTag : $attribute;
}
$params = $this->params === null ? $_GET : $this->params;
$params[$this->sortVar] = implode($this->separators[0], $sorts);
$route = $this->route === null ? Yii::$app->controller->getRoute() : $this->route;
$urlManager = $this->urlManager === null ? Yii::$app->getUrlManager() : $this->urlManager;
return $urlManager->createUrl($route, $params);
return implode($this->separators[0], $sorts);
}
}

2
framework/yii/widgets/LinkPager.php

@ -183,7 +183,7 @@ class LinkPager extends Widget
}
$class = trim($class);
$options = array('class' => $class === '' ? null : $class);
return Html::tag('li', Html::a($label, $this->pagination->createUrl($page)), $options);
return Html::tag('li', Html::a($label, $this->pagination->createUrl($page), array('data-page' => $page)), $options);
}
/**

21
tests/unit/framework/data/SortTest.php

@ -93,6 +93,27 @@ class SortTest extends TestCase
$this->assertNull($sort->getAttributeOrder('xyz'));
}
public function testCreateSortVar()
{
$sort = new Sort(array(
'attributes' => array(
'age',
'name' => array(
'asc' => array('first_name' => Sort::ASC, 'last_name' => Sort::ASC),
'desc' => array('first_name' => Sort::DESC, 'last_name' => Sort::DESC),
),
),
'params' => array(
'sort' => 'age.name-desc'
),
'enableMultiSort' => true,
'route' => 'site/index',
));
$this->assertEquals('age-desc.name-desc', $sort->createSortVar('age'));
$this->assertEquals('name.age', $sort->createSortVar('name'));
}
public function testCreateUrl()
{
$manager = new UrlManager(array(

Loading…
Cancel
Save