【问题标题】:how to achieve pagination html php mysqlhtml php mysql 如何实现分页
【发布时间】:2016-07-23 05:19:34
【问题描述】:

我正在开发一个可能有很多用户的 php 网络项目。从管理的角度来看,我试图显示一个包含每个用户信息的表,并且看到用户表可能会变得非常大,我想使用分页。

  • 在后端,我创建了一个服务,它需要一个限制和一个偏移参数,用于在数据库中查询适当范围内的记录。该服务返回表中的记录总数,以及与查询匹配的记录

    public static function getUsersInfo($limit = 50, $offset=1) 
    {
        $users_count = Users::count(
                array(
                    "column" => "user_id"
                )
            );
    
        $users_info = array();
        $users = Users::query()
            ->order('created_at')
            ->limit($limit, $offset)
            ->execute()
            ->toArray();
    
        foreach ($users as $index => $user) {
            $users_info[$index]['user_id'] = $user['user_id'];
            $users_info[$index]['name'] = $user['first_name'] . " " . $user['last_name'];
            $users_info[$index] ['phone'] = $user['phone'];
            $users_info[$index] ['profile_image_url'] = $user['profile_image_url'];
        }
    
        $results = array(
            'users_count' => $users_count,
            'users_info' => $users_info
        );
        return !empty($results) ? $results : false;
    }
    
  • 在前端,理想情况下,我希望在表格底部显示导航,带有典型的上一个、下一个按钮,以及一些允许用户快速导航到所需的数字page 如果显示的页码。到目前为止,这就是我对 UsersController 所做的,没有分页。

    class UsersController extends ControllerBase
    {
        public function indexAction()
        {
            $usersObject = new Users();
            $data = $usersObject->getUsers();
    
            if ($data['status'] == Constants::SUCCESS) {
                $users = $data['data']['users_info'];
                $users_count = $data['data']['users_count'];    
                $this->view->setVar('users', $users);
            }
    
            echo $this->view->render('admin/users');    
      }
    
      public function getUsersAction()
      {
           echo Pagination::create_links(15, 5, 1);
      }
    }
    

我还没有任何工作分页,但我在想一个好方法是创建一个 Pagination 库,其中包含一个 create_links 函数,该函数采用

  • total_count 数据库中的记录,所以我知道需要多少页
  • limit 所以我知道要收集多少条记录
  • cur_page 所以我知道从哪里开始检索

因此,当使用正确的参数调用该函数时,它会生成html代码来实现分页,然后可以将其传递给视图并显示。

我以前从未这样做过,但从我目前所做的研究来看,这似乎是处理它的好方法。任何关于此的指导、建议或任何真正的东西都将不胜感激。

【问题讨论】:

标签: php html mysql pagination


【解决方案1】:

看起来您正在使用一些定制的 MVC-ish 框架。虽然它不能完全回答你的问题,但我有几点:

  1. 如果您正在查看大量用户,那么分页是您最不关心的问题。您需要考虑如何索引数据库、如何返回结果等等。
  2. 如果不了解您正在使用的底层数据库抽象层/驱动程序,就很难确定您的->limit($limit, $offset) 行是否能正常工作。偏移量可能应该默认为 0,但在不知道代码的情况下很难说。
  3. 您的第一个方法 (return !empty($results) ? $results : false;) 中的三元运算符目前没有价值,因为它前面的语句意味着变量将始终是一个数组。
  4. 避免在控制器中使用 echo 语句。它们应该返回到模板引擎以输出视图。
  5. Users 类最好命名为 User,因为 MVC 框架暗示“模型”是一个单一实体。

虽然这不是一般规则,但我使用的大多数分页系统都在零索引系统上工作(第 1 页为第 0 页),因此计算限制范围很简单:

$total_records = 1000;
$max_records = 20;
$current_page = 0;

$offset = $max_records * $current_page;

$sql = "SELECT * FROM foo LIMIT $offset, $max_records";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2013-02-15
    • 2012-06-08
    • 1970-01-01
    • 2020-04-11
    • 2010-09-27
    • 2011-09-16
    相关资源
    最近更新 更多