yiiページング関数の例

3025 ワード

ページング関数の例
    public function actionIndex($perPage = 20, $type = null, $isWeek = 0)
    {   
        Yii::$app->response->format = Response::FORMAT_JSON;            
        //       
        $weekWhere = $isWeek == 0 ? ['>','start_time',getLastEndTime()]: [' 0 ? ['type_id' => $type]: '';

        $query = Activity::find()
                ->with([
                'type',
                'tags',
                'question',
                'user',
                'answerList',
                'feedbackList'
                ])
                ->asArray()
                ->where(
                        ['and',
                            ['in', 'status', [
                                Activity::STATUS_DRAFT,
                                Activity::STATUS_RELEASE,
                                Activity::STATUS_PREVENT,
                                Activity::STATUS_SHUT,
                                Activity::STATUS_CANCEL,
                            ]],
                            $weekWhere,
                            $typeWhere,
                        ]
                    )
                ->orderBy($this->activity_order);        

        $countQuery = clone $query;
        $pagination = new Pagination([
            'totalCount' => $countQuery->count(),
            'pageSize' => $perPage
        ]);

        //    
        $totalCount =  $pagination->totalCount;

        //      
        $activities = $query->offset($pagination->offset)
        ->limit($pagination->limit)
        ->all();

        foreach ($activities as $key => $activity) {
            $activities[$key]['answer_count'] = count($activity['answerList']);
            $activities[$key]['feedback_count'] = count($activity['feedbackList']);
            $activities[$key]['preview_url'] = Yii::$app->params['domain'].'preview/'.$activity['id'];
            $activities[$key]['filter_url'] = Yii::$app->params['domain'].'filter/'.$activity['id'];

            //set last week days
            $activities[$key]['this_week'] = getLastEndTime() < $activity['end_time'] ? 1 : 0;
        }

        return [
            'totalCount' => $totalCount,
            'activities' => $activities,
        ]; 

    }

現在のページ数はyiiに内蔵されているので、このパラメータにアクセスするときは、パラメータpageを直接転送すればいいです!
フロントコードangularフレームワーク
fetchPage: function(type, page, isWeek) {
    page = page || 1;
    var params = {
        'type': type,
        'page': page,
        'isWeek': isWeek,
        'perPage': 10 //  20 
    };
    return $http.get('/activity', {
        params: params
    }).then(function(data) {
        return data;
    });

 }