/** * Adds HTTP headers about the pagination to the response. * @param Pagination $pagination */ protected function addPaginationHeaders($pagination) { $links = []; foreach ($pagination->getLinks(true) as $rel => $url) { $links[] = "<{$url}>; rel={$rel}"; } $this->response->getHeaders()->set($this->totalCountHeader, $pagination->totalCount)->set($this->pageCountHeader, $pagination->getPageCount())->set($this->currentPageHeader, $pagination->getPage() + 1)->set($this->perPageHeader, $pagination->pageSize)->set('Link', implode(', ', $links)); }
/** * sitemap * @return mixed */ public function actionSitemap() { /* header response */ Yii::$app->response->format = Response::FORMAT_RAW; $headers = Yii::$app->response->headers; $headers->add('Content-Type', 'application/xml'); /* begin */ $sitemaps = []; /* blog sitemap */ $query = Blog::find()->where(['status' => Blog::STATUS_PUBLISHED]); $countQuery = clone $query; $pagination = new Pagination(['totalCount' => $countQuery->count()]); $pagination->setPageSize(Yii::$app->params['sitemapPageSize']); $pages = $pagination->getPageCount(); if ($pages > 0) { for ($i = 0; $i < $pages; $i++) { $sitemaps[] = Yii::$app->urlManager->createAbsoluteUrl(['/blog/sitemap', 'page' => $i + 1]); } } /* page sitemap */ $query = PageData::find()->where(['status' => PageData::STATUS_ACTIVE]); $countQuery = clone $query; $pagination = new Pagination(['totalCount' => $countQuery->count()]); $pagination->setPageSize(Yii::$app->params['sitemapPageSize']); $pages = $pagination->getPageCount(); if ($pages > 0) { for ($i = 0; $i < $pages; $i++) { $sitemaps[] = Yii::$app->urlManager->createAbsoluteUrl(['/page/sitemap', 'page' => $i + 1]); } } /* load modules sitemap */ $modules = scandir(\Yii::$app->vendorPath . '/modernkernel'); foreach ($modules as $module) { if (!preg_match('/[\\.]+/', $module)) { $moduleName = str_ireplace('yii2-', '', $module); if (method_exists(Yii::$app->getModule($moduleName), 'sitemap')) { $sitemaps = array_merge($sitemaps, Yii::$app->getModule($moduleName)->sitemap()); } } } return $this->renderPartial('sitemap', ['sitemaps' => $sitemaps]); }
/** * 获取列表记录 * * @param array|string $condition 条件 * @param array $params 参数 * @param string $order 排序 * @param int $page 页码 * @param int $pageSize 每页数量 * @return array */ public static function getListByCondition($condition = '', $params = [], $order = null, $page = 1, $pageSize = 20) { $pagination = new Pagination(); $pagination->setPage($page); $pagination->setPageSize($pageSize); $pagination->totalCount = static::find()->innerJoinWith('menuUrl')->andWhere($condition, $params)->count(1); $list = static::find()->innerJoinWith('menuUrl')->andWhere($condition, $params)->offset($pagination->getOffset() - $pagination->getPageSize())->limit($pagination->getPageSize())->orderBy($order)->asArray()->all(); return ['paginationObj' => $pagination, 'pagination' => ['currentPage' => $page, 'pageSize' => $pageSize, 'pageCount' => $pagination->getPageCount(), 'totalCount' => $pagination->totalCount], 'list' => $list]; }
/** * Serializes a pagination into an array. * @param \yii\data\Pagination $pagination * @return array the array representation of the pagination * @see addPaginationHeaders() */ protected function serializePagination($pagination) { if ($this->serializedPagination !== null) { return $this->serializedPagination; } /** @var \yii\rest\Serializer $serializer */ $serializer = $this->serializer; return $this->serializedPagination = [$serializer->linksEnvelope => \yii\web\Link::serialize($pagination->getLinks(true)), $serializer->metaEnvelope => ['totalCount' => $pagination->totalCount, 'pageCount' => $pagination->getPageCount(), 'currentPage' => $pagination->getPage() + 1, 'perPage' => $pagination->getPageSize()]]; }
public function actionBlog($id = null) { $user = Yii::$app->user->id; /** @var $profile \app\models\Profile */ if ($id === null) { $profile = Profile::findOne(['user_id' => $user]); $queryPosts = Posts::find()->where(['user_id' => $user]); } else { $queryPosts = Posts::find()->where(['user_id' => $id]); $profile = Profile::findOne(['user_id' => $id]); if (!isset($profile)) { Yii::$app->getSession()->setFlash('error', 'that profile not found'); return $this->goHome(); } } $pagination = new Pagination(['defaultPageSize' => 5, 'totalCount' => $queryPosts->count()]); $posts = $queryPosts->orderBy(['id' => SORT_DESC])->offset($pagination->offset)->limit($pagination->limit)->all(); $model = new Posts(); if ($model->load(Yii::$app->request->post()) && $model->validate()) { if ($model->createPost()) { $this->refresh(); } else { $errors = $model->errors; Yii::$app->session->setFlash('error', 'Error: check the fields'); } } return $this->render('blog', ['posts' => $posts, 'profile' => $profile, 'activePage' => Yii::$app->request->get('page', 1), 'countPages' => $pagination->getPageCount(), 'pagination' => $pagination, 'model' => $model]); }
/** * Lists all Survey models. * * @return mixed */ public function actionIndexAjax() { $sort = Yii::$app->request->get('sort', 1); $self = Yii::$app->request->get('self', 0); $queryParams = Yii::$app->request->queryParams; if ($self > 0) { if (ZCommonSessionFun::get_user_id() < 1) { $url = Yii::$app->urlManager->createUrl([ZCommonSessionFun::urlLoginUserStr]); return $this->redirect($url); } $queryParams['SurverySearch']['uid'] = ZCommonSessionFun::get_user_id(); } else { $queryParams['SurverySearch']['is_publish'] = 1; } $queryParams['SurverySearch']['is_publish'] = 1; $this->layout = false; $searchModel = new SurverySearch(); $query = $searchModel->query($queryParams); $count = $query->count(); // 分页 $pagination = new Pagination(); // 每页现实数量 $pagination->pageSize = $this->pageSize; // 总数量 $pagination->totalCount = $count; $offset = $pagination->getOffset(); $limit = $pagination->getLimit(); $query->offset($offset); $query->limit($limit); if ($self > 0) { $sort = 1; } // 最新 if ($sort > 0) { $query->orderBy(['created' => SORT_DESC]); } else { $query->orderBy(['answer_count' => SORT_DESC]); } $a_models = $query->all(); $role = ZCommonSessionFun::get_role(); $pageCount = $pagination->getPageCount(); $page = Yii::$app->request->get('page', 0); $data = ''; // 有数据,从第1页开始到最后一页 if ($pageCount > 0 && $page > 0) { // echo $page,$pageCount; // 超过最后一页 if ($page > $pageCount) { $tempData['data'] = $data; $tempData['status'] = 0; $tempData['message'] = ''; echo json_encode($tempData); exit; } foreach ($a_models as $key => $row) { if ($row->tax == 1) { $url = Yii::$app->urlManager->createUrl(['answer/step1', 'id' => $row->id]); } else { $url = Yii::$app->urlManager->createUrl(['answer/step2-answer2', 'id' => $row->id]); } $image = common\models\Survey::getImageUrl($row); $is_top_text = ''; $is_top_url = ''; $op0 = Yii::$app->urlManager->createUrl(['survey/recommend', 'id' => $row->id, 'op' => 0]); $op1 = Yii::$app->urlManager->createUrl(['survey/recommend', 'id' => $row->id, 'op' => 1]); $is_top = 0; if ($row->is_top > 0) { $is_top_text = '取消推荐'; $is_top = 0; } else { $is_top_text = '推荐'; $is_top = 1; } $str_recommend = ''; if ($role == 1) { $str_recommend = <<<str \t\t\t\t<a \t\t\t\t\tis_top="{$is_top}" op0="{$op0}" op1="{$op1}" \t\t\t\t\tclass="play recommend" data-ui="danger small icon-right" style="right: 75px;"> {$is_top_text}<i \t\t\t\t\t\tclass="iconfont icon-right"></i> \t\t\t\t</a> str; } if ($self > 0) { $row_ur_done = Yii::$app->urlManager->createUrl(['survey/done', 'id' => $row->id]); // 发布 $row_ur_done_publish = Yii::$app->urlManager->createUrl(['survey/done', 'is_ajax' => 1, 'id' => $row->id]); $row_ur_change = Yii::$app->urlManager->createUrl(['survey/step2', 'id' => $row->id]); $data .= <<<str <dl> <a href="{$url}"> <dt> <img src="{$image}" alt="你有多怕谈恋爱:恋爱恐怖程度自评"> </dt> <dd> <h3>{$row->title}</h3> </dd> <dd>{$row->intro}</dd> <dd> <a class="btn_bg" href="{$row_ur_done}">预览</a> \t\t\t\t \t\t\t\t <a class="btn_bg ajax-publish" href="{$row_ur_done_publish}">发布</a> \t\t\t\t \t\t\t\t <a class="btn_bg" href="{$row_ur_change}">修改</a> \t\t\t\t\t<span>测试过:{$row->answer_count}</span> </dd> </a> </dl> str; } else { $data .= <<<str \t\t\t <li class="diy-item" date-id="2626"><a \t\t\t\t\thref="{$url}" \t\t\t\t\ttarget="_blank"> \t\t\t\t\t\t<figure class="cover"> \t\t\t\t\t\t\t<img class="" \t\t\t\t\t\t\t\tsrc="{$image}"> \t\t\t\t\t\t</figure> \t\t\t\t\t\t<div class="diy-meta"> \t\t\t\t\t\t\t<div class="title mui-ellipsis">{$row->title}</div> \t\t\t\t\t\t\t<span class="iconfont icon-start-filled5"></span> <span \t\t\t\t\t\t\t\tclass="count">{$row->answer_count}人在测</span> \t\t\t\t\t\t\t<div class="desc mui-ellipsis">{$row->intro}</div> \t\t\t\t\t\t</div> \t\t\t\t</a> {$str_recommend} \t\t\t\t<a \t\t\t\t\thref="{$url}" \t\t\t\t\tclass="play" data-ui="danger small icon-right"> 去测<i \t\t\t\t\t\tclass="iconfont icon-right"></i> \t\t\t\t</a></li> str; } } } $tempData['data'] = $data; $tempData['status'] = 0; $tempData['message'] = ''; echo json_encode($tempData); exit; }
public function actionSearch() { $q = Yii::$app->getRequest()->getQueryParam('q'); $query = Posts::find()->where(['hide' => 0])->where(['like', 'full_text', $q]); $pagination = new Pagination(['defaultPageSize' => 5, 'totalCount' => $query->count()]); $posts = $query->offset($pagination->offset)->limit($pagination->limit)->all(); Posts::setNumbers($posts); return $this->render('search', ['posts' => $posts, 'q' => $q, 'active_page' => Yii::$app->request->get("page", 1), 'count_pages' => $pagination->getPageCount(), 'pagination' => $pagination]); }
/** * Serializes a pagination into an array. * @param Pagination $pagination * @return array the array representation of the pagination * @see addPaginationHeaders() */ protected function serializePagination($pagination) { return [$this->linksEnvelope => Link::serialize($pagination->getLinks(true)), $this->metaEnvelope => ['total-count' => $pagination->totalCount, 'page-count' => $pagination->getPageCount(), 'current-page' => $pagination->getPage() + 1, 'per-page' => $pagination->getPageSize()]]; }