>PHP 프레임워크 >ThinkPHP >thinkphp에서 페이징을 구현하는 방법

thinkphp에서 페이징을 구현하는 방법

PHPz
PHPz원래의
2023-04-11 10:42:561934검색

ThinkPHP는 MVC 개발 모델을 기반으로 하는 PHP 프레임워크입니다. MVC 애플리케이션을 개발하고 있기 때문에 페이징 기능은 필수입니다. 그렇다면 ThinkPHP는 페이징을 어떻게 구현합니까? ThinkPHP에서 페이징을 구현하는 방법을 소개하겠습니다.

1. ThinkPHP 페이징의 기본 개념

페이징은 대규모 데이터 모음을 N 페이지로 나누어 사용자가 일부만 볼 수 있도록 하는 것입니다. ThinkPHP에는 두 가지 유형의 페이징이 있습니다. 하나는 일반 페이징이고 다른 하나는 AJAX 페이징입니다.

일반 페이징은 각 페이지가 전체 페이지를 새로 고쳐야 함을 의미합니다. 데이터는 PHP 코드를 통해 서버에서 가져온 다음 클라이언트로 반환됩니다. 이 데이터 상호 작용 방법은 비효율적이지만 작성이 간단합니다.

AJAX 페이징은 프런트 엔드를 통해 비동기적으로 데이터를 요청하고, Ajax 기술을 통해 데이터를 서버로 전송하는 것입니다. 서버 측에서 데이터베이스에서 데이터를 얻은 후 데이터를 프런트 엔드에 반환합니다. 이 데이터 상호 작용 방법은 매우 효율적이지만 더 복잡한 프런트 엔드 기술을 사용해야 합니다.

2. ThinkPHP에서 페이징을 사용하는 방법

구체적으로 ThinkPHP에서 페이징을 사용하는 모듈에는 크게 모델 모듈과 뷰 모듈이 있습니다. Model 모듈에서는 ThinkPHP의 Query 클래스나 Db 클래스를 사용하여 데이터베이스의 데이터를 쿼리합니다. View 모듈에서는 ThinkPHP의 페이징 클래스 Pagination과 내장된 Paginator 컨트롤을 사용하여 데이터 표시 작업을 수행합니다.

  1. 모델 모듈에서 데이터 쿼리 작업 구현

모델 모듈에서는 먼저 데이터베이스에서 데이터를 쿼리한 다음 페이징 크기에 따라 데이터의 쿼리 오프셋과 쿼리 수량을 설정해야 합니다. 필요한 데이터 페이지만 반환합니다. 구체적인 작업은 다음과 같습니다.

<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
    public function getPageUsers($page=1,$rows=10){
        $result = array();
        $count = $this->count(); // 获取总记录数
        $offset = ($page-1)*$rows; // 查询的起始位置
        $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录
        $pagination = new \Think\Paginator($count,$rows); // 实例化分页对象
        $result['rows'] = $data;
        $result['pagination'] = $pagination->show(); // 获取分页显示的HTML代码
        return $result;
    }
}

위 코드에서는 count() 메소드를 사용하여 전체 레코드 수를 가져오고,limit() 메소드를 사용하여 현재 페이지의 레코드를 가져오고, Pagination 클래스를 사용합니다. 페이징 개체를 인스턴스화하는 데 사용됩니다. Limit() 메서드는 체인 작업을 지원하고 where() 메서드와 함께 사용하여 더 복잡한 쿼리 작업을 구현할 수 있다는 점은 주목할 가치가 있습니다.

  1. View 모듈에서 데이터 표시 작업 구현

