完美php文章分页类

 更新时间:2016年11月25日 16:29  点击:2243

 class SubPages{
  private   $each_disNums;//每页显示的条目数
  private   $nums;//总条目数
  private   $current_page;//当前被选中的页
  private   $sub_pages;//每次显示的页数
  private   $pageNums;//总页数
  private   $page_array = array();//用来构造分页的数组
  private   $subPage_link;//每个分页的链接
  private   $subPage_type;//显示分页的类型
     /*
     __construct是SubPages的构造函数,用来在创建类的时候自动运行.
     @$each_disNums   每页显示的条目数
     @nums     总条目数
     @current_num     当前被选中的页
     @sub_pages       每次显示的页数
     @subPage_link    每个分页的链接
     @subPage_type    显示分页的类型
   
     当@subPage_type=1的时候为普通分页模式
     example:   共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
     当@subPage_type=2的时候为经典分页样式
     example:   当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */
  function __construct($each_disNums,$nums,$current_page,$sub_pages,$subPage_link,$subPage_type){
   $this->each_disNums=intval($each_disNums);
   $this->nums=intval($nums);
   if(!$current_page){
    $this->current_page=1;
   }else{
    $this->current_page=intval($current_page);
   }
   $this->sub_pages=intval($sub_pages);
   $this->pageNums=ceil($nums/$each_disNums);
   $this->subPage_link=$subPage_link;
   $this->show_SubPages($subPage_type);     //调用show_SubPages函数
    //echo $this->pageNums."--".$this->sub_pages;
  }
  function __destruct(){
   unset($each_disNums);
   unset($nums);
   unset($current_page);
   unset($sub_pages);
   unset($pageNums);
   unset($page_array);
   unset($subPage_link);
   unset($subPage_type);
  }
   /*
   show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页 
     */
  function show_SubPages($subPage_type){
   if($subPage_type == 1){
    $this->subPageCss1();
   }elseif ($subPage_type == 2){
    $this->subPageCss2();
   }
  }
   
   
     /*
   用来给建立分页的数组初始化的函数。
     */
  function initArray(){
   for($i=0;$i<$this->sub_pages;$i++){
    $this->page_array[$i]=$i;
   }
   return $this->page_array;
  }
   /*
   construct_num_Page该函数使用来构造显示的条目
   即使:[1][2][3][4][5][6][7][8][9][10]
     */
  function construct_num_Page(){
   if($this->pageNums < $this->sub_pages){
    $current_array=array();
    for($i=0;$i<$this->pageNums;$i++){
     $current_array[$i]=$i+1;
    }
   }else{
    $current_array=$this->initArray();
    if($this->current_page <= 3){
     for($i=0;$i<count($current_array);$i++){
      $current_array[$i]=$i+1;
     }
    }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){
     for($i=0;$i<count($current_array);$i++){
      $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i;
     }
    }else{
     for($i=0;$i<count($current_array);$i++){
      $current_array[$i]=$this->current_page-2+$i;
     }
    }
   }   
   return $current_array;
  }
   /*
     构造普通模式的分页
     共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
     */
  function subPageCss1(){
   $subPageCss1Str="";
   $subPageCss1Str.="共".$this->nums."条记录,";
   $subPageCss1Str.="每页显示".$this->each_disNums."条,";
   $subPageCss1Str.="当前第".$this->current_page."/".$this->pageNums."页 ";
   if($this->current_page > 1){
    $firstPageUrl=$this->subPage_link."1";
    $prewPageUrl=$this->subPage_link.($this->current_page-1);
    $subPageCss1Str.="[<a href='$firstPageUrl'>首页</a>] ";
    $subPageCss1Str.="[<a href='$prewPageUrl'>上一页</a>] ";
   }else {
    $subPageCss1Str.="[首页] ";
    $subPageCss1Str.="[上一页] ";
   }
     
   if($this->current_page < $this->pageNums){
    $lastPageUrl=$this->subPage_link.$this->pageNums;
    $nextPageUrl=$this->subPage_link.($this->current_page+1);
    $subPageCss1Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
    $subPageCss1Str.="[<a href='$lastPageUrl'>尾页</a>] ";
   }else {
    $subPageCss1Str.="[下一页] ";
    $subPageCss1Str.="[尾页] ";
   }  
   echo $subPageCss1Str;  
  }
   
   /*
     构造经典模式的分页
     当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     *//* 产品页用*/
  function subPageCss2(){
   $subPageCss2Str="";
   
   //jason edit
   //$subPageCss2Str.="<li class="text">当前第".$this->current_page."/".$this->pageNums."页 </li>";
     
   if($this->current_page > 1){
    $firstPageUrl=$this->subPage_link."1";
    $prewPageUrl=$this->subPage_link.($this->current_page-1);
    //$subPageCss2Str.="<li class="pre"><a href='$firstPageUrl'>首 页</a></li>";
    $subPageCss2Str.="<li class="pre"><a href='$prewPageUrl'>上一页</a></li>";
   }else {
    //$subPageCss2Str.="<li class="prea">首 页</li> ";
    $subPageCss2Str.="<li class="prea">上一页</li> ";
   }
     
   $a=$this->construct_num_Page();
   for($i=0;$i<count($a);$i++){
    $s = $a[$i];
    if($s == $this->current_page ){
     $subPageCss2Str.="<li class="num">".$s."</li>";
    }else{
     $url=$this->subPage_link.$s;
     //echo $url;exit;
     $subPageCss2Str.="<li class="num2"><a href='$url'>".$s."</a></li>";
     //echo $subPageCss2Str;
    }
   }
   //exit;
   if($this->current_page < $this->pageNums){
    $lastPageUrl=$this->subPage_link.$this->pageNums;
    $nextPageUrl=$this->subPage_link.($this->current_page+1);
    $subPageCss2Str.=" <li class="next"><a href='$nextPageUrl'>下一页</a></li> ";
    //$subPageCss2Str.="<li class="next"><a href='$lastPageUrl'>尾 页</a></li> ";
   }else {
    $subPageCss2Str.="<li class="nexta">下一页</li>";
    //$subPageCss2Str.="<li class="nexta">尾 页</li> ";
   }
   echo $subPageCss2Str;
  }
 }

