【问题标题】:how to create a simple pagination in zend framework?如何在zend框架中创建一个简单的分页?
【发布时间】:2014-06-26 01:00:59
【问题描述】:

我有一个需要实现分页的项目。我尝试搜索各种时间,但找不到任何令人满意的结果。这就是为什么我在这里发布我的问题 -

这是控制器文件 IndexController.php

这是我的 indexAction,我正在尝试在其中实现分页 -

public function indexAction() {

     $this->_helper->layout->setLayout('layout');

     //pagination
     $page = $this->_request->getParam('page');
     if (empty($page)) { 
        $page = 1; 
     }
     $paginator = $this->_objCoupon->getOnePageOfOrderEntries($page);
     $this->view->paginator = $paginator;
     //pagination ends


     $coupons = $this->_objCoupon->getAllcoupon();
     $storage  = new Zend_Auth_Storage_Session();

     $dataUser = $storage->read();
     $id       = $dataUser->id;
     //$id       = $storage->id;
     $arrCoupon = array();

     if(count($coupons) > 0) {

        $i= 0;
        foreach($coupons as $couponArray) {

            $arrCoupon[$i]["pid"]   = $couponArray['id'];
            $arrCoupon[$i]["title"] = $couponArray['partner_name'];
            $arrCoupon[$i]["img"]   = $couponArray['companylogo'];
            $arrCoupon[$i]["value"] = $couponArray['coupon_value'];

            $i++;
        }
    }
    $this->view->arrCoupon = $arrCoupon;
    $this->view->selectedcheckbox = $this->selectCheckboxes;
    $this->view->id = $id;
    $this->view->asd = 'all';
}

这是模型文件CouponModel.php

这是我的模型函数

public function getOnePageOfOrderEntries($page=1) {

    //$paginator = $this->_coupon->getAllcoupon();


    $query = "SELECT * FROM rechargecoupon WHERE online_offer = 'N' ORDER BY id ASC";
    $paginator = new Zend_Paginator(
            new Zend_Paginator_Adapter_DbTableSelect($query)
    );
    $paginator->setItemCountPerPage(20);
    $paginator->setCurrentPageNumber($page);
    return $paginator;
}

鉴于我现在只是想打印分页器变量值。

这是查看文件 index.phtml

<?php if (count($this->paginator)): ?>
<?php print_r($this->paginator); die; ?>

当我执行这个文件时,我收到“Class Zend_Paginator_Adapter_DbTableSelect not found 错误”。

【问题讨论】:

  • 你能告诉我你的看法吗?你的控制器和视图的文件名是什么?
  • 我希望Zend_Paginator* 的文档能够解决这个问题。我想他们的目的是在这个查询中添加一个OFFSET?另外,请编辑您的问题以解释未找到 哪个 类。
  • @Daan--请再次检查源代码
  • @Pankaj Zend_Paginator 在我看来比编写自己的分页更难使用。

标签: php zend-framework pagination


【解决方案1】:

您应该在您的操作中包含这些变量:

  • $currentPage = 从 URL 获得的值,必须 >= 1
  • $itemsPerPage = 硬编码值,最好取自配置
  • $itemsCount = SELECT COUNT(*) FROM ... WHERE ...
  • $pagesCount = ceil($itemsCount / $itemsPerPage)
  • $items = SELECT * FROM ... WHERE ... LIMIT ($currentPage - 1) * $itemsPerPage, $itemsPerPage,这些是要显示的项目,例如文章

当您在操作中设置这些变量时,您应该将它们传递给您的视图并从中生成分页,这意味着:

  • 如果页数大于 1:
    • 显示分页
    • 生成从 1 到 $pagesCount = 1, 2, 3 ... 10 的分页
    • 每个生成的分页号都应该与您的操作相关联的 URL
  • 如果页数为 1:
    • 不显示分页

【讨论】:

  • 我的 paginator.php 文件中有一个类似“受保护的静态 $_adapterLoader = null;”的代码我们是否应该对此进行更改,因为我收到了异常'Zend_Loader_PluginLoader_Exception'之类的异常,并带有消息'在注册表中找不到名称为'Array'的插件'
【解决方案2】:

首先。 正确使用

$query = $this->select()
              ->from('rechargecoupon')
              ->where('online_offer = ?', 'N')
              ->order('id ASC')

$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($query));
        $paginator->setItemCountPerPage('50');
        $paginator->setCurrentPageNumber($page);

这是在模型中。

在视图中

<?php if ($this->paginator->getTotalItemCount() !== 0): ?>
// echo elements you need
<?php endif; ?>

<?php echo $this->paginationControl( $this->paginator, 'Sliding', 'pagination.phtml' ); ?>

pagination.phtml 显示分页。 在 pagination.phtml 中

<?php if ($this->pageCount > 1): ?>
    <div>
        <!-- Previous page  -->
        <?php if (isset($this->previous)): ?>
            <a href="<?php echo $this->url(array('page' => $this->previous)); ?>">
                <span>&lt; <?php echo 'previous'; ?></span>
            </a>
        <?php else: ?>
            <span class="disabled">&lt; <?php echo 'previous'; ?></span>
        <?php endif; ?>

        <!-- Page links -->
        <?php foreach ($this->pagesInRange as $page): ?>
            <?php if ($page != $this->current): ?>
                <a href="<?php echo $this->url(array('page' => $page)); ?>">
                    <span><?php echo $page; ?></span>
                </a>
            <?php else: ?>

            <?php endif; ?>
        <?php endforeach; ?>
        <?php if(!in_array($this->pageCount, $this->pagesInRange)): ?>
            <a href="<?php echo $this->url(array('page' => $this->pageCount)); ?>">
                <span><?php echo $this->pageCount; ?></span>
            </a>
        <?php endif;?>
        <?php if (isset($this->next)): ?>
            <a href="<?php echo $this->url(array('page' => $this->next)); ?>">
                <span><?php echo 'next'; ?> &gt;</span>
            </a>
        <?php else: ?>
            <span class="disabled"><?php echo 'next'; ?> &gt;</span>
        <?php endif; ?>
    </div>
<?php endif; ?>

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多