PHP 分页类(模仿google)-面试题目解答_php技巧

笔试回答的不太好,特别是JS部分,也是许久都没复习的原因。
上机题目是要写一个仿google分页的类,当要取类似9/2的最大整数,却怎么也想不起函数ceil的名字,晕了半天。
最后测试程序没错误,但是就是不能正常显示,后来(回家后)一查才知道是语句:for($i=0;$i++;$i<9)写错了,于是下决心重新写一遍,于是就有了下面的代码了:

复制代码 代码如下:

<?php
/*
显示样式如下:
[1] 2 3 4 5 6 7 8 9 10 ...100 下页 尾页
首页 上页 1..12 13 14 15 [16] 17 18 19 20 ...100 下页 尾页
首页 上页 1..92 93 94 95 96 97 98 [99] 100

使用方法:
$currentPage = $_GET['page']?$_GET['page']:1;
$pagediv = new pagediv(500, 10, 11, $currentPage, 'test.php?page=');
$pagediv->show();

*/
class pagediv
{
public $part1;
public $part2;
public $part3;
public $part4;
public $part5;

/*
对下面的分页显示进行分割:
首页 上页 1..12 13 14 15 [16] 17 18 19 20 ...100 下页 尾页
$part1 : 首页 上页
$part2 : 1..
$part3 : 12 13 14 15 [16] 17 18 19 20
$part4 : ...100
$part5 : 下页 尾页
*/

public $allPage; //总页数
public $allRocords; //总记录数
public $perPage; //每页记录数
public $showPagesNo; //显示分页栏的总页码数 显示样式里共有11个
public $currentPage; //当前页
public $urlModel; //Url链接样式

public $startHidden; //出现 1... 时的页数 开始隐藏中间页
public $endHidden; //出现 ...100 时的页数 结束隐藏中间页

public function __construct($allRocords, $perPage, $showPagesNo, $currentPage, $urlModel){
$this->allRocords = $allRocords;
$this->perPage = $perPage;
$this->showPagesNo = $showPagesNo;
$this->currentPage = $currentPage;
$this->urlModel = $urlModel;
$this->allPage = $this->getAllPage();

$this->startHidden = $this->getInt(($this->showPagesNo)/2); //6
$this->endHidden = $this->allPage - $this->startHidden; //94
}

public function getUrl($_index = ''){
$_current = $_index;
if($_index == 'pre') $_current = $this->currentPage -1;
if($_index == 'next') $_current = $this->currentPage+1;
if($_index == '') $_current = $this->allPage;
return $this->urlModel.$_current;
}

public function getAllPage(){
return $this->getInt($this->allRocords/$this->perPage);
}

public function getInt($_float){
$_int = $_float;
if( $_index = strpos($_float,'.') == true ){
$_int = substr($_float,0,$_index);
$_int++;
}
//没有想起ceil时的候补方案
return $_int;
}

public function getPart1(){
$content = '<a href="'.$this->getUrl(1).'">首页</a> <a href="'.$this->getUrl('pre').'">上页</a> ';
if($this->currentPage <= $this->startHidden){
$content = '';
}
return $content;
}

public function getPart2(){
$content = '<a href="'.$this->getUrl(1).'">1</a> ';
$add = '';
if($this->currentPage > $this->startHidden){
$add = '...';
}
if($this->currentPage == 1){
$content = '[1] ';
$add = '';
}
$part2 = $content.$add;
return $part2;
}

public function getPart3(){
$content = '';
if($this->currentPage <= $this->startHidden){
//[1] 2 3 4 5 6 7 8 9 10 ...100 下页 尾页
$long = $this->showPagesNo - 2;
for($i=0;$i<$long;$i++){
$j = $i+2;
if($j == $this->currentPage){
$content .= '['.$this->currentPage.'] ';
}else{
$content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> ';
}

}

}elseif( $this->currentPage >= $this->endHidden ){
//首页 上页 1..92 93 94 95 96 97 98 [99] 100
$long = $this->showPagesNo - 2;
$_start = $this->allPage - $long;
for($i=0;$i<$long;$i++){
$j = $_start + $i;
if($j == $this->currentPage){
$content .= '['.$this->currentPage.'] ';
}else{
$content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> ';
}
}
}else{
//首页 上页 1..12 13 14 15 [16] 17 18 19 20 ...100 下页 尾页
$long = $this->showPagesNo - 2;
$offset = $this->getInt($long/2) - 1;
$_start = $this->currentPage - $offset;
for($i=0;$i<$long;$i++){
$j = $_start + $i;
if($j == $this->currentPage){
$content .= '['.$this->currentPage.'] ';
}else{
$content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> ';
}
}
}
$part3 = $content;
return $part3;
}

public function getPart4(){
$content = '<a href="'.$this->getUrl().'">'.$this->allPage.'</a> ';
$add = '';
if($this->currentPage < $this->endHidden){
$add = '...';
}
if($this->currentPage == $this->allPage){
$content = '['.$this->allPage.']';
$add = '';
}
$part4 = $add.$content;
return $part4;

}

public function getPart5(){
$content = '<a href="'.$this->getUrl('next').'">下页</a> <a href="'.$this->getUrl().'">尾页</a>';
if($this->currentPage >= $this->endHidden){
$content = '';
}
return $content;
}

public function show(){
//判断非法
if(!is_numeric($this->currentPage) || $this->currentPage < 0 || $this->currentPage > $this->allPage){
print 'error:pageNo is flase';
return;
}
//总页数没有达到显示分页栏的总页码数,则全部显示
if($this->allPage < $this->showPagesNo){
$long = $this->allPage;
for($i=0;$i<$long;$i++){
$j = $i+1;
if($j == $this->currentPage){
$content .= '['.$this->currentPage.'] ';
}else{
$content .= '<a href="'.$this->getUrl($j).'">'.$j.'</a> ';
}

}
print $content;
return;
}
$this->part1 = $this->getPart1();
$this->part2 = $this->getPart2();
$this->part3 = $this->getPart3();
$this->part4 = $this->getPart4();
$this->part5 = $this->getPart5();

print $this->part1.$this->part2.$this->part3.$this->part4.$this->part5;
}
}
?>