class Cache
{
 protected $_cacheDir;

 public function __construct()
 {
  $this->_cacheDir = "./cache";
 }

 public function setCacheDir($cacheDir)
 {
  if(empty($cacheDir)){
   $this->_cacheDir = $this->_cacheDir;
  }else{
   $this->_cacheDir = $cacheDir;
  }
 }

 public function getCache($name)
 {
  $file_path = $this->_cacheDir.'/namma_cache-'.$name;
  if(!file_exists($file_path))
  {
   return false;
  }
  $handle = @fopen($file_path,'rb');
  $data = @fread($handle,filesize($file_path));
  return $this->unformatData($data);
  @flose($handle);
 }

 public function setCache($name,$data)
 {
  $file_path = $this->_cacheDir.'/namma_cache-'.$name;
  $data = $this->formatData($data);
  $fp = fopen($file_path, 'w');
        fwrite($fp,$data);
        fclose($fp);
        return $file_path;
 }

 public function formatData($data)
 {
  return serialize($data);
 }

 public function unformatData($data)
 {
  return unserialize($data);
 }
}

<?php
 class Shtml{
  var $DataSource;        //array
  var $Templet;           //string
  var $FileName;
  
  //绑定数据源
  function BindData($arr){
   $this->DataSource = $arr;
  }
  
  function Create(){
  //只谈思路,自己写:
   $tmp = $this->Templet;
   foreach($this->DataSource as $key=>$value){
  //替换模板字符串中<FIELD_$key> 的字符串
    $tmp = str_replace('<FIELD_'.$key.'>',$value,$tmp);
   }
  //生成文件,存盘。
   $fp = fopen($this->FileName,'w');
   if (fwrite ($fp,$tmp)){
    fclose ($fp);
   }else {
    fclose ($fp);
   }
  }
 }
 
 //用法:
 /*$arr = array();
 $arr["title"] = "这里是标题";
 $arr["content"] = "这里是内容";
 $obj = new Shtml;
 $obj->FileName="xxx.htm";
 $obj->Templet="标题:<FIELD_title>内容:<FIELD_content>";
 $obj->BindData($arr);
 //一切OK,万事达吉
 $obj->Create();*/
?>

class smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;

/* Private Variables */
var $sock;

/* Constractor */
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
{
 $this->debug = FALSE;
 $this->smtp_port = $smtp_port;
 $this->relay_host = $relay_host;
 $this->time_out = 30; //is used in fsockopen()
 $this->auth = $auth;//auth
 $this->user = $user;
 $this->pass = $pass;
 $this->host_name = "localhost"; //is used in HELO command
 $this->log_file = "";
 $this->sock = FALSE;
}

