mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-10 02:13:17 +08:00
Refactored Sort.
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -316,6 +316,23 @@ class Sort extends Object
|
||||
* @see params
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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(
|
||||
|
||||
Reference in New Issue
Block a user