CakePHP Pagination sort()在相关模型上

时间:2011-03-23 05:24:46

标签: sorting cakephp pagination jquery-ui-sortable paginator

我有两种模式:计划计划详情

关系是: PlanDetails hasMany 计划计划属于 PlanDetails

PlanDetails view.ctp 中,我将引入相关的计划

我正在尝试按任意字段对计划进行排序(我已尝试过所有这些),但我无法使其正常运行。我认为我忽略了一些非常简单的事情。

这是我的基本代码:

PlanDetail>> view.ctp:

...foreach ($planDetail['Plan'] as $plan_edit) :
$class = null;
if ($i++ % 2 == 0) {
    $class = ' class="altrow"';
}...

<?php echo $this->Paginator->sort('Plan ID', 'Plan.id'); ?>...

...<?php echo $plan_edit['id']; ?>

plan_details_controller.php:

...function view($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid plan detail', true));
        $this->redirect(array('action' => 'index'));
    }
    $this->PlanDetail->recursive = 2; // To run the editable form deeper.
    $this->set('planDetail', $this->PlanDetail->read(null, $id));
    $this->set('plan', $this->paginate('Plan'));
}...

我应该补充一点,没有错误被抛出,ID字段上的sort()箭头按预期显示,但排序顺序在单击时都不会改变。

2 个答案:

答案 0 :(得分:1)

抱歉,我无法对此问题发表评论,但我注意到,在您的操作中,您将planDetail设置为您阅读的PlanDetail记录(recursive设为2),然后将plan设置为paginate调用的结果。

然后,在您的视图模板中,您将对包含$planDetail关联的Plan进行迭代,如下所示:

foreach ($planDetail['Plan'] as $plan_edit):

但是为了完成排序和分页,您需要显示paginate调用的结果,即迭代$plan中包含的记录。

在视图模板中执行debug($plan),看看您到达那里的结果,并查看按不同字段排序时记录的顺序是否发生变化。

另外,也许你正在使用我不知道的语法,但如果你只是在你的控制器中调用$this->paginate('Plan'),我不知道你只会得到相关的{{1您的特定Plan记录的记录。 (PlanDetail操作中$idview条记录相关联没有任何结果。)您可能需要在Plan调用中添加一些条件,如下所示:

paginate

答案 1 :(得分:0)

以下是我为解决这个问题所做的工作。基于johnp&amp; amp; amp; amp; amp; amp;托克斯(Tokes)。

PLAN_DETAILS / view.ctp:

...$i = 0;
foreach ($plan as $plan_edit) : // note $plan here.
}...

在我的plan_details_controller.php视图操作中:

$conditions = array("Plan.plan_detail_id" => "$id");
$this->set('plan', $this->paginate('Plan', $conditions)); // note "plan" in the first argument of set (this is required to pass the results back to the view). Also. The $condition is set to return ONLY plans that match the plan_detail_id of id (on the plan_details table).

在我看来,为了获得我的结果(因为我更改了数组名称),我不得不改变我获取值的方式:

$plan_edit['Plan']['modified'] // note I placed ['Plan'] in front of these calls as the array called for this to get the data...

直到下一个问题!解决。