View 모듈에서는 ThinkPHP에 내장된 Paginator 컨트롤을 사용하여 페이징 정보를 표시하고 ThinkPHP의 페이징 클래스 Pagination을 사용하여 페이징 HTML 코드를 생성해야 합니다. 구체적인 연산은 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户信息管理</title>
    <link rel="stylesheet" type="text/css" href="__PUBLIC__/bootstrap/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">用户信息管理</div>
        <div class="panel-body">
            <table class="table table-striped">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>用户名</th>
                    <th>年龄</th>
                    <th>电话</th>
                    <th>邮箱</th>
                </tr>
                </thead>
                <tbody>
                <?php foreach($users[&#39;rows&#39;] as $user):?>
                <tr>
                    <td><?php echo $user[&#39;id&#39;];?></td>
                    <td><?php echo $user[&#39;name&#39;];?></td>
                    <td><?php echo $user[&#39;age&#39;];?></td>
                    <td><?php echo $user[&#39;phone&#39;];?></td>
                    <td><?php echo $user[&#39;email&#39;];?></td>
                </tr>
                <?php endforeach;?>
                </tbody>
            </table>
            <nav aria-label="Page navigation">
                <?php echo $users[&#39;pagination&#39;];?>
            </nav>
        </div>
    </div>
</div>
</body>
</html>

위 코드에서는 주로 Paginator 컨트롤과 Pagination 클래스를 사용합니다. Paginator 컨트롤에서는 컨트롤의 레이아웃, 스타일 등을 설정할 수 있습니다. Pagination 클래스에서는 Paginator 컨트롤에서 사용할 페이지 매김 HTML 코드를 얻기 위해 show() 메서드를 호출했습니다. 동시에 foreach 루프에서는 모델 계층에서 테이블로 전송된 $rows 배열을 표시합니다.

3. ThinkPHP 페이징에 관해 자주 묻는 질문

  1. 각 페이지에 표시되는 레코드 수를 설정하는 방법은 무엇입니까?

모델 레이어의 getPageUsers 메소드에서 다음과 같이 페이지당 기본 레코드 수를 설정할 수 있습니다.

public function getPageUsers($page=1,$rows=10){
    ...
}

그 중 $rows는 페이지당 기본 레코드 수를 나타냅니다. 매개변수를 직접 전달할 수도 있습니다. 페이지당 레코드 수를 변경하려면 보기 레이어에서

  1. 첫 페이지를 어떻게 표시하나요?

View 레이어에서 사용자가 첫 번째 페이지를 클릭하면 $page 매개변수의 값이 1이므로 이에 따라 데이터의 쿼리 범위를 변경해야 합니다. 구체적인 연산은 다음과 같습니다.

public function getPageUsers($page=1,$rows=10){
    $result = array();
    $count = $this->count(); // 获取总记录数
    $offset = ($page-1)*$rows; // 查询的起始位置
    $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录
    
    // 如果是第一页,直接返回第一页的数据
    if($page == 1){
        $pagination = new \Think\Paginator($count,$rows);
        $result['rows'] = $data;
        $result['pagination'] = $pagination->show();
        return $result;
    }
    
    // 如果不是第一页,则查询第一页的数据,获取分页HTML代码
    $firstPageData = $this->limit(0,$rows)->select();
    $pagination = new \Think\Paginator($count,$rows);
    $result['rows'] = $data;
    $result['pagination'] = str_replace("1</a>",$firstPageData."</a>",$pagination->show());
    return $result;
}

위 코드에서 $page가 1이면 첫 번째 페이지의 데이터를 직접 반환합니다. $page가 1보다 크면 첫 번째 페이지 데이터를 다시 쿼리하고 페이징 HTML 코드를 얻은 다음 이를 현재 페이지의 "첫 번째 페이지"로 바꿉니다. 이런 방식으로 어느 페이지에서나 "첫 번째 페이지" 버튼을 클릭하면 데이터의 첫 번째 페이지로 돌아갈 수 있습니다.

  1. AJAX 페이지 매김을 사용하는 방법은 무엇입니까?

일반 페이징의 경우 페이지를 넘길 때마다 전체 페이지를 다시 요청해야 하는데 이는 대규모 데이터 세트에는 확실히 비효율적이므로 새로 고침 없는 페이징을 달성하기 위해 AJAX 기술을 자주 사용합니다.

AJAX 페이징 사용 시 다음 사항에 주의해야 합니다.

(1) View 레이어에서 페이징 버튼을 모니터링하려면 위와 유사한 jQuery 코드를 추가해야 합니다.

$(function () { // 加载页面时,注册分页事件
    $("#page").on('click','a',function(){
        var url = $(this).attr('href');
        $("#table").load(url);
        return false;
    });
});

위 코드에서, 페이징 버튼에 추가합니다. 클릭 이벤트 리스너가 설치되어 있으며 버튼을 클릭하면 AJAX 요청이 전송되어 해당 위치에 데이터를 다시 채웁니다.

(2) 모델 계층에서 JSON 형식의 데이터는 다음과 같이 getPageUsers 메서드에서 반환되어야 합니다.

public function getPageUsers($page=1,$rows=10){
    ...
    $result = array();
    $pagination = new \Think\Paginator($count,$rows);
    $result['rows'] = $data;
    $result['pagination'] = $pagination->show();
    return json_encode($result);
}

여기에서는 json_encode() 함수를 사용하여 데이터 형식을 지정하고 JSON 형식으로 반환합니다. 이러한 방식으로 뷰 계층에서 데이터를 쉽게 구문 분석할 수 있습니다.

위 내용은 thinkphp에서 페이징을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.