ホームページ >バックエンド開発 >PHPチュートリアル >Aspnetpager を模倣した PHP ページング クラス コードとソース コード download_PHP チュートリアル

Aspnetpager を模倣した PHP ページング クラス コードとソース コード download_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:15:56851ブラウズ

基本的な論理的な考え方は.netと同じで、エンティティクラスによる設定を配列による設定に置き換えるロジックは比較的単純で、条件判断に基づいてページングHTMLをつなぎ合わせます。 。

には以下のような簡単な機能があります:

1: 関連ボタンを表示するかどうかの設定をサポート
2: ページ数、テキスト名、HTMLタグのクラス名の自由な設定をサポート
3: URL書き換えをサポート渡されたページ (構成配列に書き換えルールを自分で追加する必要があります)

コードを直接アップロードするだけなので簡単です:

コアコード: pager.class.php

コードをコピーします コードは次のとおりです。以下の通り:

class pager{
//ページングパラメータ設定
private $config=array(
//ホームボタンのテキスト
"first_btn_text"=>"Home",
//前ページボタンのテキストテキスト,
"pre_btn_text"=>"前のページ",
//次のページのテキスト
"next_btn_text"=>"次のページ",
//最後のページのテキスト
"last_btn_text" =>"最後のページ",
//レコードの総数*必須
"record_count"=>0,
//ページごとのページサイズ
"pager_size"=>10,
//現在のページ番号*必須
"pager_index"=>1,
//各ページに表示されるボタンの最大数
"max_show_page_size"=>10,
//ブラウザに渡されるページ番号の名前のデフォルトはページです
"querystring_name" => ;"page",
//URL が書き換えられるかどうか、デフォルトは flase
"enable_urlrewriting"=>false,
//page/{page} などの URL 書き換えルール ({page} はページ数を表します)
"urlrewrite_pattern"= >"",
//ページングコンテナの CSS 名
"classname"=>"paginator",
//現在のページボタンのクラス名
"current_btn_class"=>"cpb" ,
//ページングのテキスト説明spanタグのcss
"span_text_class"=>"stc",
/*ジャンプ先の詳細テキスト
*totleは総ページ数、
*sizeはページ数を表します各ページの
* goto はジャンプする入力ボックスを表します
* Record はレコードの総数を表します
* Index は現在のページ番号を表します
*/
"jump_info_text"=>"合計 {totle} ページ、{size} レコードページごとに、{goto} ページにジャンプします",
// ジャンプボタンのテキスト
"jump_btn_text"=>"OK",
//ジャンプを表示するかどうか
"show_jump"=>false,
/ /前のボタンのホームページと前のページを表示するかどうか
"show_front_btn"= >true,
//ボタンの次のページと最後のページを表示するかどうか
"show_last_btn"=>true
);クラスのコンストラクター
* $config: ページングクラスの構成
* /
public function __construct($config)
{
$this->init_config($config)
}
function __destruct()
{
unset; ($this->config);
}
/*
* ページングのメイン関数を構築します
*/
public function builder_pager()
{
//ページ文字列
$pager_arr=array();各ページの
$pager_size=$this->config["pager_size "];
//ページングの合計数を取得します
$pager_num=$this->config["record_count"]%$pager_size==0? $this->config["record_count"]/$pager_size:floor( $this->config["record_count"]/$pager_size)+1;
//現在のページ番号が 0 の場合は、1 に設定します。
$pager_index=round($this->config["pager_index"] )==0?1:round($this->config["pager_index"]);
//現在のページ番号が次より大きい場合最後のページと同じか、現在のページ番号が最後のページに設定されます
$pager_index=$pager_index> ;=$pager_num?$pager_num:$pager_index;
//次のページのページ番号
$pager_next=$pager_index> ;=$pager_num?$pager_num:($pager_index+1);
//ジャンプする必要がある URL を取得します
$url=$this->get_url();
//先頭の div を追加します
$classname= $this->config["classname"];
$pager_arr[]="
n"
//最初の 2 つのボタンの HTML を追加します
if($this- >config["show_front_btn"])
{
//現在のページ番号が 1 の場合、前面の 2 つのボタンは無効になります
$attr=$pager_index==1?"disabled=disabled":""
$; pager_arr[]=$this->get_a_html(self::format_url($url,1),$this-> config["first_btn_text"],$attr);
$pager_arr[]=$this->get_a_html (self::format_url($url,$pager_index-1),$this->config["pre_btn_text"], $attr);
}
//現在表示されているページ番号の先頭 1~10 1 11~20 11
$current_pager_start=$pager_index%$pager_size==0?($pager_index/$pager_size-1)*$pager_size+1 :floor($pager_index/$pager_size)*$pager_size+1;
//終わり現在表示されているページ番号
$current_pager_end=($current_pager_start+$pager_size-1)>=$pager_num?$pager_num:($current_pager_start+$pager_size- 1);
//前のレベルにジャンプするHTMLを追加
if($pager_index>) ;$pager_size)
{
$pager_arr[]=$this->get_a_html(self::format_url($url,$current_pager_start- 1),"...")
}
//メインページ番号部分
for($i=$current_pager_start;$i<=$current_pager_end;$i++)
{
if($i!=$pager_index)
{
$pager_arr[]=$this->get_a_html(self::format_url( $url,$i),$i);
}else{
//これが現在のページの場合
$pager_arr[]=$this ->get_span_html($i,$this->config["current_btn_class" ]);
}
}
//HTML の次のレイヤーを追加します
if($pager_index<=($pager_num-$pager_num%$pager_size ))
{
$pager_arr[]=$this->get_a_html(self ::format_url($url,$current_pager_end+1),"...");
//添加后面两个按钮的html
if($this->config["show_last_btn"])
{
//如果当前的页码为最后一页 则last这两个按钮则会被禁用
$attr=$pager_index>=$pager_num?"disabled=disabled":"";
$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_next),$this->config["next_btn_text"],$attr);
$pager_arr[]=$this->get_a_html(self::format_url($url,$pager_num),$this->config["last_btn_text"],$attr);
}
//添加跳转的html
if($this->config["show_jump"])
{
$patterns=array("/\{totle\}/","/\{size\}/","/\{goto\}/","/\{record\}/","/\{index\}/",);
$replacements=array(
$pager_num,
$pager_size,
"\n",
$this->config["record_count"],
$this->config["pager_index"]
);
//替换特定的标签组成跳转
$pager_arr[]=preg_replace($patterns,$replacements,$this->config["jump_info_text"]);
$btn_text=$this->config['jump_btn_text'];
$pager_arr[]="".$this->config['jump_btn_text']."\n";
$pager_arr[]=$this->get_jumpscript($url);
}
$pager_arr[]="
";
$this->config["pager_index"]=$pager_index;
return implode($pager_arr);
}
/*
*処理が必要な URL を取得、設定の書き換えをサポート、さまざまな URLパラメータ
*/
private function get_url()
{
//URL 書き換えが許可されている場合
if($this->config["enable_urlrewriting"])
{
//呼び出し元のファイルが存在する URL を取得する
$file_path ="http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
//呼び出し元の URL が存在するネットワーク ディレクトリを取得します
$file_path=substr($file_path,0, strripos($file_path, "/"))."/";
//書き換えルールをディレクトリに直接追加して、新しい URL を形成します
$url=$file_path.$this->config["urlrewrite_pattern"];
}else{
// 現在呼び出しているページの絶対 URL を取得します
$url="http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
//ブラウザに渡されるページング パラメータ
$querystring_name= $this->config['querystring_name'];
//URL に php? 文字列が含まれている場合は、ページング パラメータを置き換える必要があります
if(strpos($url," php?"))
{
// page=xxx の単語がある場合
$pattern="/$querystring_name=[0-9]*/";
if(preg_match($pattern,$url))
{
//page=*** が含まれます。テキスト内の数字を {0} に置き換えます
$url=preg_replace($pattern,"$querystring_name={page}",$url); "&$querystring_name={page}";
}
}else{
//パラメータを直接追加してページの完全な URL を形成します
$url.="?$querystring_name={page}"; return $url;
}
/*
* get a タグの HTML
*$url: a タグの宛先 HTML
*$title: a タグのタイトル
**$attr: a タグに追加の属性を記述する必要はありません
*/
private static function get_a_html($url, $title,$attr="")
{
return "$titlen";
}
/ *
* Span タグの HTML を取得します
* $num: Span 内のテキスト、つまりページ番号
* $classname:span タグのクラス名
*/
private static function get_span_html($num,$classname)
{
return "$num< /span>n";
}
/*
* フォーマットされた URL
* $url 元の URL
* $page ページ番号
*/
プライベート静的関数 format_url($url,$page)
{
return preg_replace("/ {page}$/",$page,$url);
}
/*
*ページング設定ファイルを初期化します
*パラメータにキー値が含まれていない場合は、宣言された値がデフォルトで使用されます
* /
プライベート関数 init_config($config)
{
//値が存在するか、配列であるか、レコードが含まれているかを判断します
if(isset($config) &&is_array($config)&&count($config)>0) {
foreach($config as $key=>$val)
{
$this->config[$key]=$val;
}
}
/*
* ジャンプ関数スクリプトを構築するメソッド
*$url: ジャンプする必要がある URL
*/
private function get_jumpscript($url)
{
$scriptstr = "n";
return $scriptstr;
}
/*
* .net の format メソッドと同様の関数を php で構築します
* 使用法: format("hello,{0},{1},{2}", 'x0','x1','x2')
*/
プライベート関数 format() {
$args = func_get_args( );
if (count($args) == 0) { return;}
if (count($args) == 1) { return $args[0] }
$str = array_shift($args); $str = preg_replace_callback('/\{(0|[1-9]\d*)\}/', create_function('$match', '$args = '.var_export($args, true).'; return isset( $args[$match[1]]) ? $args[$match[1]] : $match[0];'), $str);
}
}
?


配列パラメータを使用して直接呼び出します




コードをコピーします

コードは次のとおりです:

$config1=array(
"record_count"=>703,
"pager_size" =>10 , "show_jump"=>true, "pager_index"=>$_GET["page"] ); $pager_simple=new pager($config1);
echo $pager_simple->builder_pager ();
?>
最後に、デモの写真を見てみましょう:
Aspnetpager を模倣した PHP ページング クラス コードとソース コード download_PHP チュートリアル
私は最近 PHP を学んだばかりなので、コード内に現れる不規則性、非効率性、冗長性、または設計上の問題についてアドバイスをお願いします。

デモソースコードのダウンロード

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326058.html技術記事基本的な論理的な考え方は.netと同じで、エンティティクラスによる設定を配列による設定に置き換えるロジックは比較的単純で、条件判断に基づいてページングHTMLをつなぎ合わせます。 。 以下のようなものがあります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。