>백엔드 개발 >PHP 튜토리얼 >CakePHP에서 사용자 정의 페이지 매김을 만드는 방법은 무엇입니까?

CakePHP에서 사용자 정의 페이지 매김을 만드는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-06-04 08:32:391112검색

CakePHP는 개발자에게 많은 유용한 도구와 기능을 제공하는 강력한 PHP 프레임워크입니다. 그 중 하나는 페이지 매김입니다. 이를 통해 대량의 데이터를 여러 페이지로 나누어 검색과 조작을 더 쉽게 할 수 있습니다.

기본적으로 CakePHP는 몇 가지 기본 페이지 매김 방법을 제공하지만 때로는 사용자 정의 페이지 매김 방법을 만들어야 할 수도 있습니다. 이 기사에서는 CakePHP에서 사용자 정의 페이지 매김을 만드는 방법을 보여줍니다.

1단계: 사용자 정의 페이지 매김 클래스 만들기

먼저 사용자 정의 페이지 매김 클래스를 만들어야 합니다. 이 클래스는 모든 페이징 관련 로직을 처리하는 역할을 담당합니다. app/Lib/Utility 디렉토리에 CustomPaginator.php라는 새 파일을 생성하고 파일에 다음 코드를 추가합니다:

    <?php
    App::uses('PaginatorComponent', 'Controller/Component');

    class CustomPaginator extends PaginatorComponent {
    
        // Override the default method to customize the pagination logic
        public function paginate($object = null, $scope = array(), $whitelist = array()) {
    
            // Get the current page number
            $page = isset($this->Controller->request->params['named']['page']) ? $this->Controller->request->params['named']['page'] : 1;
    
            // Set the default pagination values
            $perPage = 10;
            $start = ($page - 1) * $perPage;
    
            // Get the total count of records
            $count = $object->find('count', array('conditions' => $scope));
    
            // Build the pagination data
            $result = array(
                'count' => $count,
                'perPage' => $perPage,
                'page' => $page,
                'totalPages' => ceil($count / $perPage),
                'start' => $start,
                'end' => ($start + $perPage) > $count ? $count : ($start + $perPage - 1),
                'hasPrevPage' => $page > 1,
                'hasNextPage' => ($start + $perPage) < $count
            );
    
            // Set the pagination data in the controller
            $this->Controller->set('paging', $result);
    
            // Return the paginated records
            return $object->find('all', array('conditions' => $scope, 'limit' => $perPage, 'offset' => $start));
        }
    }

이 사용자 정의 페이지 매김 클래스는 CakePHP의 기본 페이지 매김 클래스 PaginatorComponent를 기반으로 합니다. 사용자 정의 페이지 매기기 논리를 구현하기 위해 paginate() 메서드를 재정의했습니다. 다음 매개변수를 사용합니다.

  • $object: 페이지를 매길 모델 객체입니다.
  • $scope: 페이지를 매길 레코드를 필터링하는 데 사용되는 쿼리 조건입니다.
  • $whitelist: 특정 쿼리 매개변수를 허용하거나 거부하는 데 사용되는 화이트리스트 배열

구현에서는 먼저 현재 페이지의 번호를 가져온 다음 페이지당 기본 레코드 수와 시작 레코드 수를 설정합니다. 다음으로 find() 메소드를 사용하여 총 레코드 수를 가져온 다음 총 페이지 수와 종료 레코드 수를 계산합니다. 마지막으로 모든 페이징 데이터를 컨트롤러의 'paging' 변수에 설정하고 페이지가 매겨진 레코드를 반환합니다.

2단계: 사용자 정의 페이지 매김 클래스 인스턴스화

이제 사용자 정의 페이지 매김 클래스를 만들었으므로 컨트롤러에서 이를 인스턴스화해야 합니다. 이렇게 하려면 컨트롤러에 다음 코드를 추가해야 합니다.

    <?php
    App::uses('AppController', 'Controller');
    App::uses('CustomPaginator', 'Lib/Utility');
    
    class UsersController extends AppController {
    
        public $components = array('CustomPaginator');
        public $paginate = array('CustomPaginator');
    
        public function index() {
            // Get all users
            $this->set('users', $this->CustomPaginator->paginate($this->User));
        }
    }

App::uses()를 사용하여 사용자 정의 페이지 매김 클래스를 로드한 다음 컨트롤러에서 인스턴스화합니다. 또한 $comComponents 및 $paginate 속성을 사용하여 컨트롤러에 사용자 정의 페이지 매김 클래스를 추가했습니다.

index() 액션에서 $CustomPaginator->paginate()를 호출하고 User 모델 객체를 전달합니다. 그런 다음 페이지가 매겨진 사용자 데이터를 뷰 변수로 설정합니다.

3단계: 페이지가 매겨진 뷰 만들기

마지막으로 페이지가 매겨진 데이터를 표시하는 뷰를 만들어야 합니다. 'views/users/index.ctp' 파일에 다음 코드를 추가하세요.

    <h1> Users </h1>
    
    <ul>
    <?php foreach ($users as $user): ?>
        <li> <?php echo $user['User']['name']; ?> </li>
    <?php endforeach; ?>
    </ul>
    
    <div class="pagination">
        <?php
        echo $this->Paginator->prev('<< ' . __('Previous'), array(), null, array('class' => 'disabled'));
        echo $this->Paginator->numbers();
        echo $this->Paginator->next(__('Next') . ' >>', array(), null, array('class' => 'disabled'));
        ?>
    </div>

이 보기는 단순한 사용자 목록이며 페이지가 매겨진 탐색 링크를 표시합니다.

탐색 링크를 생성하기 위해 PaginatorHelper의 prev(), number() 및 next() 메서드를 사용합니다. 이 메소드는 컨트롤러에서 정의한 '$CustomPaginator' 구성 요소를 기반으로 링크를 생성합니다.

결론

사용자 정의 페이지 매김을 사용하면 특정 요구 사항을 충족할 수 있는 더 큰 제어력과 유연성을 얻을 수 있습니다. 이 기사에서는 CakePHP에서 사용자 정의 페이지 매김을 만드는 방법을 보여줍니다. 이제 이 지식을 적용하여 더욱 맞춤화된 애플리케이션을 개발할 수 있습니다.

위 내용은 CakePHP에서 사용자 정의 페이지 매김을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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