2016-04-03 112 views
1

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

  • 在后端,我创建了一个希望限制,将用于在适当的范围内查询记录数据库中的偏移参数的服务。该服务返回表中的总记录数,随着记录与查询匹配的

    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; 
    } 
    
  • 在前端,我想实现理想情况下,在表的底部都显示的导航,带有典型的上一个,下一个按钮以及一些数字,用户可以在显示页码时快速导航到所需的页面。这是我迄今为止的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代码来实现分页,而这又可以被传递到视图和显示。

我从来没有这样做过,但从迄今为止所做的研究来看,似乎这可能是一种很好的方法来处理它。任何指导,建议,或任何真的,对此将不胜感激。

+0

google:http://code.tutsplus.com/tutorials/how-to-paginate-data-with-php--net-2928 – 2016-04-03 19:10:47

+0

向我们展示一些代码。 – sensation

回答

0

它看起来像你使用一些定制的MVC-ISH框架。虽然它没有完全回答你的问题,我有几点:

  1. 如果你正在看很多的用户,分页是你的问题最少。您需要考虑数据库如何编制索引,结果如何返回等等。
  2. 如果不理解您正在使用的底层数据库抽象层/驱动程序,很难确定您的->limit($limit, $offset)行是否可以正常工作。偏移量应该默认为0,但不知道代码很难说。
  3. 您的第一个方法(return !empty($results) ? $results : false;)中的三元运算符目前是无价值的,因为它之前的语句将意味着该变量将始终是一个数组。
  4. 避免控制器中的回声语句。他们应该返回到模板引擎以输出视图。
  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";