ホームページ  >  記事  >  バックエンド開発  >  CLinkPager を使用した Yii ページング

CLinkPager を使用した Yii ページング

不言
不言オリジナル
2018-06-15 15:40:451537ブラウズ

この記事では、Yii でのページングに CLinkPager を使用する方法を主に紹介します。必要な方は参考にしてください。

この記事では、YII でのページングに CLinkPager を使用する方法を主に説明します。ページングを定義するオブジェクトの数:

最初にコンポーネントで LinkPager をカスタマイズし、CLinkPager を継承します

具体的なコードは次のとおりです:

<?php
/**
 * CLinkPager class file.
 *
 * @link http://www.yiiframework.com/
 * @copyright Copyright © 2008-2011 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

/**
 * CLinkPager displays a list of hyperlinks that lead to different pages of target.
 *
 * @version $Id$
 * @package system.web.widgets.pagers
 * @since 1.0
 */
class LinkPager extends CLinkPager
{
 const CSS_TOTAL_PAGE=&#39;total_page&#39;;
 const CSS_TOTAL_ROW=&#39;total_row&#39;;
 
 /**
 * @var string the text label for the first page button. Defaults to &#39;<< First&#39;.
 */
 public $totalPageLabel;
 /**
 * @var string the text label for the last page button. Defaults to &#39;Last >>&#39;.
 */
 public $totalRowLabel;
 
 /**
 * Creates the page buttons.
 * @return array a list of page buttons (in HTML code).
 */
 protected function createPageButtons()
 {
 

    $this->maxButtonCount=8; 
    $this->firstPageLabel="首页";
    $this->lastPageLabel=&#39;末页&#39;; 
    $this->nextPageLabel=&#39;下一页&#39;;
    $this->prevPageLabel=&#39;上一页&#39;; 
    $this->header="";
 
 if(($pageCount=$this->getPageCount())<=1)
  return array();
 
 list($beginPage,$endPage)=$this->getPageRange();
 $currentPage=$this->getCurrentPage(false); // currentPage is calculated in getPageRange()
 $buttons=array();
 
 // first page
 $buttons[]=$this->createPageButton($this->firstPageLabel,0,self::CSS_FIRST_PAGE,$currentPage<=0,false);

 // prev page
 if(($page=$currentPage-1)<0)
  $page=0;
 $buttons[]=$this->createPageButton($this->prevPageLabel,$page,self::CSS_PREVIOUS_PAGE,$currentPage<=0,false);

 // internal pages
 for($i=$beginPage;$i<=$endPage;++$i)
  $buttons[]=$this->createPageButton($i+1,$i,self::CSS_INTERNAL_PAGE,false,$i==$currentPage);

 // next page
 if(($page=$currentPage+1)>=$pageCount-1)
  $page=$pageCount-1;
 $buttons[]=$this->createPageButton($this->nextPageLabel,$page,self::CSS_NEXT_PAGE,$currentPage>=$pageCount-1,false);

 // last page
 $buttons[]=$this->createPageButton($this->lastPageLabel,$pageCount-1,self::CSS_LAST_PAGE,$currentPage>=$pageCount-1,false);
 
 // 页数统计
 $buttons[]=$this->createTotalButton(($currentPage+1)."/{$pageCount}",self::CSS_TOTAL_PAGE,false,false);
 
 // 条数统计
 $buttons[]=$this->createTotalButton("共{$this->getItemCount()}条",self::CSS_TOTAL_ROW,false,false);

 return $buttons;
 }
 
 protected function createTotalButton($label,$class,$hidden,$selected)
 {
 if($hidden || $selected)
  $class.=&#39; &#39;.($hidden ? self::CSS_HIDDEN_PAGE : self::CSS_SELECTED_PAGE);
 return &#39;<li class="&#39;.$class.&#39;">&#39;.CHtml::label($label,false).&#39;</li>&#39;;
 }
 
