[英]Yii2 gridview sorting
我有一個問題:我無法對我的 gridview 進行排序。
當我點擊“產品名稱”時: 在 URL 中我可以看到: index?sort=-product_name但沒有任何反應。 我沒有使用 CRUD 生成器。
控制器
public function actionIndex()
{
$searchModel = new CompanyProductSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}
搜索模型
public $searchstring;
public function rules()
{
return [
[['date', 'product_name', 'searchstring'], 'safe'],
];
}
public function scenarios()
{
return Model::scenarios();
}
public function search($params)
{
$array = array();
$user = Yii::$app->user->identity;
$product_influencer = ProductInfluencer::find()->all();
foreach($product_influencer as $product){
$array[] .= $product->product_id;
}
$query = Product::find()->where(['company_id'=>$user->company_id])
->andWhere(['id'=>$array])
->andWhere(['is not', 'shop_price', null])
->andWhere(['is not', 'main_category_id', null])
->orderBy('date DESC');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10
],
]);
$dataProvider->sort->attributes['product_name'] = [
'asc' => ['product_name' => SORT_ASC],
'desc' => ['product_name' => SORT_DESC],
];
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere([
'product_name' => $this->product_name,
]);
$query->andFilterWhere(['like', 'product_name', $this->searchstring]);
return $dataProvider;
}
看法
<?php Pjax::begin(); ?>
<?= GridView::widget([
'summary'=>"",
'dataProvider' => $dataProvider,
'tableOptions' => [
'class' => 'table table-responsive',
'id' => 'sortable-table',
],
'pager' => [
'class' => 'common\widgets\CustomPager',
'prevPageLabel' => '<div style="border: none" class="glyphicon glyphicon-menu-left"></div>',
'nextPageLabel' => '<div style="border: none" class="glyphicon glyphicon-menu-right"></div>',
'maxButtonCount' => 0,
],
'columns' => [
['class' => 'yii\grid\CheckboxColumn',],
[
'class' => 'yii\grid\SerialColumn',
'header' => 'Nr.',
],
[
'format' => 'raw',
'label' => 'Product name',
'attribute' => 'product_name',
'value' => function($model){
return Html::a($model->product_name, ['detail-product'], ['data' => [
'params'=>['id'=>$model->id],
'method' => 'get',
]]);
}
],
[
'label' => 'Total earnings',
'value' => function($model){
return '$ 950 (test)';
}
],
[
'label' => 'Units available',
'value' => function($model){
$units = \common\models\ProductInfo::findOne(['product_id'=>$model->id]);
return $units->shop_units;
}
],
],
]); ?>
<?php Pjax::end(); ?>
謝謝!
這可能是因為您已經在查詢中設置了排序。 dataProvider
無法覆蓋它。 您應該刪除查詢中的orderBy
子句。
通常我更喜歡像這樣在dataProvider中設置排序,因為它可以更清楚地允許對哪些屬性進行排序;
$dataProvider->setSort([
'attributes' => [
'product_name' => [
'asc' => ['product_name' => SORT_ASC],
'desc' => ['product_name' => SORT_DESC],
'default' => SORT_ASC
],
'date' => [
'asc' => ['date' => SORT_ASC],
'desc' => ['date' => SORT_DESC],
'default' => SORT_ASC,
],
],
'defaultOrder' => [
'date' => SORT_ASC
]
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.