/* Main Function */
function sendmail($to, $from ,$fromname, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = ""){
 $mail_from = $this->get_address($this->strip_comment($from));
 $body = ereg_replace("(^|( ))(.)", ".", $body);
 $header .= "MIME-Version:1.0 ";
 if($mailtype=="HTML"){
  $header .= "Content-Type:text/html;charset=utf-8 ";
 }
 $header .= "To: ".$to." ";
 if ($cc != ""){
  $header .= "Cc: ".$cc." ";
 }
 $header .= "From: $fromname<".$fromname."> ";
 $header .= "Subject: ".$subject." ";
 $header .= $additional_headers;
 $header .= "Date: ".date("r")." ";
 $header .= "X-Mailer:By Redhat (PHP/".php教程version().") ";
 list($msec, $sec) = explode(" ", microtime());
 $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from."> ";
 $TO = explode(",", $this->strip_comment($to));

 if ($cc != ""){
  $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
 }
 if ($bcc != ""){
  $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
 }
 $sent = TRUE;
 foreach ($TO as $rcpt_to){
  $rcpt_to = $this->get_address($rcpt_to);
  if (!$this->smtp_sockopen($rcpt_to)){
   $this->log_write("Error: Cannot send email to ".$rcpt_to." ");
   $sent = FALSE;
   continue;
  }
  if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)){
   $this->log_write("E-mail has been sent to <".$rcpt_to."> ");
  }else{
   $this->log_write("Error: Cannot send email to <".$rcpt_to."> ");
   $sent = FALSE;
  }
  fclose($this->sock);
  $this->log_write("Disconnected from remote host ");
 }
 return $sent;
}

 /* Private Functions */
 function smtp_send($helo, $from, $to, $header, $body = ""){
  if (!$this->smtp_putcmd("HELO", $helo)){
   return $this->smtp_error("sending HELO command");
  }
  
  #auth
  if($this->auth){
   if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))){
    return $this->smtp_error("sending HELO command");
   }
   if (!$this->smtp_putcmd("", base64_encode($this->pass))){
    return $this->smtp_error("sending HELO command");
   }
  }
  if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")){
   return $this->smtp_error("sending MAIL FROM command");
  }
  if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")){
   return $this->smtp_error("sending RCPT TO command");
  }
  if (!$this->smtp_putcmd("DATA")){
   return $this->smtp_error("sending DATA command");
  }
  if (!$this->smtp_message($header, $body)){
   return $this->smtp_error("sending message");
  }
  if (!$this->smtp_eom()){
   return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
  }
  if (!$this->smtp_putcmd("QUIT")){
   return $this->smtp_error("sending QUIT command");
  }
  return TRUE;
 }

 function smtp_sockopen($address){
  if ($this->relay_host == ""){
   return $this->smtp_sockopen_mx($address);
  }
  else{
   return $this->smtp_sockopen_relay();
  }
 }

 function smtp_sockopen_relay(){
  $this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port." ");
  $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
  if (!($this->sock && $this->smtp_ok())){
   $this->log_write("Error: Cannot connenct to relay host ".$this->relay_host." ");
   $this->log_write("Error: ".$errstr." (".$errno.") ");
   return FALSE;
  }
  $this->log_write("Connected to relay host ".$this->relay_host." ");
  return TRUE;;
 }
 
 function smtp_sockopen_mx($address){
  $domain = ereg_replace("^.+@([^@]+)$", "", $address);
  if (!@getmxrr($domain, $MXHOSTS)){
   $this->log_write("Error: Cannot resolve MX "".$domain."" ");
   return FALSE;
  }
  foreach ($MXHOSTS as $host){
   $this->log_write("Trying to ".$host.":".$this->smtp_port." ");
   $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
   if (!($this->sock && $this->smtp_ok())){
    $this->log_write("Warning: Cannot connect to mx host ".$host." ");
    $this->log_write("Error: ".$errstr." (".$errno.") ");
    continue;
   }
   $this->log_write("Connected to mx host ".$host." ");
   return TRUE;
  }
  $this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).") ");
  return FALSE;
 }

 function smtp_message($header, $body){
  fputs($this->sock, $header." ".$body);
  $this->smtp_debug("> ".str_replace(" ", " "."> ", $header." > ".$body." > "));
  return TRUE;
 }
 
 function smtp_eom(){
  fputs($this->sock, " . ");
  $this->smtp_debug(". [EOM] ");
  return $this->smtp_ok();
 }

 function smtp_ok(){
  $response = str_replace(" ", "", fgets($this->sock, 512));
  $this->smtp_debug($response." ");
  if (!ereg("^[23]", $response)){
   fputs($this->sock, "QUIT ");
   fgets($this->sock, 512);
   $this->log_write("Error: Remote host returned "".$response."" ");
   return FALSE;
  }
  return TRUE;
 }

 function smtp_putcmd($cmd, $arg = ""){
  if($arg != ""){
   if($cmd==""){
    $cmd = $arg;
   }
   else{
    $cmd = $cmd." ".$arg;
   }
  }
  fputs($this->sock, $cmd." ");
  $this->smtp_debug("> ".$cmd." ");
  return $this->smtp_ok();
 }

 function smtp_error($string){
  $this->log_write("Error: Error occurred while ".$string.". ");
  return FALSE;
 }

 function log_write($message){
  $this->smtp_debug($message);
  if ($this->log_file == ""){
   return TRUE;
  }
  $message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
  if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))){
   $this->smtp_debug("Warning: Cannot open log file "".$this->log_file."" ");
   return FALSE;;
  }
  flock($fp, LOCK_EX);
  fputs($fp, $message);
  fclose($fp);
  return TRUE;
 }

 function strip_comment($address){//去除"()"
  $comment = "([^()]*)";
  while (ereg($comment, $address)){
   $address = ereg_replace($comment, "", $address);
  }
  return $address;
 }

 function get_address($address){
  $address = ereg_replace("([ ])+", "", $address);// 制表符 回车符   换行符  +匹配前面的子表达式一次或多次
  $address = ereg_replace("^.*<(.+)>.*$", "", $address);
  return $address;
 }

 function smtp_debug($message){
  if ($this->debug){
   echo $message;
  }
 }
}

  //--------------------------------------------------
  function GetIndexText($okstr,$ilen=-1)
  {
    if($okstr=="") return "";
    $ws = explode(" ",$okstr);
    $okstr = "";
    $wks = "";
    foreach($ws as $w)
    {
      $w = trim($w);
      //排除小于2的字符
      if(strlen($w)<2) continue;
      //排除数字或日期
      if(!ereg("[^0-9:-]",$w)) continue;
      if(strlen($w)==2&&ord($w[0])>0x80) continue;
      if(isset($wks[$w])) $wks[$w]++;
      else $wks[$w] = 1;
    }
    if(is_array($wks))
    {
      arsort($wks);
      if($ilen==-1)
      { foreach($wks as $w=>$v) $okstr .= $w." "; }
      else
      {
        foreach($wks as $w=>$v){
          if((strlen($okstr)+strlen($w)+1)<$ilen) $okstr .= $w." ";
          else break;
        }
      }
    }
    return trim($okstr);
  }

