ZheX Blog Idea来源于生活的经验

15六/090

教程翻译:用 Yii Framework 编写博客 – 10

管理 post 主要是在管理界面显示post 列表和删除 post。他们主要由 admin 操作和 delete 操作来分别完成。我们不需要对  yiic 生成的代码做太多修改。下面我们主要介绍如何完成这两个操作。

用 Tabular 方式显示文章列表

admin 操作在 tabular 中显示所有文章(包括发布的和为发布的)。这个页面同时支持分页和排序功能。下面是 PostController 的 actionAdmin() 方法:

public function actionAdmin()
{
    $criteria=new CDbCriteria;
 
    $pages=new CPagination(Post::model()->count());
    $pages->applyLimit($criteria);
 
    $sort=new CSort('Post');
    $sort->defaultOrder='status ASC, createTime DESC';
    $sort->applyOrder($criteria);
 
    $posts=Post::model()->findAll($criteria);
 
    $this->render('admin',array(
        'posts'=>$posts,
        'pages'=>$pages,
        'sort'=>$sort,
    ));
}

上面的代码和 adminList() 非常相似。 主要区别是我们这里我们用 CSort 对象来完成排序 (比如, 对哪列进行怎么样的排序)。 在 admin 视图中, 我们用 CSort 对象来生成表格头元素的链接。 当点击这些链接时, 当前页会刷新并更具当前列排列数据。

下面是 admin 视图的代码:

<h2>Manage Posts</h2>
 
<table class="dataGrid">
  <tr>
    <th><?php echo $sort->link('status'); ?></th>
    <th><?php echo $sort->link('title'); ?></th>
    <th><?php echo $sort->link('createTime'); ?></th>
    <th><?php echo $sort->link('updateTime'); ?></th>
  </tr>
<?php foreach($posts as $n=>$post): ?>
  <tr class="<?php echo $n%2?'even':'odd';?>">
    <td><?php echo CHtml::encode($post->statusText); ?></td>
    <td><?php echo CHtml::link(CHtml::encode($post->title),
        array('show','id'=>$post->id)); ?></td>
    <td><?php echo date('F j, Y',$post->createTime); ?></td>
    <td><?php echo date('F j, Y',$post->updateTime); ?></td>
  </tr>
<?php endforeach; ?>
</table>
 
<br/>
<?php $this->widget('CLinkPager',array('pages'=>$pages)); ?>

这段代码非常直接。 我们遍历文章列表,然后显示在表格中。 在表格的头元素中, 我们用CSort 生成排序的链接。 在最后,我们用 CLinkPager widget 在需要的情况下显示分页按钮。

提示: 当我们显示文章,我们用 CHtml::encode() 来加密 HTML 实体。 这样做是为了防止跨站点脚本攻击

删除 Post

当我们在 show 操作中显示 post 的时候, 如果当前用户是系统所有者, 我们会显示一个删除链接。通过点击这个按钮来完成 post 的删除。 由于 post 删除功能导致服务器端数据变更, 我们用 POST 请求来触发删除功能。我们用下面的代码来生成 delete 按钮:

<?php echo CHtml::linkButton('Delete',array(
   'submit'=>array('post/delete','id'=>$post->id),
   'confirm'=>"Are you sure to delete this post?",
)); ?>

CHtml::linkButton() 方法生成了一个链接按钮类似普通按钮。当点击这个链接的时候会通过 POST 方法提交表单。 这里我们的表单将会提交到由 array('post/delete','id'=>$post->id) 生成的 URL。 在我们的 Blog 系统中,生成的 URL 将会是 /blog/index.php?r=post/delete&id=1, 相当于 PostController 中的 delete 动作。我们同时也在点击按钮的时候跳出一个确认对话框。这个会使我们的用户能考虑清楚是否执行他们的删除操作。

delete 操作中的代码已经很明确了,我们不需要在这里加以解释。

public function actionDelete()
{
    if(Yii::app()->request->isPostRequest)
    {
        // we only allow deletion via POST request
        $this->loadPost()->delete();
        $this->redirect(array('list'));
    }
    else
        throw new CHttpException(400,'Invalid request...');
}

关联文章:

  1. 教程翻译:用 Yii Framework 编写博客 – 9
  2. 教程翻译:用 Yii Framework 编写博客 – 8
  3. 教程翻译:用 Yii Framework 编写博客 – 7
  4. 教程翻译:用 Yii Framework 编写博客 – 11
  5. 教程翻译:用 Yii Framework 编写博客 – 5

评论 (0) 引用 (0)

还没有评论.


发表评论


还没有引用.