Yii2 GridViewでソートを有効または無効にする方法?
DataProvider
で列の並べ替えをカスタマイズできます。たとえば、ActiveDataProvider
でGridView
を使用する場合、以下のようなソート可能な列を指定できます。
$dataProvider = new ActiveDataProvider([
'query' => Model::find(),
'sort' => ['attributes' => ['column1','column2']]
]);
上記の例では、column1
とcolumn2
のみがソート可能です。
以下のようにすべての列のソートを無効にすることもできます。
'sort' =>false
Yii2
の公式ドキュメントをご覧になることをお勧めします。 Class yii\data\Sort 定義どおりそれ:
並べ替えは並べ替えに関連する情報を表します。1つまたは複数の属性に従ってデータを並べ替える必要がある場合、並べ替えを使用して並べ替え情報を表し、適切な情報を生成できます。ソートアクションにつながる可能性のあるハイパーリンク。
ALiの答えに加えて、集計列および関連列については、次のことができます。
public function actionIndex()
{
$dataProvider = new ActiveDataProvider([
'query' => User::find()->joinWith('role'),
'sort' => ['attributes' => [
//Normal columns
'username',
'email',
//aggregated columns
'full_name' => [
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
'default' => SORT_DESC
],
//related columns
'role.name' => [
'asc' => ['user_role.name' => SORT_ASC],
'desc' => ['user_role.name' => SORT_DESC],
'default' => SORT_DESC
],
],],
]);
}
特定の列のグリッドビューからの並べ替えを無効にする場合は、次のようにします。
[
'attribute' => 'name',
'enableSorting' => false
],
'enableSorting' => false
を使用して
次のようにコントローラーでソートを無効にできます:
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->sort->sortParam = false;