[!--infotagslink--]

相关文章

  • php KindEditor文章内分页的实例方法

    我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
  • 自己动手写的jquery分页控件(非常简单实用)

    最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
  • jquery实现的伪分页效果代码

    本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
  • vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • PHP 一个完整的分页类(附源码)

    在php中要实现分页比起asp中要简单很多了,我们核心就是直接获取当前页面然后判断每页多少再到数据库中利用limit就可以实现分页查询了,下面我来详细介绍分页类实现程序...2016-11-25
  • jquery实现的伪分页效果代码

    本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
  • AngularJS实现分页显示数据库信息

    这篇文章主要为大家详细介绍了AngularJS实现分页显示数据库信息效果的相关资料,感兴趣的小伙伴们可以参考一下...2016-07-06
  • 基于jquery实现表格无刷新分页

    这篇文章主要介绍了基于jquery实现表格无刷新分页,功能实现了前端排序功能,增加了前端搜索功能,感兴趣的小伙伴们可以参考一下...2016-01-08
  • vue实现页面打印自动分页的两种方法

    这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • vue.js表格分页示例

    这篇文章主要为大家详细介绍了vue.js表格分页示例,ajax异步加载数据...2016-10-20
  • C# DataTable分页处理实例代码

    有时候我们从数据库获取的数据量太大,而我们不需要一次性显示那么多的时候,我们就要对数据进行分页处理了,让每页显示不同的数据。...2020-06-25
  • 原生js实现分页效果

    这篇文章主要为大家详细介绍了原生js实现分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-09-24
  • Python优化列表接口进行分页示例实现

    最近,在做测试开发平台的时候,需要对测试用例的列表进行后端分页,在实际去写代码和测试的过程中,发现这里面还是有些细节的,故想复盘一下...2021-09-29
  • laypage分页控件使用实例详解

    这篇文章主要为大家详细分享了laypage分页控件使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-05-20
  • 帝国CMS最高效的几种随机文章的写法

    /*解决代码高亮太长不换行*/ .syntaxhighlighter{word-break:break-all;} uParse('#newstext', {rootPath: '/e/extend/ueditor/'}) php随机文章 方法1、WC写的高效随...2017-07-06
  • 解析iReport自定义行数分页的操作方法

    ireport默认都是自动分页数据超出页面长度就会自动分到下一页,但有时候业务需要一页只显示固定几行这时候就需要自定义条数了。下面看具体操作吧...2021-10-26
  • MySQL分页优化

    这篇文章主要为大家详细介绍了MySQL分页优化,内容思路很详细,有意对MySQL分页优化的朋友可以参考一下...2016-04-22
  • EasyUI Pagination 分页的两种做法小结

    这篇文章主要介绍了EasyUI Pagination 分页的两种做法小结的相关资料,需要的朋友可以参考下...2016-07-25
  • Bootstrap框架动态生成Web页面文章内目录的方法

    这篇文章主要介绍了Bootstrap框架动态生成Web页面文章内目录的方法,利用Bootstrap中的Affix和ScrollSpy插件便可以实现,需要的朋友可以参考下...2016-05-14