这个PHP分页其实不难,现在就开始看看核心思路吧。

我习惯从最底层开始看起。

1. 首先用LIMIT偏移QUERY的指针

  1. /*
  2. * get hot post by current page
  3. * @param [int]startNumOfPPost, [int]numOfPostPerPage
  4. * @return [array]post
  5. */
  6. function getHotPostByCurrectPage($startNumOfPPost, $numOfPostPerPage)
  7. {
  8. consoleLog('CPost func getHotPostByCurrectPage');
  9. $sql = " SELECT id, category, date, authorId, editorId, title, abstract, abstractImg
  10. FROM post
  11. WHERE visitable = '1' AND isTop = '1'
  12. ORDER BY date DESC, id DESC
  13. LIMIT ".$startNumOfPPost.", ".$numOfPostPerPage;
  14. $result = mysql_query($sql);
  15. while ($post = mysql_fetch_array($result))
  16. {
  17. $post['authorName'] = $this->getNameByUserId($post['authorId']);
  18. $post['editorName'] = $this->getNameByUserId($post['editorId']);
  19. $post['categoryName'] = $this->getCategoryNameById($post['category']);
  20. $arrPost[] = $post;
  21. }
  22. return $arrPost;
  23. }

2. Presenter渲染HTML

  1. function showHotPostList($currentPage)
  2. {
  3. consoleLogWithTitle('PostPresenter func showHotPostList var currentPage', $currentPage);
  4. $postModel = $this->postModel;
  5.  
  6. // get the first post id of current page
  7. $numOfPostPerPage = $this->numOfPostPerPage;
  8. $startNumOfPPost = ($currentPage-1)*$numOfPostPerPage;
  9.  
  10. // get post from db
  11. $arrPost = $postModel->getHotPostByCurrectPage($startNumOfPPost, $numOfPostPerPage);
  12.  
  13. foreach ($arrPost AS $post)
  14. {
  15. echo '
  16. <div class="gobalPost">
  17. <div class="gobalPostImg">
  18. <a href="#"> <div class="gobalPostImgHeaderCentered" style="background-image: url(\''.$post['abstractImg'].'\');" ></div> </a>
  19. <div class="gobalPostImgTag"> <a href="#">'.$post['categoryName'].'</a> </div>
  20. </div> <!-- gobalPostImg -->
  21.  
  22. <div class="gobalPostContext">
  23. <div class="fontSize20 color111">
  24. <a href="../post/post.php?postId='.$post['id'].'">'.$post['title'].'</a>
  25. </div>
  26. <div class="mTop2 fontSize12 color666">
  27. '.$post['date'].'
  28. &nbsp 作者:<a href="#">'.$post['authorName'].'</a>
  29. &nbsp 编辑:<a href="#">'.$post['editorName'].'</a>
  30. </div>
  31. <div class="mTop8 fontSize13 color333">
  32. '.$post['abstract'].'
  33. </div>
  34. </div> <!-- gobalPostContext -->
  35. </div> <!-- gobalPost -->
  36. ';
  37. }
  38. }

3. View,视图层

  1. <?php
  2. $postPresenter->showHotPostList($currentPage);
  3. ?>

有了核心的Business层,那就是创建PageSelector。

1. get amoumt of total post in db

2. prensenter render page selector

  1. function getPageSelectorCellHTML($numOfPage)
  2. {
  3. $selectorCellHTML = "";
  4. for ( $x = 1; $x <= $numOfPage; $x++)
  5. {
  6. $selectorCellHTML .= ' <a class="item" href="../../view/home/index.php?currentPage='.$x.'">'.$x.'</a> ';
  7. }
  8. return $selectorCellHTML;
  9. }
  1. function renderPageSelector($currentPage)
  2. {
  3. consoleLogWithTitle('PostPresenter func renderPageSelector var currentPage', $currentPage);
  4. $postModel = $this->postModel;
  5. $totalPost = count($postModel->getHotPostOrderById());
  6. $numOfPage = ceil($totalPost / $this->numOfPostPerPage);
  7.  
  8. echo '
  9. <div class="ui basic very padded center aligned segment container">
  10. <div class="ui inverted pagination menu">
  11. <a class="item"><i class="icon purple left arrow"></i></a>
  12. '.$this->getPageSelectorCellHTML($numOfPage).'
  13. <a class="item"><i class="icon purple right arrow"></i></a>
  14. </div>
  15. </div>
  16. ';
  17. }

这里要有良好的命名。renderPageSelector是渲染,getPageSelectorCellHTML是构造HTML。

而renderPageSelector是调用getPageSelectorCellHTML,因此要把构造HTML方法,放在主体之前,这是C++的开发概念。

