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) public function getAttributeOrder($attribute)
{ {
$this->getAttributeOrders(); $orders = $this->getAttributeOrders();
return isset($this->_attributeOrders[$attribute]) ? $this->_attributeOrders[$attribute] : null; return isset($orders[$attribute]) ? $orders[$attribute] : null;
} }
/** /**
@ -300,8 +300,8 @@ class Sort extends Object
} }
$url = $this->createUrl($attribute); $url = $this->createUrl($attribute);
$definition = $this->attributes[$attribute]; $options['data-sort'] = $this->createSortVar($attribute);
return Html::a($definition['label'], $url, $options); return Html::a($this->attributes[$attribute]['label'], $url, $options);
} }
/** /**
@ -317,6 +317,23 @@ class Sort extends Object
*/ */
public function createUrl($attribute) 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])) { if (!isset($this->attributes[$attribute])) {
throw new InvalidConfigException("Unknown attribute: $attribute"); throw new InvalidConfigException("Unknown attribute: $attribute");
} }
@ -339,10 +356,6 @@ class Sort extends Object
foreach ($directions as $attribute => $descending) { foreach ($directions as $attribute => $descending) {
$sorts[] = $descending ? $attribute . $this->separators[1] . $this->descTag : $attribute; $sorts[] = $descending ? $attribute . $this->separators[1] . $this->descTag : $attribute;
} }
$params = $this->params === null ? $_GET : $this->params; return implode($this->separators[0], $sorts);
$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);
} }
} }

2
framework/yii/widgets/LinkPager.php

@ -183,7 +183,7 @@ class LinkPager extends Widget
} }
$class = trim($class); $class = trim($class);
$options = array('class' => $class === '' ? null : $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')); $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() public function testCreateUrl()
{ {
$manager = new UrlManager(array( $manager = new UrlManager(array(

Loading…
Cancel
Save