Spec-Zone.ru › Yii 2.0

Сортировка

При отображении нескольких строк данных часто требуется, чтобы данные сортировались по некоторым столбцам, указанным конечными пользователями. Yii использует объект yii\data\Sort для представления информации о схеме сортировки. В частности,

  • attributes задаёт атрибуты, по которым можно сортировать данные. Атрибут может быть простым, как атрибут модели. Он также может быть составным, объединяя несколько атрибутов модели или столбцов БД. Более подробная информация будет предоставлена далее.
  • attributeOrders задаёт текущие запрошенные направления сортировки для каждого атрибута.
  • orders задаёт направления сортировки в терминах низкоуровневых столбцов.

Для использования yii\data\Sort, сначала укажите, какие атрибуты можно сортировать. Затем извлеките текущую запрошенную информацию о сортировке из attributeOrders или orders и используйте её для настройки запроса к данным. Например,

use yii\data\Sort;

$sort = new Sort([
    'attributes' => [
        'age',
        'name' => [
            'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
            'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
            'default' => SORT_DESC,
            'label' => 'Name',
        ],
    ],
]);

$articles = Article::find()
    ->where(['status' => 1])
    ->orderBy($sort->orders)
    ->all();

В приведенном выше примере для объекта Sort объявлены два атрибута: age и name.

Атрибут age — это простой атрибут, соответствующий атрибуту age класса Article Active Record. Он эквивалентен следующему объявлению:

'age' => [
    'asc' => ['age' => SORT_ASC],
    'desc' => ['age' => SORT_DESC],
    'default' => SORT_ASC,
    'label' => Inflector::camel2words('age'),
]

Атрибут name — это составной атрибут, определённый элементами first_name и last_name класса Article. Он объявляется с использованием следующей структуры массива:

  • Элементы asc и desc указывают, как сортировать по атрибуту в возрастающем и убывающем направлениях соответственно. Их значения представляют фактические столбцы и направления, по которым должны сортироваться данные. Вы можете указать один или несколько столбцов для обозначения простой или составной сортировки.
  • Элемент default указывает направление сортировки атрибута при первоначальном запросе. По умолчанию оно равно возрастающему, что означает, что если атрибут не отсортирован предварительно, и вы запросите сортировку по этому атрибуту, данные будут отсортированы по этому атрибуту в возрастающем порядке.
  • Элемент label указывает, какая метка должна использоваться при вызове yii\data\Sort::link() для создания ссылки сортировки. Если не указано, будет вызван yii\helpers\Inflector::camel2words() для генерации метки из имени атрибута. Обратите внимание, что он не будет кодирован в HTML.

Информация: Вы можете напрямую передать значение orders в запрос к базе данных для построения его ORDER BY фрагмента. Не используйте attributeOrders, так как некоторые атрибуты могут быть составными и не распознаваться запросом к базе данных.

Вы можете вызвать yii\data\Sort::link() для генерации гиперссылки, по которой конечные пользователи могут нажать, чтобы запросить сортировку данных по указанному атрибуту. Вы также можете вызвать yii\data\Sort::createUrl() для создания сортируемой URL-адреса. Например,

// specifies the route that the URL to be created should use
// If you do not specify this, the currently requested route will be used
$sort->route = 'article/index';

// display links leading to sort by name and age, respectively
echo $sort->link('name') . ' | ' . $sort->link('age');

// displays: /index.php?r=article%2Findex&sort=age
echo $sort->createUrl('age');

yii\data\Sort проверяет параметр запроса sort для определения, какие атрибуты запрашиваются для сортировки. Вы можете указать значение по умолчанию для сортировки через yii\data\Sort::$defaultOrder, когда параметр запроса отсутствует. Вы также можете настроить имя параметра запроса, настроив свойство sortParam.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-output-sorting.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API