2014-05-24 3 views
1

다음 코드는/index.ctp에 있습니다. 현재 모든 페이지가 한 페이지에 표시됩니다. 페이지 당 20 개의 레코드를 제한하고 싶습니다. 프로젝트를 구울 때 페이지 매김이 제공되었지만 아직 초보자이며 페이지 매김을 변경하는 방법을 알지 못합니다. 누군가 도와 주실 수 있습니까?Cake PHP 페이지 매김을 페이지 당 레코드 제한으로 변경합니다.

전화/index.ctp :

<div class="callsIndex"> 
    <h2><?php echo __('Call Details'); ?> </h2> 
    <div class="bottomButtonnew"><?php echo $this->Html->link(__('Add Calls'), array('action' => 'add')); ?></div> 


    <table cellpadding="0" cellspacing="0"> 
     <tr> 

      <th><?php echo $this->Paginator->sort('Call Date'); ?></th> 
      <th><?php echo $this->Paginator->sort('Call Time'); ?></th> 
      <th><?php echo $this->Paginator->sort('Comments'); ?></th> 
      <th><?php echo $this->Paginator->sort('Next Call Date'); ?></th> 
      <th><?php echo $this->Paginator->sort('Customer Name'); ?></th> 
      <th><?php echo $this->Paginator->sort('Company Name'); ?></th> 
      <th><?php echo $this->Paginator->sort('Employee Name'); ?></th> 
      <th class="actions"><?php echo __(''); ?></th> 
     </tr> 
     <?php foreach ($calls as $call): ?> 
      <tr> 

       <td><?php echo date("d-m-Y", strtotime($call['Call']['call_date'])); ?>&nbsp;</td> 
       <td><?php echo h($call['Call']['call_time']); ?>&nbsp;</td> 
       <td><?php echo h($call['Call']['comments']); ?>&nbsp;</td> 
       <td><?php echo date("d-m-Y", strtotime($call['Call']['next_call_date'])); ?>&nbsp;</td> 
       <td> 
        <?php echo $this->Html->link($call['Customers']['customer_name'], array('controller' => 'customers', 'action' => 'view', $call['Customers']['id'])); ?> 

       </td> 
       <td> 
        <?php echo $this->Html->link($call['Companies']['company_name'], array('controller' => 'companies', 'action' => 'view', $call['Companies']['id'])); ?> 
       </td> 
       <td> 
        <?php echo $this->Html->link($call['Employees']['employee_name'], array('controller' => 'employees', 'action' => 'view', $call['Employees']['id'])); ?> 
       </td> 
       <td class="actions"> 


        <?php echo $this->Html->link(__('View'), array('action' => 'view', $call['Call']['id'])); ?> 
       </td> 
      </tr> 
     <?php endforeach; ?> 
    </table> 
    <p> 
     <?php 
     echo $this->Paginator->counter(array(
      'format' => __('Page {:page} of {:pages}, showing {:current} records out of {:count} total') 
     )); 
     ?> </p> 
    <div class="paging"> 
     <?php 
     echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled')); 
     echo $this->Paginator->numbers(array('separator' => '')); 
     echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled')); 
     ?> 
    </div> 
    <br> 

</div> 

callsController : (

$ this-> 설정 :

<?php 
App::uses('AppController', 'Controller'); 

class CallsController extends AppController { 

public $components = array('Paginator'); 
public $paginate = array(
     'limit' => 10 
    ); 

public function index() { 
     $userid=$this->Session->read('User.userid'); 
     if(isset($userid)&&$userid!=null) 
     { 
      $this->Call->recursive = 0; 
      $this->set('calls', $this->Paginator->paginate()); 
      $result=$this->Call->getcalls($userid); 
      $this->set('result', $result); 
     } 
     else{ 
      $this->set('loggedout',"loggedout"); 
      $this->render("../Pages/home"); 
      $this->layout = '../Pages/home'; 
     } 


    } 
//some code 
} 
+0

찾기 논리는 어디에서 찾을 수 있습니까? – Oldskool

답변

5

당신은 당신이 코드를 아래보다

Public $components =array('paginator'); 

    public function beforeFilter() 
    { 
     parent::beforeFilter(); 
     $this->Paginator->settings=array(
       'limit'=>10 
     ); 
    } 

을 입력 할 수 있습니다 AppController.In 당신의 AppController에 그것을해야 매김 component.You를 사용하여 쉽게 할 수 있습니다 당신이 인덱스 방법을 그냥이 라인을 변경

$this->set('calls', $this->Paginator->paginate()); 

나는 지금은 잘 될 것 같아요 이 코드는 모든 컨트롤러에서 작동합니다.하지만이 코드는 CallsController 만 변경하려는 경우. 이 코드를 수행하십시오.

참고 : 페이지 설정을 적용하는 두 가지 방법은 컨트롤러에있는 다른 구성 요소를 사용하는 것입니다.

0
<?php 
App::uses('AppController', 'Controller'); 

class CallsController extends AppController { 

public $components = array('Paginator'); 
public $paginate = array(
    'limit' => 20 
); 

} 
+0

내 callsController에 해당 코드를 추가했지만 변경 사항은 없으며 여전히 쇼핑몰 레코드를 보여줍니다. 내 callsController 인덱스 함수로 질문을 업데이트했습니다. 거기에서 내가 바꿀 필요가있는 것이 있습니까? @ 소니 – user3652541

+0

@sony 여기에 컴포넌트를 사용했기 때문에 이것이 올바르지 않습니다. 왜 $ 페이지 매김을 사용해야합니까? 구성 요소 페이지 매김과 컨트롤러 페이징을 혼합하지 마십시오! –

1

귀하의 예제에서 올바른 호출은 다음과 같이해야한다 'calls', $ this-> paginate());

그래서 당신의 코드는 다음과 같습니다

<?php 
App::uses('AppController', 'Controller'); 

class CallsController extends AppController { 

public $components = array('Paginator'); 
public $paginate = array(
     'limit' => 10 //Here can you change the default limit 
    ); 

public function index() { 
     $userid=$this->Session->read('User.userid'); 
     if(isset($userid)&&$userid!=null) 
     { 
      $this->Call->recursive = 0; 
      $this->set('calls', $this->paginate()); 
      $result=$this->Call->getcalls($userid); 
      $this->set('result', $result); 
     } 
     else{ 
      $this->set('loggedout',"loggedout"); 
      $this->render("../Pages/home"); 
      $this->layout = '../Pages/home'; 
     } 


    } 
//some code 
} 
+0

위 코드를 변경했지만 여전히 모든 레코드를 표시하며 10 개의 레코드로 제한되지 않습니다. @lamasgergo – user3652541

+0

페이지가 매겨진 레코드는 $ calls 변수에 있습니다. Advice1 :보기 파일에 SQL 디버그를 작성하고 mysql 쿼리를 확인하십시오. 제한이 있습니까? $ call 변수를 어딘가에 덮어 쓴다고 생각합니다. Advice2 : 간단한 var_dump ($ this-> paginate()); (또는 디버그) 컨트롤러에서이 함수의 결과가 무엇인지 확인하십시오. – lamasgergo

+0

이것은 잘못되었습니다! 컴포넌트 페이지 매김과 컨트롤러 페이지 매김이 섞여 있습니다! –