如何在CakePHP中添加自定义“查找”的另一个视图?

时间:2011-09-16 17:25:18

标签: cakephp

我目前在我的故障单/视图中有索引,查看,添加和编辑,并且我计划添加另一个名为current的视图。我想在该视图中仅显示“已解决”的票证,但不知道如何操作。在过去的几天里,我一直想弄清楚这一点,没有运气。我应该在哪里放置“查找”代码以及我应该在我的故障单/当前视图代码中包含哪些内容?这是我到目前为止所尝试的内容:

/controllers/tickets_controller
function current() {
$current = $this->set('tickets', $this->Ticket->find('all', array(
    'conditions' => array('Ticket.status' => 'Resolved'),
    'order' => array('Ticket.created' => 'desc')
)));
$this->set('tickets', $this->paginate());
}

/views/tickets/current.ctp
<?php
$i = 0;
foreach ($tickets as $ticket):
    $class = null;
    if ($i++ % 2 == 0) {
        $class = ' class="altrow"';
    }
?>

此代码显示与/views/tickets/index.ctp相同(包含表中的所有记录)。

谢谢, 莱曼

1 个答案:

答案 0 :(得分:0)

你快到了。 Cake中的$this->set('foo')是将变量传递给view的一种方法。

下面的代码所做的是设置一个名为current的变量find方法的返回值,该方法具有自定义条件,可以从视图中访问。 (在这种情况下,它是一个数组;但你可以设置任何东西)

除非您打算在此视图中使用分页,否则此处不需要paginate()

所以这样的事情应该可以解决问题($curr是一个糟糕的变量名称,但我没有创造力。(resolved_tickets会更有意义(为什么是最新的?)

//controllers/tickets_controller
function current() {
    $this->set('current', $this->Ticket->find('all', 
                 array('conditions' => array('Ticket.status' => 'Resolved'),
                       'order' => array('Ticket.created' => 'desc')
                 )));
}

/views/tickets/current.ctp
<?php
$i = 0;
// adjust the variable in the foreach
foreach ($current as $curr):
    $class = null;
    if ($i++ % 2 == 0) {
        $class = ' class="altrow"';
    }
    echo $curr['Ticket']['id']; // example
?>