簡體   English   中英

Yii2 gridview排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM