自定义MVC框架之工具类-分页类的封装
以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类。
这次重新改造MVC有几个很大的收获
>全部代码都是用Ubuntu+Vim编写,以前都是windows上开发,这次彻底迷上Ubuntu Linux
>裸装php,用php自带的服务器解释执行php,缺哪个扩展就装哪个,最后通过整个MVC框架的开发,把Lamp所有的常用配置与细节搞懂
>通过扩展安装,学习扩展开发与php底层源码分析
总之,终于感觉层次又提升了不少。
分页类代码:
<?php
class Page {
//每页显示的条目
protected $pageSize;
//总记录数
protected $totalRecord;
//当前页
protected $p;
//总页数
protected $totalPage;
protected $url;
public function __construct( $_pageSize, $_totalRecord ){
$this->pageSize = $_pageSize;
$this->totalRecord = $_totalRecord;
$this->totalPage = ceil( $this->totalRecord / $this->pageSize );
$this->p = $this->getCurPage();
$this->url = $this->getUrl();
}
public function setUrl( $p ){
if( strstr( $this->url, '?' ) ) {
//url中有参数
$url = $this->url . '&p=' . $p;
}else {
//url中没有参数
$url = $this->url . '?p=' . $p;
}
return $url;
}
//首页
public function firstPage(){
return $this->setUrl( 1 );
}
//末页
public function lastPage(){
return $this->setUrl( $this->totalPage );
}
//上一页
public function prevPage(){
if( $this->p - 1 <= 0 ) {
$prevPage = $this->p;
}else {
$prevPage = $this->p - 1;
}
return $this->setUrl( $prevPage );
}
//下一页
public function nextPage(){
if( $this->p + 1 > $this->totalPage ) {
$nextPage = $this->p;
}else {
$nextPage = $this->p + 1;
}
return $this->setUrl( $nextPage );
}
//得到当前的页码
public function getCurPage(){
$curPage = intval( $_GET['p'] );
if ( empty( $curPage ) ) {
$curPage = 1;
}else if ( $curPage > $this->totalPage ) {
$curPage = $this->totalPage;
}else if ( $curPage < 0 ){
$curPage = 1;
}
return $curPage;
}
//拼接url
public function getUrl(){
$protocol = strtolower( array_shift( explode( '/', $_SERVER['SERVER_PROTOCOL'] ) ) );
$host = $_SERVER['SERVER_NAME'];
$port = $_SERVER['SERVER_PORT'];
$uri = $_SERVER['REQUEST_URI'];
$uriArr = parse_url( $uri );
$path = $uriArr['path'];
if( !empty( $uriArr['query'] ) ) {
//url中的query字符转数组
parse_str( $uriArr['query'], $args );
//清除原来的分页参数p
if( isset( $args['p'] ) ){
unset( $args['p'] );
}
//参数重新拼接成字符串
$queryString = http_build_query( $args );
//字符串如果不止一个p参数,把那些参数拼接在path的后面
if ( !empty( $queryString ) ){
$path .= '?' . $queryString;
}
}
return $protocol . '://' . $host . ':' . $port . $path;
}
public function render(){
return [
'first' => $this->firstPage(),
'last' => $this->lastPage(),
'prev' => $this->prevPage(),
'next' => $this->nextPage()
];
}
public function limit(){
$offset = ( $this->p - 1 ) * $this->pageSize;
return $offset . ',' . $this->pageSize;
}
}
$page = new Page( 5, 11 );
//echo $page->getCurPage();
//echo $page->getUrl();
print_r( $page->render() );
?>
自定义MVC框架之工具类-分页类的封装的更多相关文章
- 自定义MVC框架之工具类-模型类
截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...
- 自定义MVC框架之工具类-图像处理类
截止目前已经改造了4个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 图像处理类: 1,图片加水印处理( ...
- 自定义MVC框架之工具类-文件上传类
截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...
- Java Web自定义MVC框架详解 (转)
转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...
- 自定义MVC框架
我们在学习自定义MVC框架的时候常常会听到Model1 ,Model2和MVC.那么什么是Model1 什么是Model2什么又是MVC呢? 什么是Model1? Model1就是一种纯jsp开发技术 ...
- Struts2 自定义MVC框架
一.Model1与Model2: Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起. Model2:Model2是在Model1的基础上,将业务逻辑的代码分离开来,单独形 ...
- 第一章 自定义MVC框架
第一章 自定义MVC框架1.1 MVC模式设计 组成:Model:模型,用于数据和业务的处理 View :视图,用于数据的显示 Controller:控制器 ...
- c#自定义ORM框架---(泛型&反射&实体类扩展属性<附带通用增、删、查、改>)
该教材主要是运用到泛型.反射和实体类扩展属性 步骤一.建立扩展属性类 实体类扩展属性要继承Attribute基类完成 [AttributeUsage(AttributeTargets.Property ...
- 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)
一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...
随机推荐
- 题解 P5091 【【模板】欧拉定理】
欧拉定理:若 \(gcd(a,n)=1\),\(a^{\varphi(n)}\equiv 1(mod\ n)\) 设 \(1\sim n-1\) 中与 \(n\) 互素的 \(\varphi(n)\) ...
- underscore.js源码研究(6)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- python -猜字小游戏
代码运行效果如下: 注意: 1.必须要在python3环境想使用 2.QQ:3084276329(一起交流学习) 3.还请大家评论 Guess the word game代码如下: #! /usr/b ...
- DNS 预解析
DNS 解析也是需要时间的,可以通过预解析的方式来预先获得域名所对应的 IP. <link rel="dns-prefetch" href="//yuchengka ...
- Mysql数据优化--DBA梳理珍藏篇
1. 优化SQL 1) 通过show status了解各种sql的执行频率 show status like 'Com_%' 了解 Com_select,Com_insert 的 ...
- Vue2.5开发去哪儿网App 第三章笔记 下
1.样式的绑定 我们可以传给 v-bind:class 一个对象,以动态地切换 class 例如: :class="{activated:isactivated}" 上面的语法 ...
- [Fatal Error] :3:13: Open quote is expected for attribute "{1}" associated with an element type "id".
用DOM解析XML时出现了如下错误: [Fatal Error] :3:13: Open quote is expected for attribute "{1}" associa ...
- js中编写velocity逻辑
<script type="text/javascript"> $(function(){ #foreach( $var in $entity.showConfigs ...
- 结构体访问成员变量什么时候该用“->”或者是"."呢?的困惑
煎蛋栗子: typedef struct Node{int data;struct Node *next;}LinkList; LinkList *p=(LinkList *)malloc(sizeo ...
- webkit技术内幕读书笔记 (二、三)
可视区和网页 通常网页比屏幕的可视区面积要大,因此当网页内容在可视区中放不下时,一般浏览器会提供滚动条. 从URL到构建完DOM树的过程 当用户输入网页URL的时候,WebKit调用其资源加载器加载该 ...