2012-05-14 1 views
0

У меня есть проект в приложении CakePHP, и я хочу добавить к нему разбивку на страницы. Я добавил разбивку на страницы, но когда я нажимаю на номер страницы или перехожу на следующую страницу, мое приложение ломается.CakePHP 2 Как передать переменные через URL-адрес при использовании разбивки на страницы?

Страница предназначена для передачи переменных, передаваемых контроллеру, для отображения правильных данных. Вот мой код для просмотра:

 <table class="table table-striped"> 
      <thead> 
       <tr> 
        <th>Job ID</th> 
        <th>Date</th> 
        <th>Site</th> 
        <th>&nbsp;</th> 
       </tr> 
      </thead> 
      <tbody> 
       <?php foreach ($data as $jobsheet) { ?> 
        <tr> 
         <td> 
          <?php echo $jobsheet['Jobsheet']['jobnum']; ?> 
         </td> 
         <td> 
          <?php echo date("l, jS F Y", strtotime($jobsheet['Jobsheet']['jobdate'])); ?> 
         </td> 
         <td> 
          <span class="companyname"><strong><?php echo $jobsheet['Siteaddress']['sitename'] ?></strong></span><br /> 
          <?php echo $jobsheet['Siteaddress']['addressline1']; ?>, 
          <?php echo $jobsheet['Siteaddress']['addressline2']; ?>, 
          <?php if ($jobsheet['Siteaddress']['addressline3'] = '') { ?> 
           <?php echo $jobsheet['Siteaddress']['addressline3']; ?>, 
          <?php } else { ?> 

          <?php } ?> 
          <?php echo $jobsheet['Siteaddress']['city']; ?>, 
          <?php echo $jobsheet['Siteaddress']['county']; ?>, 
          <?php echo $jobsheet['Siteaddress']['country']; ?>, 
          <?php echo $jobsheet['Siteaddress']['postcode']; ?> 
         </td> 
         <td><a data-toggle="modal" href="#viewjobsheet<?php echo $jobsheet['Jobsheet']['id']; ?>" onClick="document.getElementById('jbif<?php echo $jobsheet['Jobsheet']['id']; ?>').src='/modal/customers/<?php echo $company['Company']['id']; ?>/jobs/<?php echo $jobsheet['Jobsheet']['id']; ?>/view/';" title="View" class="icon-eye-open"></a> 
         </td> 
        </tr> 
       <?php } ?> 
      </tbody> 
     </table> 
    </div> 
</div> 

<div class="row"> 
    <div class="controls"> 
     <?php echo $this->Paginator->prev('« Previous', null, null, array('class' => 'disabled')); ?> 

     <?php echo $this->Paginator->numbers(); ?> 

     <?php echo $this->Paginator->next('Next »', null, null, array('class' => 'disabled')); ?> 
    <br /> 
    <br /> 
     <?php echo $this->Paginator->counter(array(
       'format' => 'Page {:page} of {:pages}, showing {:current} records out of 
         {:count} total, starting on record {:start}, ending on {:end}' 
      )); 
     ?> 
    </div> 
</div> 

Это контроллер:

function index(){ 

    $companyid = $this->params['customer']; 
    $this->set('companyid', $companyid); 
    $siteid = $this->params['site']; 

    $this->loadModel('Jobsheet'); 

    // Job Sheets 
    $jobsheets = $this->Jobsheet->find('all', array('conditions' => array('Jobsheet.company' => $companyid), 'recursive' => 2, 'order' => 'Jobsheet.jobdate DESC', 'limit' => '10')); 
    $this->set('jobsheets', $jobsheets); 

    $this->paginate = array(
     'limit' => 10 
    ); 

    $data = $this->paginate('Jobsheet'); 
    $this->set(compact('data'));  

} 

Хотя пагинация делает работу, он заканчивает тем, что потери переменной, и это ломает то, что я пытаюсь сделать. Что мне не хватает?

ответ

1

Один из способов заключается в использовании PaginatorHelper::options (см API)

Например, говорят, что мы хотим передать переменную $pass между изменениями Paginator страниц. Поэтому сначала передайте переменную View.

public function index() { 
    $pass = 'testString'; 
    $this->set(compact('pass')); 
    $this->set('posts', $this->paginate()); 
} 

В View, мы можем добавить это параметры, которые Paginator проходит при смене страниц с помощью Paginator::options и опции url.

<?php 
    $this->Paginator->options(array(
     'url' => array(
      'pass' => $pass 
     ) 
    )); 
?> 

Так что, если вы перешли от страницы 1 к странице 2, в результате чего URL будет что-то похожее на:

http://localhost/cake/posts/index/pass:testString/page:2 

Это также, как Paginator проходит порядка сортировки и сортировки ключей. Так что в то время как «проход» в pass:testString может быть любым, что вы хотите, не используйте sort, direction и page.

Пока вы меняете страницы через ссылки Paginator, переданные переменные останутся. Обратите внимание, что вы можете получить доступ к значениям переданных аргументов как в View, так и в Controller по следующему адресу:

$this->passedArgs 

 Смежные вопросы

  • Нет связанных вопросов^_^