0

CakePHP アプリケーションにプロジェクトがあり、それにページネーションを追加したいと考えています。ページネーションを追加しましたが、ページ番号をクリックするか、次のページに移動すると、アプリケーションが壊れます。

ページは、正しいデータを表示するために、コントローラーに渡される変数に依存しています。ビューのコードは次のとおりです。

        <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'));    

}

ページネーションは機能しますが、最終的に変数が失われ、これが私がやろうとしていることを壊します。私は何が欠けていますか?

4

1 に答える 1

1

1 つの方法は、使用することです( APIPaginatorHelper::optionsを参照してください) 。

たとえば、$passPaginator ページの変更の間に変数を渡したいとします。したがって、最初に変数をに渡しますView

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

では、オプションを使用してViewページを変更するときに Paginator が渡すパラメーターにこれを追加できます。Paginator::optionsurl

<?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
于 2012-05-19T07:49:58.633 に答える