jsnlib / joomla_pagination

帮助 Joomla! 结构化分页辅助,操作更明确

1.0.2 2018-09-19 05:16 UTC

This package is auto-updated.

Last update: 2024-08-29 05:06:07 UTC


README

帮助 Joomla! 结构化分页辅助,操作更明确。

使用方法

$pagination = new \Jsnlib\Joomla\Pagination($this);

$pagination
    
    // 每頁多少筆
    ->limit(10)
    
    // 每頁起始值
    ->offset(0)
    
    // 未分頁的總數量
    ->total(100)
    
    // 建立
    ->create(function ($joomla, $param)
    {
        // 返回分頁的數據列表
        return $joomla->model->getAll(new \Jsnlib\Ao
        ([
            'offset' => $param->offset,
            'limit' => $param->limit
        ]));
    });
  • limit():通常是固定的数量。
  • offset():因为换页的关系,通常接收来自 $_GET 参数值。
  • total():从 DB 计算出的未分页的数量。
  • create():通过 callable 取得根据 limit, offset 取得的实际列表。

其中 limit(), offset(), total() 可以直接赋值数量,也可以使用匿名函数后返回,例如

$pagination->limit(function ()
{
    // do something ......
    return 5;
})

使用示例

这里示例在 controller 建立分页,并传送到 view.html.php,若要在 view.html.php 建立分页也是没有问题的。 administrator/components/com_todolist/controllers/todolist.php

<?php 
class TodoListControllerTodoList extends JControllerLegacy
{
    public function index()
    {
        $pagination = new \Jsnlib\Joomla\Pagination($this);

        $view = $this->getView('TodoList', 'html');

        $view->setLayout('main');

        $view->pagination = $pagination
            
            // 每頁多少筆
            ->limit(10)
            
            // 每頁起始值
            ->offset($this->post->getInt('limitstart', 0))
            
            // 未分頁的總數量
            ->total(function ($joomla)
            {
                return $joomla->something_model->getNumAllFilter();
            })
            
            // 建立
            ->create(function ($joomla, $param)
            {
                // 返回分頁的數據列表
                return $joomla->something_model->getAllFilter(new \Jsnlib\Ao
                ([
                    'offset' => $param->offset,
                    'limit' => $param->limit
                ]));
            });
        
        $view->main();
    }
}

输出列表 administrator/components/com_todolist/views/todolist/tmpl/main.php

<?php foreach ($this->pagination->collection as $key => $something): ?>
    <?=$something->id?>
<?php endforeach; ?>

输出分页

<?=$this->pagination->joomlaPagination->getListFooter(); ?>

确保表单的值是否如期设置,因为 Joomla 换页使用 POST 传递与接收,请检查是否能正确 POST

<input type="hidden" name="option" value="務必正確設定如 com_news">
<input type="hidden" name="task" value="務必正確設定如 new.index">