php – Yii2 gridview排序

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – Yii2 gridview排序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题:我无法对gridview进行排序.
当我点击“产品名称”时:

php – Yii2 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,]);
}

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',$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(); ?>

谢谢!

解决方法

这可能是因为您已经在查询中设置了排序.数据提供者无法覆盖此.您应该删除查询中的orderBy子句.

通常我更喜欢在数据提供者中设置这样的排序,因为它更清楚地允许对哪些属性进行排序;

$dataProvider->setSort([
        'attributes' => [
            'product_name' => [
                'asc' => ['product_name' => SORT_ASC],'default' => SORT_ASC
            ],'date' => [
                'asc' => ['date' => SORT_ASC],'desc' => ['date' => SORT_DESC],'default' => SORT_ASC,'defaultOrder' => [
            'date' => SORT_ASC
        ]
    ]);
@H_419_48@

脚本宝典总结

以上是脚本宝典为你收集整理的php – Yii2 gridview排序全部内容,希望文章能够帮你解决php – Yii2 gridview排序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。