自定义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个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...
随机推荐
- 拿 .properties 这种里面的数据 在不同的地方
1 在xml中 2 在.java中 @Value("#{configProperties['key']}") configProperties不是固定(根据配置时的id) ...
- 我的AI之路 —— OCR文字识别快速体验版
OCR的全称是Optical Character Recoginition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别.交通路牌的识别.车牌的自动识别等等. ...
- js 的this
js的this应该是不好掌握又必须要掌握的东西 主要参考: http://www.cnblogs.com/pssp/p/5216085.html http://www.cnblogs.com/fron ...
- flask-Datatables
我先给大家推荐一个jQuery开源库网址 http://www.jq22.com/ Datatables 是一款jquery表格插件.他是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能 ...
- 浅析XSS与CSRF
浅析XSS与CSRF 在 Web 安全方面,XSS 与 CSRF 可以说是老生常谈了. XSS XSS,即 cross site script,跨站脚本攻击,缩写原本为 CSS,但为了和层叠样式表(C ...
- Runtime 全方位装逼指南
Runtime是什么?见名知意,其概念无非就是“因为 Objective-C 是一门动态语言,所以它需要一个运行时系统……这就是 Runtime 系统”云云.对博主这种菜鸟而言,Runtime 在实际 ...
- POJ 2578
#include<iostream> #include<stdio.h> #include<vector> using namespace std; int mai ...
- iframe 跨域调用父级方法的方案
一.如果高层域名相同的话,可以通过document.domain来实现跨域访问 例如: 父级域名:localhost:8080 子级域名:localhost:9090 那么可以设置document.d ...
- 13-01 java StringBuffer类,StringBuilder类
StringBuffer类的构造方法 package cn.itcast_01; /* * 线程安全(多线程讲解) * 安全 -- 同步 -- 数据是安全的 * 不安全 -- 不同步 -- 效率高一些 ...
- [Umbraco] document type里的父节点与子节点的设置
虽然我们不能像做数据库设计那样建立主外键关系.但我们建立xml里父子关系,父子关系其实是指是否允许在一个页面(如频道,分类,栏目等)下创建子页面,这就相当于建立站点的树状结构,对于筛选数据会有很大的作 ...