— 文章所属小组: CakePHP
CakePHP应用开发 第三章 简单应用的开发实例(8)
  • Moon.Wong
  • 评论(0)

查看已完成事项和待完成事项

Cake待做事项已经可以将所有存储在数据库中的事项罗列出来。但是在实际使用中,有些事 项已经完成了,而其他一些事项仍然处于待做状态。我们希望Cake待做事项能分开罗列出已完成和未完成事项。这可以让我们更加清楚的知道哪些事项已经完 成,还有哪些仍然未完成。

正如你将会见到那样,我们不会为这些清单单独添加相应的操作,实际上,我们会在index 操作做一些修改,以使其具备展示不同清单的功能。我们是通过向index操作传输一个参数来实现,这个参数会告诉index操作用户想要查看什么样的内 容。


动手时间:查看已完成和为完成的事项。

1,打开tasks_controller.php文件,用如下代码替代index操作:

function index($status=null) {

if($status == 'done')
$tasks = $this->Task->find('all', array('conditions' =>
array('Task.done' => '1')));
else if($status == 'pending')
$tasks = $this->Task->find('all', array('conditions' =>
array('Task.done' => '0')));
else
$tasks = $this->Task->find('all');
$this->set('tasks', $tasks);
$this->set('status', $status);
}

2. 为了使得用户可以从所有事项清单页面访问已完成和未完成事项清单,我们在/CakeTooDoo/apps/views目录下的index.ctp文件末 尾添加了如下代码:

<?php if($status): ?>

<?php echo $html->link('List All Tasks', array('action'=>'index')); ?><br />

<?php endif;?>
<?php if($status != 'done'): ?>

<?php echo $html->link('List Done Tasks', array('action'=>'index', 'done')); ?><br />

<?php endif;?>
<?php if($status != 'pending'): ?>

<?php echo $html->link('List Pending Tasks', array('action'=>'index', 'pending')); ?><br />

<?php endif;?>

3,为了使得用户可以从添加新事项和编辑事项的页面访问这两个清单,我们可以打开/CakeTooDoo/apps/views下的 add.ctp 和 edit.ctp两个文件,在后面加上如下代码:

<?php echo $html->link('List Done Tasks', array('action'=>'index', 'done')); ?><br />
<?php echo $html->link('List Pending Tasks', array('action'=>'index', 'pending')); ?><br />

怎么回事?

我们修改了index操作,为其添加了一些新的代码。我们首先做的事情就是在index操 作添加了一个名为$status的状态参数,如果$status参数为“done”(完成),index操作会条用Task模型的带有条件的调用 find()函数:$this->Task->find('all', array('conditions' => array('Task.done' => '1')))。这里,我们告诉Task模型只返回那些done字段等于1的所有事项,如果事项行未完成的话,它的done字段的值为0.如 果$status为“pending”(待做),那么该操作就只会返回那些done字段的值为0的事项。如果状态参数$status未定义,它会返回 tasks表中所有的事项。

所有事项的数据都是由这三种查找函数中的一种返回的,数据会存储在局部变量$tasks 中,我们通过调用控制器的set函数,将该变量传送给视图。事项的状态信息也是这样传出给视图的。

在视图中,我们分别为完成事项和待做事项添加了链接。我们不想在当前页面中显示一些连接。 比如,如果我们当先罗列了所有完成了的事项,因此我们不想在该页面出现一个到完成事项的链接。为了实现这点。我们利用传送给视图的$status变量,对 当前状态做了一个简单的判断。

填写登录信息
用户名
密码