【问题标题】:cakephp 2x pagination of a different modelcakephp 2x 不同模型的分页
【发布时间】:2013-11-22 17:05:49
【问题描述】:

我正在尝试在JobsController 中对属于JobWorkers 进行分页。

    class JobsController extends AppController {

var $name = 'Jobs';
var $helpers = array('Html', 'Form', 'Js');
var $paginate = array(
    'Worker' => array(
        'limit' => 5, 
        'recursive' => 0, 
        'model' => 'Worker', 
        'order' => array('age' => 'ASC')
    ),      
);

function view($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid Job.'));
        $this->redirect(array('action'=>'index'));
        return;
    }

    $this->Job->id = $id;

    $workers = $this->paginate('Worker', array('Worker.job_id' => $id));
    if ($workers) {
        $this->set('workers', $workers);
    }
}

在view.ctp中:

<?php
$this->Html->script(array('jquery.min'), array('inline' => false));

$this->Paginator->options(array(
    'update' => '#content',
    'evalScripts' => true,
));
?>

<?php if (isset($workers)): ?>

    <?php echo $this->Paginator->numbers(array('model' => 'Worker')); ?>

    <table>
        <tr>
            <th>Age</th>
            <th>Info</th>
        </tr>
        <?php foreach ($workers as $worker): ?>
            <tr>
                <td>
                    <?php echo $worker['Worker']['age']; ?>
                </td>
                <td>
                    <?php echo $worker['Worker']['info']; ?>
                </td>
            </tr>
        <?php endforeach; ?>
    </table>

    <?php echo $this->Paginator->numbers(array('model' => 'Worker')); ?>
    <p>
    <?php
    echo $this->Paginator->counter(array(
        'model' => 'Worker',
        'format' => __('Page %page% of %pages%, showing %current% records out of %count% total.')
    ));
    ?></p>

<?php endif; ?>

<?php echo $this->Js->writeBuffer(); ?>

我得到了正确的工人名单。但是numbers 生成的链接不起作用。它们看起来像 /view/2/page:2/sort:Worker.age/direction:ASC 我究竟做错了什么? cakephp 版本是 2.4.1。

【问题讨论】:

    标签: cakephp pagination


    【解决方案1】:

    在您的视图操作中尝试此操作,方法是在运行时设置顺序。

    $this->paginate['Worker']['order'] = array('Worker.age' => 'ASC')
    

    现在你的函数看起来像这样

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Job.'));
            $this->redirect(array('action'=>'index'));
            return;
        }
    
        $this->Job->id = $id;
    
        $this->paginate['Worker']['order'] = array('Worker.age' => 'ASC');
        $workers = $this->paginate('Worker', array('Worker.job_id' => $id));
        if ($workers) {
            $this->set('workers', $workers);
        }
    }
    

    希望对你有所帮助。

    【讨论】:

    • 生成的链接看起来像 /view/2/page:2/ 也不起作用
    • 如果你想在这里做ajax分页,你需要设置一些条件来工作。默认情况下它将采用default布局。所以你必须在ajax分页期间制作一个ajax。还有什么是#content,我看不到任何带有idcontent的html标签。当您单击分页编号时,您能否确保它是否发送任何 ajax 调用。
    • 在没有ajax的情况下还是找不到请求地址/view/2/page:2/的错误
    • 尝试与查询字符串参数一起使用,可能是这样。 var $paginate = array( 'Worker' =&gt; array( 'limit' =&gt; 5, 'recursive' =&gt; 0, 'model' =&gt; 'Worker', 'order' =&gt; array('age' =&gt; 'ASC'), 'paramType' =&gt; 'querystring' ), );
    • 您能否将用于生成view 链接的脚本放入您的视图文件中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2010-12-29
    • 2016-09-28
    相关资源
    最近更新 更多