 /**
 * Registers the needed client scripts (mainly CSS file).
 */
 public function registerClientScript()
 {
 if($this->cssFile!==false)
  self::registerCssFile($this->cssFile);
 }
 
 /**
 * Registers the needed CSS file.
 * @param string $url the CSS URL. If null, a default CSS URL will be used.
 */
 public static function registerCssFile($url=null)
 {
 if($url===null)
  $url=CHtml::asset(Yii::getPathOfAlias(&#39;application.components.views.LinkPager.pager&#39;).&#39;.css&#39;);
 Yii::app()->getClientScript()->registerCssFile($url);
 }
}

定義 CSS スタイル

/**
 * 翻页样式
 */
.page_blue{
 margin: 3px;
 padding: 3px;
 text-align: center;
 font: 12px verdana, arial, helvetica, sans-serif;
}
ul.bluePager,ul.yiiPager
{
 font-size:11px;
 border:0;
 margin:0;
 padding:0;
 line-height:100%;
 display:inline;
 text-aligin:center;
}

ul.bluePager li,ul.yiiPager li
{
 display:inline;
}

ul.bluePager a:link,ul.yiiPager a:link,
ul.bluePager a:visited,ul.yiiPager a:visited,
ul.bluePager .total_page label,ul.yiiPager .total_page label,
ul.bluePager .total_row label,ul.yiiPager .total_row label
{
 border: #ddd 1px solid;
 color: #888888 !important;
 padding:2px 5px;
 text-decoration:none;
}

ul.bluePager .page a,ul.yiiPager .page a
{
 font-weight:normal;
}

ul.bluePager a:hover,ul.yiiPager a:hover
{
 color:#FFF !important; border:#156a9a 1px solid; background-color:#2b78a3
}

ul.bluePager .selected a,ul.yiiPager bluePager .selected a
{
 color:#3aa1d0 !important;
 border: 1px solid #3aa1d0;
}

ul.bluePager .selected a:hover,ul.yiiPager .selected a:hover
{
 color:#FFF !important;
}

ul.bluePager .hidden a,ul.yiiPager .hidden a
{
 border:solid 1px #DEDEDE;
 color:#888888;
}

ul.bluePager .hidden,ul.yiiPager .hidden
{
 display:none;
}

コントローラーでの操作:

//分页操作
$criteria=new CDbCriteria;
$criteria->order=&#39;id DESC&#39;;
$criteria->select=array(&#39;id&#39;,&#39;uid&#39;,&#39;username&#39;,&#39;title&#39;,&#39;thumb&#39;,&#39;url&#39;,&#39;clicks&#39;,&#39;time&#39;,&#39;dateline&#39;,&#39;countfavorite&#39;,&#39;quality&#39;);
$criteria->condition=$sql;
$total = Video::model()->count($criteria);

$pages = new CPagination($total);  
$pages->pageSize=self::PAGE_SIZE;
$pages->applyLimit($criteria);
  
$list = Video::model()->findAll($criteria);

$title = CommonClass::model()->find(array(
 &#39;select&#39;=>array(&#39;cname&#39;),
 &#39;condition&#39;=>&#39;id = &#39;.$id,
));  

$this->render(&#39;application.views.video.list&#39;,array(
 &#39;array&#39;=>$array,
 &#39;arr&#39;=>$arr,
 &#39;result&#39;=>$result,
 &#39;list&#39;=>$list,
 &#39;pages&#39;=>$pages,
 &#39;title&#39;=>$title,
));

views/video/list.php で引用:

<?php
 $this->widget(&#39;LinkPager&#39;, array(&#39;pages&#39; => $pages,));
 ?>

上記は記事の全文です。皆様の学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

yii2 コンポーネントはドロップダウン ボックス検索機能を実装します

Yii2.0 テーブル関連付けクエリの分析

#yii を使用して必須フィールドからアスタリスクを削除する方法

# #

以上がCLinkPager を使用した Yii ページングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。