-
- /***************************************
- ファイル: class.paging.php
- php ページング クラス コード
- *************************************/
- クラスページング{
-
- var $sql_results;
- var $sql_query;
-
- var $display_offset;
- var $display_limit;
- var $display_limit_URI;
- var $display_currentpage;
- var $display_totalpages;
- var $alt_content_count;
-
- var $display_offset_var;
- var $display_limit_var;
-
- var $display_mid_offset;
- var $display_link_first;
- var $display_link_prev;
- var _link_next;
- var $display_link_last ;
-
- var $page_filename;
- var $page_uri;
-
- var $content;
- var $content_type;
- var $content_count;
-
- ## CONSTRUCTOR
- 関数ページング($offsetVar='offset',$limit=10,$ MidOffset=2){
- $this->display_offset = isset($_REQUEST[$offsetVar])?$_REQUEST[$offsetVar]:0;
- $this->display_limit = is_numeric($limit)?$limit:10 ;
- $this->display_mid_offset = $midOffset;
- $this->display_offset_var = $offsetVar;
- $this->display_currentpage= ceil($this->display_offset / $this->display_limit);
- }
-
- ## データ処理
- function setContent($content){
- if( is_array($content) )
- $this->content_type = 'array';
-
- $this->content = $content;
- $this ->private_contentDetails();
- $this->getLinks();
- }
-
- function private_contentDetails(){
- if( $this->content_type == 'array' )
- $this->content_count = count ($this->content);
- }
-
- function getContent(){
- $returnAry = array();
- for(
- $i=$this->display_offset;
- $i ++$i
- )
- array_push($returnAry,$this->content[$i]);
-
- return $returnAry;
- }
-
- ## ナビゲーションへのリンク
- function getLinks(){
- $this->getNextLink('');
- $this->getFirstLink('');
- $this->getLastLink ('');
- $this->getPrevLink('');
- }
-
- function getNext(){
- return $this->display_link_next;
- }
-
- function getPrev(){
- return $this-> ;display_link_prev;
- }
-
- function getFirst(){
- return $this->display_link_first;
- }
-
- function getLast(){
- return $this->display_link_last;
- }
-
- function getNextLink($caption){
- // コンテンツをカウントしているか、代替ユーザーが指定したカウントをカウントしているかを確認します
- if( $this->alt_content_count )
- $count = $this->alt_content_count;
- else
- $count = $this->content_count;
-
- if( $this->display_offset+$this->display_limit-$count >=0 ){
-
- $this->display_link_next = $this->display_offset;
- }else{
- $this-> ;display_link_next = min(
- $count-1,
- $this->display_offset+$this->display_limit
- );
- }
- return $this->buildLink( $this->buildNewURI( $this-> display_link_next), $caption );
- }
-
- function getPrevLink($caption){
- $this->gt;display_link_prev = max(
- 0,
- $this->display_offset-$this->gt;display_limit
- );
- return $this->buildLink( $this->buildNewURI( $this->display_link_prev), $caption );
- }
-
- function getFirstLink($caption){
- $this->display_link_first = 0;
- return $ this->buildLink( $this->buildNewURI( $this->display_link_first), $caption );
- }
-
- function getLastLink($caption){
- $this->display_link_last = $this->content_count -$this->display_limit;
- return $this->buildLink( $this->buildNewURI( $this->display_link_last), $caption );
- }
-
- ## NUMBERS
- function getPageCount(){
- if( $this->alt_content_count )
- $count = $this->alt_content_count;
- else
- $count = $this->content_count;
-
- $this->display_totalpages = ceil(
- $count / $this ->display_limit
- );
- return $this->display_totalpages;
- }
-
- function getPageNumbers(){
-
- // 変数を定義します
- $midOffset = $this->gt;display_mid_offset;
- $firstLink = $this->gt;display_link_first;
- $pageCount = $this->getPageCount();
- $ thisPage = $this->display_currentpage;
- $limit = $this->display_limit;
- $displayed=$midOffset*2+1;
- $returnAry=array();
-
- // dots
- $returnAry['afterdot '] = '';
- $returnAry['beforedot'] = '';
-
-
- // 2 回中央にすると、その数はすべてのページを合わせた値よりも小さくなります
- if( ($midOffset*2+1) < $pageCount ){
- $min = max($firstLink,$thisPage-$midOffset);
- $max = min($pageCount,$thisPage+$midOffset+1);
- $total = $max-$min;
-
- / / これにより、
- // ページ 1 または 2 の途中ではない場合でも、x 個のページが表示されます
- if($total<$displayed){
-
- if($min==0){
- $max+= $displayed-$total;
- }
- if($max==$pageCount){
- $min-=$displayed-$total;
- }
- }
-
- }else{
- # 数値のセットを出力するだけです
- $min = 0;
- $max = $pageCount;
- }
-
- // ページを実行し、現在のページを確認し、名前を付けます
- for($i=$min;$i<$max;++$i){
- $cp = 'いいえ';
- if($thisPage==$i)
- $cp = 'はい';
-
- if($max!=$pageCount)
- $returnAry['afterdot'] = '...';
-
- if($min>0)
- $returnAry['beforedot'] = '...';
-
- array_push($returnAry,
- array(
- 'currentPage'=>$cp,
- 'pageNumber'=>) ($i+1),
- 'pageLink'=>$this->buildLink( $this->buildNewURI( ($i*$limit) ), ($i+1) )
- )
- );
- }
-
- return $returnAry;
-
- }
-
- function makePageNumbers($format, $pages,$boldCurrent=true,$separator=' '){
- $retPages = '';
-
- // 実際のページ番号を作成します
- foreach ($pages as $key => $value):
- if(is_numeric($key))
- $retPages .= ('yes'==$value['currentPage'] && $boldCurrent)?''.$value['pageLink'] .''.$separator:$value['pageLink'].$separator;
- endforeach;
-
- $format = str_replace( array('{beforedot}',
- '{afterdot}',
- ' {pages}',
- '{separator}'),
- array( $pages['beforedot'],
- $pages['afterdot'],
- $retPages),
- $format);
- return $format;
- }
-
- ## チェック
- function isFirstPage(){
- if($this->display_currentpage==0)
- return true;
- return false;
- }
- function isLastPage(){
- // 基底が 0 なので 1 を追加します、 1 ではありません
- if($this->display_currentpage+1==$this->getPageCount())
- return true;
- return false;
- }
-
- ## 関数
- function getPageName(){
- $fileName =explode ('/',$_SERVER['REQUEST_URI']);
- $fileName = $fileName[count($fileName)-1];
-
- if(strpos($fileName,'?')>0) {
- $ fileName =explode('?',$fileName);
- $fileName = $fileName[0];
- }
-
- return $fileName;
- }
-
- function getCleanURI(){
- $URI = $_SERVER['REQUEST_URI'] ;
- if(strpos($URI,'?')>0){
- $URI =explode('?',$URI);
- $URI = $URI[1];
-
- $URI = preg_replace(' /b'.$this->display_offset_var.'b[=0-9&]{2,20}/','',$URI);
- //$URI = preg_replace('/b'.$this- >display_limit_var.'b[=0-9&]{2,20}/','',$URI);
-
- return $URI;
- }
- return false;
- }
-
- function buildNewURI($offset){
- $newFile = $this->getPageName() 。 「?」 。 $this->getCleanURI();
-
- $lastChar = substr($newFile,strlen($newFile)-1,1);
- if( $lastChar != '&' && $lastChar != '?' )
- $newFile.='&';
-
- $newFile .= $this->display_offset_var.'='.$offset.'&';
- //$newFile .= $this->display_limit_var.'='。 $limit.'&';
-
- return $newFile;
- }
-
- function buildLink( $href, $caption, $target=NULL ){
- if( $target != NULL )
- $target = ' target="' .$target.'"';
- return ''.$caption.'';
- }
-
- 関数encodeURI($str){
- $salt = 'falaful';
- $str = strrev($salt.$str);
- returnbase64_encode($str);
- }
-
- function decodeURI($str){
- $salt = 'falaful';
- $str = strrev(base64_decode($str) );
- $str = substr( $str, strlen($salt), strlen($str) );
- return $str;
- }
- ##############
- #
- #これらの関数は、この
- #クラスを実行するためのクエリを入力するためのものです。他の関数はすべて
- #x 個の行を取得し、それを切り捨てます。これらの関数は
- #のみ、任意の量に制限されます。これにより、パフォーマンスが向上します。
- #理由は、3 が必要なときに 1,000,000 行を取得しないようにするためです。
- #
- ###############
-
- function runWQuery($db, $statement, $table, $where=''){
-
- // 合計行数を取得
- $db->query( 'SELECT COUNT(*) AS count FROM '. $table . ' ' . $where );
- $db->movenext ();
- $this->alt_content_count = $db->col['count'];
-
- // クエリに制限を追加します
- $where .= ' LIMIT ' 。 $this->display_offset .', '.$this->display_limit;
-
- // クエリを保存
- $this->sql_query = $statement . ' から ' 。 $テーブル。' '。 $where;
-
- // print query
- //echo $this->gt;sql_query;
-
- // run query
- $db->query( $this->>sql_query );
- $this->sql_results = array();
-
- // 結果を保存
- while($db->movenext()){
- array_push($this->sql_results , $db->col);
- }
-
- return $this-> ;runQueryActions();
- }
-
- function runQueryActions(){
- $this->setContent( $this->sql_results );
-
- $pages = $this->getPageNumbers();
-
- // 実際のものにするページ番号
- $retPages = $this->makePageNumbers( '{beforedot} {pages} {afterdot}', $pages, true, ' ' );
-
- // 新しい表示を取得
- return array(
- 'content'= >$this->sql_results,
- 'pages'=>$retPages
- );
- }
- }
- ?>
-
复制代码
|