时间: 2024-12-30 11:00:05

PHP 分页类(模仿google)-面试题目解答_php技巧的相关文章

php开发分页实现代码第1/3页_php技巧

项目结构: 开发分页实现代码第1/3页_php技巧-mybatis实现分页查询"> 运行效果: conn.php 复制代码 代码如下: <?php $conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误"); mysql_select_db("form", $conn); mysql_query("se

ASP分页类(支持多风格变换)_应用技巧

这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1.但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间. 复制代码 代码如下: <% '****************************** '名称:分页类 '日期:2005/12/3 '作者:西楼冷月 '网址:www.xilou.net | www.chinaCMS.org '描述:无 '版权:转载请注名出处,作者 '****************************** Class Page Priv

仿Aspnetpager的一个PHP分页类代码 附源码下载_php实例

基本逻辑思路和.net的一样,就是将通过实体类来进行配置换成了通过数组进行配置,逻辑比较简单,根据条件判断拼接分页html. 有以下几个简单的功能: 1:支持相关按钮的显示与否配置 2:支持每页数目,文本名称,html标签类名称的自由配置 3:支持url重写过的页面(需自己在配置数组中添加重写规则) 简单吧,还是直接上代码: 核心代码:pager.class.php 复制代码 代码如下: <?php class pager{ //分页的参数配置 private $config=array( //

PHP 分页原理分析,大家可以看看_php技巧

1.前言 分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一.对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解.本文适合初学者阅读,所有示例代码均使用php编写. 2.原理 所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数: 每页多少条记录($PageSi

PHP的关于变量和日期处理的一些面试题目整理_php实例

变量相关 PHP变量的内部实现编程语言的系统类型分为强类型和弱类型两种:     强类型语言是一旦某个变量被申明为某个类型的变量,在程序运行过程中,就不能将该变量的类型以外的值赋予给它,c/c++/java等语言就属于这类     php及ruby,javascript等脚本语言就属于弱类型语言:一个变量可以表示任意的数据类型 php变量类型及存储结构php在声明或使用变量的时候,并不需要显式指明其数据类型 php是弱类型语言,这不并表示php没有类型,在php中,存在8种变量类型,可以分为三类

腾讯QQ php程序员面试题目整理_php文摘

说在前面: 1.以下题目,除了编程任务外其他都需要写在给你提供的草纸上.纸张是珍贵的地球资源,请节约使用.编程任务在有相应的环境时,会要求上机书写,实在没有条件,就只能写在草纸上了. 2.时间: 基础任务+进阶任务+设计任务 = 90分钟 编程任务 = 60分钟 基础任务: 1.请列举你能想到的UNIX信号,并说明信号用途. 2.请列举.你能想到的所有的字符串查找算法,并加注释简单说明. 3.有一个IP地址(192.168.0.1),请写出其32位无符号整数形式. 4.写出.你能想到的所有HTT

PHP邮件发送类PHPMailer用法实例详解_php技巧

本文实例讲述了PHP邮件发送类PHPMailer用法,并详细讲述了其具体的操作步骤.分享给大家供大家参考.具体步骤如下: 1.在服务器安装 sendmail sudo apt-get install sendmail 2.启动 sendmail sudo /etc/init.d/sendmail start 3.修改 php.ini [mail function] SMTP = localhost smtp_port = 25 sendmail_from = me@example.com 4.F

php 接口类与抽象类的实际作用_php技巧

1.php 接口类:interface 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 : 复制代码 代码如下: interface Shop { public function buy($gid); public function sell($gid); public function view($g

php类常量的使用详解_php技巧

注意:不像其他的面向对象编程语言,在php中,类不能对某个属性变量使用final修饰符.如果要声明某个属性为常量,可以使用const关键字,并且无需使用美元符号作为变量名前缀,也无需使用访问权限修饰符.常量意味着虽然可以访问该变量,但不能修改该变量的值.例如下边的代码声明了常量属性con_var: 复制代码 代码如下: <?phpclass Foo{ const con_var="常量属性的值不能被修改<br />"; public function method_a