欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

完善的page分页模块,和百度一模一样

程序员文章站 2022-04-13 09:15:28
...
http://www.schoolcms.cn/ 发布
完善的page分页模块,和百度一模一样
完善的page分页模块,和百度一模一样
class PagingModel
{
private $m_PagingDataArray; //接收页面提交的post或者get的一维数组条件
private $m_Configuration; //配置项数据
private $m_Fraction; //每个页面显示的条数
private $m_Total; //数据的总条数
private $m_Page; //页面传递过来的页码值
private $m_Starting; //查询数据的起始值
private $m_TotalFraction; //计算出来的总页数
private $m_Url; //分页使用的url地址
private $m_PageCoent; //是否开启页面数字分页按钮


/*
构造方法
*/
public function __construct($PagingDataArray = array(), $Configuration = array())
{
/* 初始化属性数据 */
$this->m_PagingDataArray = array();
$this->m_Configuration = array();

/* 基础数据设置 */
$this->SetPagingDataArray($PagingDataArray);
$this->SetConfiguration($Configuration );
$this->SetBasisData();
}

/*
设置数据
*/
private function SetPagingDataArray($PagingDataArray)
{
/* 判断配置项的数据是否为空 */
if(false == empty($PagingDataArray)) {
$this->m_PagingDataArray = $PagingDataArray;
} else {
$this->m_PagingDataArray = array();
}
}

/*
设置配置项数据
*/
private function SetConfiguration($Configuration)
{
/* 判断配置项的数据是否为空 */
if(false == empty($Configuration)) {
$this->m_Configuration = $Configuration;
} else {
$this->m_Configuration = array();
}
}


/*
处理判断数组中是否存在某个键名
*/
private function Setuppase($Property, $Key, $Content)
{
/* 判断 $Key 是否在数组中存在的键名 */
if(true == array_key_exists($Key, $this->m_Configuration)) {
$this->$Property = $this->m_Configuration["$Key"];
} else {
$this->$Property = $Content;
}
}

/*
基础数据设置
*/
private function SetBasisData()
{
$this->SetFraction();
$this->SetTotal();
$this->SetPage();
$this->SetStarting();
$this->SetTotalFraction();
$this->SetUrl();
$this->SetPageCoent();
}

/*
设置每页显示数据的条数
*/
private function SetFraction()
{
$this->Setuppase('m_Fraction', 'traction', 15);
}

/*
设置数据的总条数
*/
private function SetTotal()
{
$this->Setuppase('m_Total', 'total', 0);
}

/*
设置页面传递过来的页码值
*/
private function SetPage()
{
/* 判断 $Key 是否在数组中存在的键名 */
if(true == array_key_exists('page', $this->m_PagingDataArray)) {
$this->m_Page = max(1, (false == empty($this->m_PagingDataArray['page']) ? intval($this->m_PagingDataArray['page']) : 0));
} else {
$this->m_Page = 1;
}
}

/*
设置查询数据的起始值
*/
private function SetStarting()
{
$this->m_Starting = ($this->m_Page - 1) * $this->m_Fraction;
}

/*
设置计算出来的总页数, 总页数 = 总条数除以每页显示的条数。
*/
private function SetTotalFraction()
{
$this->m_TotalFraction = ceil($this->m_Total/$this->m_Fraction);

/* 当前页数大于最大页数时,将总页数的值赋值给当前页面,防止超越操作。*/
if($this->m_TotalFraction m_Page) {
$this->m_Page = $this->m_TotalFraction;
}
}

/*
设置分页的url地址
*/
private function SetUrl()
{
$this->Setuppase('m_Url', 'url', null);
}

/*
设置是否开启显示数字分页按钮
*/
private function SetPageCoent()
{
$this->Setuppase('m_PageCoent', 'pagecoent', 0);
}

/*
获取查询数据的起始值
*/
public function GetStarting()
{
return $this->m_Starting;
}

/*
获取每页显示的条数值
*/
public function GetFraction()
{
return $this->m_Fraction;
}

/*
获取拼接的每页显示的数字页码
*/
private function GetPageCoent($PageUrl)
{
/* 如果page值不等于1的时候 */
if($this->m_Page != 1) {
/* 如果分页数值加显示的分页个数值大于当前总页码数的时候 */
if(($this->m_Page+$this->m_PageCoent) > $this->m_TotalFraction) {
/* 计算起始值 */
$Pageis = $this->m_Page-$this->m_PageCoent;
/* 计算最大数值 */
$PageMax = $this->m_TotalFraction;

/* 如果分页数值加显示的分页个数值不大于当前总页码数的时候 */
} else {
/* 计算起始值,如果当前page小于等于显示的页数时,就将起始设置为1,防止负数 */
if($this->m_Page m_PageCoent) {
$Pageis = 1;
} else {
$Pageis = $this->m_Page-$this->m_PageCoent;
}


/* 计算最大数值,当前page数值加需要显示的页码个数值 */
$PageMax = (($this->m_Page+$this->m_PageCoent));
}

/* 如果显示页码值大于等于总页码值时,将起始值设置为1 */
if($this->m_PageCoent >= $this->m_TotalFraction) {
$Pageis = 1;
}

/* 如果page等于1的时候 */
} else {
/* 如果显示页码值大于等于总页码值时,就将总页码值赋值给循环的最大值 */
if($this->m_PageCoent >= $this->m_TotalFraction) {
$PageMax = $this->m_TotalFraction;
} else {
$PageMax = $this->m_PageCoent+1;
}
$Pageis = 1;
}

/* 循环拼接需要显示的分页数值个数代码 */
$PageCoent = '
  • ';
    for($Pagei=$Pageis; $Pagei if($this->m_Page == $Pagei) {
    $PageCoent .= ''.$Pagei.'';
    } else {
    $PageCoent .= ''.$Pagei.'';
    }

    }
    /* 返回拼接好的代码 */
    return $PageCoent;
    }


