How to add another view with customized "find" in CakePHP?
I currently have index, view, add and edit from my tickets/views and am planning to add another view called current. I want to display only the "Resolved" tickets on that view but have no idea how to do it. I've been trying to figure this out for the past couple of days with no luck. Where should I put the "find" code and what should I include on my tickets/current view code? Here's what I have tried so far:
/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"';
}
?开发者_开发知识库>
This code displays the same as /views/tickets/index.ctp (with all the records from the table).
Thanks, Lyman
You were almost there. $this->set('foo')
in Cake is one way you can pass variables to the view
.
What the code below does is set a variable called current
the return value of the find
method which has a custom condition, which can be accessed from the view. (It's an array in this case; but you can set anything)
You don't need the paginate()
here unless you plan to use pagination in this view.
So something like this should do the trick ($curr
is a bad variable name but I wasn't feeling inventive. (resolved_tickets
would make more sense (why current?))
//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
?>
精彩评论