Aspnetpager を模倣した PHP ページング クラス コードとソース コードのダウンロード

WBOY
リリース: 2016-06-13 11:57:44
オリジナル
1112 人が閲覧しました

基本的な論理的考え方は .net と同じで、エンティティ クラスによる構成を配列による構成に置き換えるというもので、ロジックは比較的単純であり、ページング HTML は条件判断に基づいて接続されます。

には次の単純な機能があります。

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

簡単、コードに移動するだけです:

コアコード: pager.class.php

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


class pager{
//ページングパラメータ設定
private $config=array(
//ホームボタンのテキスト
"first_btn_text" => ;"Homepage",
//前のページのボタンのテキスト,
"pre_btn_text"=>"前のページ",
//次のページのテキスト
" next_btn_text"=> "次のページ",
//最後のページのテキスト,
"last_btn_text"=>"最後のページ",
//レコードの総数* 必須
"record_count"=> 0,
//1 ページあたりのページ サイズ
"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",
//スパンタグを記述するページネーションテキストの 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->gt;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->gt ;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";
//最初の HTML を追加します2 つのボタン
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_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) );
}else{
$url.="&$querystring_name={page}";
}
}else{
// ページング用の完全な URL を形成するためにパラメータを直接追加します
$url.="?$querystring_name ={page}";
}
}
return $url;
}
/*
* の HTML を取得します。 a タグ
*$url: a タグの方向 html
*$title: a タグのタイトル
**$attr: a タグの追加属性は必要ありません
*/
プライベート静的関数 get_a_html($url,$title,$ attr="")
{
return "$titlen";
}
/*
* SPAN タグの HTML を取得
* $num: SPAN 内のテキストつまり、ページ番号
* $classname: spam タグのクラス名
*/
private static function get_span_html($num,$classname)
{
return "< ;span class="" .$classname. "">$numn";
}
/*
* 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["ページ"]
);
$pager_simple=new pager($config1);
echo $pager_simple->builder_pager();


最後に、デモの写真を見てみましょう:


私は最近 PHP を学んだばかりなので、不規則性、非効率性、冗長性、または設計上の問題がある場合はお知らせください。コードの中でアドバイスを与えます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート