首页 | PHP资讯 | 技术专栏 | 资源共享 | PHP培训 | PHP职场 | 图书 | PHP ON WIN | PHP圈子
返回列表 回复 发帖

[ZendFramework] Zend_Paginator分页效果实例[好猫]

[ZendFramework] Zend_Paginator分页效果实例[好猫]

说实话 要不是今天看了一个网友问Zend_Paginator分页的问题 我还一直不知道 tukiz02

以前都是用自己写的一个PPH分页

为了解决这个网友的问题 亲自看了下手册  试了下  还不错 给弄出来了

现学现卖  是我的特点  马上发出来 给大家分享 tukiz05

不过事先说好  是不是最佳的方法 这个我不保证

代码写的简单与否  我也不保证

谁让我是个菜鸟呢!tukiz10
看看效果 (没加CSS)




代码开始
================
效果实现主要有三个文件
用于View的 ——
      r.phtml (最终用户看到的结果列表页面)
      pagelist.phtml(相当于是分页的一个模板。这里用不用新建一个文件我还没摸清楚 哈哈!)
      SearchController.php (用于分页控制的文件)

r.phtml
[php]
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <?php if (count($this->paginator)): ?>
    <?php foreach ($this->paginator as $item): ?>
    <ul>
    <?php echo "<li>" . $item['name'] . "</li>"; ?>
    </ul>
    <?php endforeach; ?>
    <?php endif; ?>
    /*
      *上面部分显示每页的结果,这里调用的公司名*
      *可根据实际要求替换格式*
      */


   <?= $this->paginationControl($this->paginator, 'Elastic', 'search/pagelist.phtml'); ?>
    /*这里就是显示分页的语句*/
[/php]
前面声明编码是因为从库里读出来的是中文字符(似乎说了废话)

pagelist.phtml

<?php if ($this->pageCount): ?>
<div class="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
  <a href="/search/r?page=<?php echo $this->previous; ?>">< 上一页</a> |
<?php else: ?>
  <span class="disabled">< 上一页</span> |
<?php endif; ?>

<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
  <?php if ($page != $this->current): ?>
    <a href="/search/r?page=<?php echo $page; ?>"><?= $page; ?></a> |
  <?php else: ?>
    <?= $page; ?> |
  <?php endif; ?>
<?php endforeach; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
  <a href="/search/r?page=<?php echo $this->next; ?>">下一页 ></a>
<?php else: ?>
  <span class="disabled">下一页 ></span>
<?php endif; ?>
</div>
<?php endif; ?>


pagelist.phtml实际上就是一个如何显示分页的模板,用的时候个人可以再自己改,注意为了实现分页效果,我已经改了链接的地址


SearchController.php
[php]require_once('Zend/Paginator.php');
require_once('Zend/Paginator/Adapter/Array.php');


class SearchController extends Zend_Controller_Action
{
    public function init()
    {
        $this->initView();
    }
   
    public function rAction()
    {  
        $page =1;
        $numPerPage = 10;
        if(isset($_GET['page']) && is_numeric($_GET['page'])){
            $page = $_GET['page'];
        }
        
        $offset = $numPerPage*$page;
      
        $db = Zend_Registry::get('db');
      
        $select = $db->select()
            ->from('company' , '*')
            ->limit($offset , $numPerPage)
            ->order('pkid DESC');
      
        $stmt = $select->query();
      
        $results = $stmt->fetchall();
      
        $count = count($results);
               
        $this->view->count = $count;

        $this->page($page,$numPerPage);
      
        $this->render();
    }
   
    public function page($page,$numPerPage)
    {
        $db = Zend_Registry::get('db');
        $select = $db->select()
            ->from('company' , '*')
            ->limit(200);
        $stmt = $select->query();
        $array = $stmt->fetchall();
      
        $paginator = Zend_Paginator::factory($array);
        $paginator->setCurrentPageNumber($page)
            ->setItemCountPerPage($numPerPage);
           
        $this->view->paginator = $paginator;
    }
   
    public function pagelistAction()
    {
        Zend_Paginator::setDefaultScrollingStyle('Elastic');
        Zend_View_Helper_PaginationControl::setDefaultViewPartial('../views/scripts/search/pagelist.phtml');
        $paginator->setView($view);
    }
   
}[/php]
SearchController.php这里面没什么可讲的了,大家着重看public function page($page,$numPerPage) 和public function pagelistAction() 两个函数就可以了因为实现分页主要增加了这两个函数。

好了 Zend_Paginator分页效果实例 代码全部完了
大家试下  如果有什么要修改的地方在下面跟帖

愿文地址:http://hi.baidu.com/haomao/blog/item/ef632a3401c9ef3d5bb5f5c6.html

[ 本帖最后由 sheak 于 2008-11-3 14:55 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
о○.o. 貓''舍.о.○o
-------------
在程序界 设计很牛
在设计界 编程很棒
注册会员领开源币,奖品多多等你拿!
SUN voucher 认证考试券 全国通用 低价转让[个人]

还请你解释一下上面的代码,我认为还是fleaphp在这个分页效果上做的好一些,这个看不懂

TOP

<?= $this->paginationControl($this->paginator, 'Elastic', 'search/pagelist.phtml'); ?>
这句话还请解释一下,$this->paginationControl你view里面没有注册这个属性啊?

[ 本帖最后由 xuhualianglu 于 2008-10-20 21:24 编辑 ]

TOP

原帖由 xuhualianglu 于 2008-10-20 21:20 发表

这句话还请解释一下,$this->paginationControl你view里面没有注册这个属性啊?


这个方法在/Zend/View/Helper/paginationControl.php
о○.o. 貓''舍.о.○o
-------------
在程序界 设计很牛
在设计界 编程很棒
注册会员领开源币,奖品多多等你拿!
SUN voucher 认证考试券 全国通用 低价转让[个人]

TOP

楼主疯了吧,直接吧select放到适配器里面就可以了.

TOP

原帖由 bc1998 于 2008-10-22 15:40 发表
楼主疯了吧,直接吧select放到适配器里面就可以了.


也可以!~

习惯问题

手册上有4种方法 你自己选一个
о○.o. 貓''舍.о.○o
-------------
在程序界 设计很牛
在设计界 编程很棒
注册会员领开源币,奖品多多等你拿!
SUN voucher 认证考试券 全国通用 低价转让[个人]

TOP

page()方法既然是内部调用就写protected _page()嘛。。。。找了半天才发现

TOP

回复 1# sheak 的帖子

写个注解多好

TOP

回复 8# wanghao850707 的帖子

囧  这几行代码还要注解啊! tukiz28
о○.o. 貓''舍.о.○o
-------------
在程序界 设计很牛
在设计界 编程很棒
注册会员领开源币,奖品多多等你拿!
SUN voucher 认证考试券 全国通用 低价转让[个人]

TOP

很多代码不需要
程序的灵魂是算法,数据结构是基础。

TOP

返回列表