    /*
    获取url拼接,处理URL拼接方法
    */
    private function GetUrlSplice()
    {
    $UrlSplice = '?';
    if(false == empty($this->m_PagingDataArray)) {
    //删除当前数组中的page数据
    unset($this->m_PagingDataArray['page']);
    foreach($this->m_PagingDataArray as $PKey=>$pValue) {
    /* 拼接普通url */
    if((false == empty($pValue)) && (false == is_array($pValue))) {
    $UrlSplice .= $PKey.'='.$pValue.'&';
    }

    /* 拼接是数组的url */
    /*if((false == empty($pValue)) && (true == is_array($pValue))) {

    }*/
    }
    //print_r($this->m_PagingDataArray);
    }
    return $UrlSplice;
    }


    /*
    返回拼接好的html代码(包括js代码)
    */
    public function GetPagingHtmlInfo()
    {
    $UrlSplice = $this->GetUrlSplice();

    $PageUrl = $this->m_Url.$UrlSplice.'page=';
    $PageUrls = $PageUrl.($this->m_Page-1);
    $PageUrly = $PageUrl.($this->m_Page+1);

    if($this->m_PageCoent > 0) {
    $PageCoent = $this->GetPageCoent($PageUrl);
    } else {
    $PageCoent = null;
    }


    /* 定义分页数据 */
    $Html = '
      ';

      $Home = '
    • 首页
    • ';
      $Previous = '
    • 上一页
    • ';
      $Next = '
    • 下一页
    • ';
      $End = '
    • 尾页
    • ';

      $HomeS = '
    • 首页
    • ';
      $PreviousS = '
    • 上一页
    • ';
      $NextS = '
    • 下一页
    • ';
      $EndS = '
    • 尾页
    • ';


      /* 当只有一页数据的时候,就没有拼接url地址 */
      if($this->m_TotalFraction == 1) {
      $Html .= $HomeS.$PreviousS.$PageCoent.$NextS.$EndS;
      /* 当没有数据的时候,就没有拼接url地址 */
      } elseif($this->m_Page == $this->m_TotalFraction && $this->m_Total == 0) {
      $Html .= $HomeS.$PreviousS.$PageCoent.$NextS.$EndS;
      /* 当为第一页的时候 */
      } elseif($this->m_Page == 1) {
      $Html .= $HomeS.$PreviousS.$PageCoent.$Next.$End;

      /* 到尾部的时候 */
      } elseif($this->m_Page == $this->m_TotalFraction && $this->m_TotalFraction > 1) {
      $Html .= $Home.$Previous.$PageCoent.$NextS.$EndS;

      /* 正常的时候 */
      } else {
      $Html .= $Home.$Previous.$PageCoent.$Next.$End;
      }
      $Html .= '
    • 当前第'.$this->m_Page.'
    • '.$this->m_TotalFraction.'
    • 总有'.$this->m_Total.'条数据
    ';

    /* css代码 */
    $Css = '';

    return $Html.$Css;
    }

    }
    //使用方法
    /* 调用分页模块 */
    $Configuration = array(
    'total' => $StudentCount, //数据总条数
    'traction' => $StudentPage, //每页显示条数
    'pagecoent' => 3, //分页显示的个数
    'url' => './StudentManagement', //翻页的url地址
    );
    //$_REQUEST : 如果当前查询有其它条件将会自动选择拼接起来
    //$Configuration : 配置项
    $PageingObj = new PagingModel($_REQUEST, $Configuration);
    $this->assign('pageing', $PageingObj->GetPagingHtmlInfo());
  • AD:真正免费,域名+虚机+企业邮箱=0元