3. View

  1. <?php $postPresenter->renderPageSelector($currentPage); ?>

那PHP分页功能就完成了。

MVPR下的PHP分页教程的更多相关文章

  1. PHP 框架: CodeIgniter 分页教程

    PHP 框架: CodeIgniter 分页教程 分类: PHP2009-04-23 11:09 3209人阅读 评论(0) 收藏 举报 框架phpbooksdatabaseurl数据库 目录(?)[ ...

  2. 10个优秀的 HTML5 & CSS3 下拉菜单制作教程

    下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...

  3. linux 下安装apache 快速教程

    最近自学linux,看鸟哥的文章.提到了apache,所以在虚拟机redhat 5下安装了一把, 结合国内外文章写下快速可行的教程: --------------------------------- ...

  4. Windows 下安装 Oracle 12c 教程

    原文 Windows 下安装 Oracle 12c 教程 申明:本文原作者:Jmq   本文给大家带来的是 Oracle 12C 的安装教程. 1.准备 1.1 下载 Oracle 12c 安装程序 ...

  5. CentOS下Eclipse的安装教程

    CentOS下Eclipse的安装教程 据了解,在Linux下的Java开发很多时候都比较喜欢使用vim + 插件,反而很少使用Eclipse,但是我是第一次使用Linux来进行Java编程,就什么都 ...

  6. 简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一

    简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一 分页非为前端分页  和 后端分页,前端分页只有适用于B/S,B/S的呈现速度远远不如C/S,而C/S则没有这个问题,所以分页必然是 ...

  7. 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)

    当前,完全硬件虚拟化技术(KVM.Xen.Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等.有时候对用户来说,完全的硬件虚 ...

  8. Ubuntu下搜狗输入法的安装教程

            前面写过一篇centos7下搜狗输入法的安装教程,现在把搜狗输入法在Ubuntu下的安装方法也记录一下,相比之下Ubuntu下安装搜狗输入法要简便得多 安装fcitx以支持搜狗输入法 ...

  9. Ubuntu下安装JDK详细教程

    Ubuntu下安装JDK详细教程 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ Ubuntu版本:Ubuntu-12.04.5-desktop-i386 ...

随机推荐

  1. netty权威指南学习笔记三——TCP粘包/拆包之粘包现象

    TCP是个流协议,流没有一定界限.TCP底层不了解业务,他会根据TCP缓冲区的实际情况进行包划分,在业务上,一个业务完整的包,可能会被TCP底层拆分为多个包进行发送,也可能多个小包组合成一个大的数据包 ...

  2. 干干净净的grep

    用grep -rn "xxxx" ./   搜索. 有时候出现大量的 错误信息 主要有 1.Is a directory 2.no such file or directory 前 ...

  3. jrebel插件的激活

    转 jrebel idea插件激活,亲测可用: 在jrebel server处,写上: http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc81 ...

  4. NAT的三种方式

    NAT的三种方式: 一.端口NAT acces-list 1 permit IP/Mask ip nat inside source list “number” interface fastether ...

  5. android 动画基础绘——view 动画(二)[补]

    前言 这个是对view 动画的补充,是一些view 动画的特殊使用场景. 回顾第一篇关于view 动画的,我介绍到view的动画都是针对元素本身的. 当我们开发view动画的时候,我们看到几个元素在做 ...

  6. php观察者模式。

    第一次写博客,大家多多关照!欢迎拍砖哦! 我也刚学设计模式,所以记录下来. <?php class person{ public $name; public $birthday; public ...

  7. cudaThreadSynchronize()

    // 调用CUDA kernel 是非阻塞的,调用kernel语句后面的语句不等待kernel执行完,立即执行.所以在 call_kernel(see kernel.cu) 中执行 m5op.dump ...

  8. HDU 1542 线段树离散化+扫描线 平面面积计算

    也是很久之前的题目,一直没做 做完之后觉得基本的离散化和扫描线还是不难的,由于本题要离散x点的坐标,最后要计算被覆盖的x轴上的长度,所以不能用普通的建树法,建树建到r-l==1的时候就停止,表示某段而 ...

  9. Centos7.4 kafka集群安装与kafka-eagle1.3.9的安装

    Centos7.4 kafka集群安装与kafka-eagle1.3.9的安装 集群规划: hostname Zookeeper Kafka kafka-eagle kafka01 √ √ √ kaf ...

  10. Ajax请求传递数组参数的方法

    方法一:拼接字符串参数 var arr={params:['param','param2']}; $.ajax({url:请求地址, data:arr, type:"POST", ...