自定义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个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...
随机推荐
- JavaScript基础(3)-JS中的面向对象、定时器、BOM、位置信息
一.创建对象的几种常用方式. 1.使用Object或对象字面量创建对象: a.使用Object()内置的构造函数来创建对象,例如: var student = new Object(); // 创建一 ...
- spring cloud学习(六) 配置中心-自动更新
上一篇学习了spring cloud config的基本使用,但发现有个问题,就是每次更改配置后,都需要重启服务才能更新配置,这样肯定是不行的.在上网查资料了解后,spring cloud支持通过AM ...
- 一次对路边饮用水RFID供应机的跑路玩法
"如何成为一个合格的硬件白帽子? 答案: 一个有聪明大脑的你 要有归纳类比和善于用GOOGLE的能力(百度?放弃吧) 善于翻阅和查询相关开发文档和强大的跑路能力." WARNING ...
- linux 时间相关
CentOS7 正确修改时区方法 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- Java零基础教程(二)基础语法
Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...
- MATLAB入门(一)数组
特殊变量: 数组的创建: %% 数组的生成(带:不在命令行显示结果) x= rand() ; %随机生成3*3的矩阵,矩阵数的值在[,] x(:,::); %取所有行,(从第1列开始:步长为2:到第 ...
- opencv2函数学习之flip:实现图像翻转
在opencv2中,flip函数用来进行图片的翻转,包括水平翻转,垂直翻转,以及水平垂直翻转. void flip(const Mat& src, Mat& dst, int flip ...
- configure: error: You need a C++ compiler for C++ support.[系统缺少c++环境]
一.错误configure: error: You need a C++ compiler for C++ support.二.安装c++ compiler情况1.当您的服务器能链接网络时候[联网安装 ...
- 执行shell脚本的四种方式(转)
原文网址:https://www.jb51.net/article/53924.htm 这篇文章主要介绍了Linux中执行shell脚本的4种方法,即总结在Linux中运行shell脚本的4种方法. ...
- JavaSE-序列化和反序列化
什么是序列化,什么时候要进行序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输. 我们在对java对象进行IO流操作 ...