显示不同的视图布局

时间:2014-04-16 08:51:01

标签: php cakephp cakephp-2.4

我正在使用cakephp(2.4.7)进行开发,我想知道哪里是最好的位置(控制器,模型等)来编写检查功能以在视图中显示不同的东西(按钮,标签,...)。

例如,检查用户是否已经喜欢过帖子(显示“不喜欢”而不是“喜欢”)或检查用户是否是朋友并显示“删除朋友”而不是“添加朋友”按钮。

我知道这个问题非常基础,但我不知道应该把代码放在哪里。


我有什么: 视图

$hasLiked = $this->requestAction('/userlikes/hasliked/' . $postId); // returns true/ false
if ($hasLiked) {
   $this->Html->link('Dislike', array('controller' => 'userlikes', 'action' => 'dislike', $postId));
} else {
   $this->Html->link('Like', array('controller' => 'userlikes', 'action' => 'like', $postId));
}

UserlikesController

    public function hasliked($postId) {
    if (empty($this->request->params['requested'])) {
        throw new ForbiddenException();
    }       
    return $this->Userlikes->hasliked($postId, $this->Auth->user('id'));
}

用户模型

    public function hasliked($postId, $userId) {

    $result = $this->find('count', array('conditions' => array('post_id' => $postId, 'user_id' => $userId)));

    if ($result == 0) {
        return false;
    } else {
        return true;
    }

}

但我认为我的解决方案很脏,有更好的方法吗?非常感谢你。

2 个答案:

答案 0 :(得分:1)

我建议改变你的解决方案

用户模型

public function hasliked($postId, $userId) {

    return !empty($this->find('count', array('conditions' => array('post_id' => $postId, 'user_id' => $userId))));

}

UserlikesController

public function hasliked($postId) {
    if (empty($this->request->params['requested'])) {
        throw new ForbiddenException();
    }       
    $this->set('hasliked',$this->User->hasliked($postId,$this->Auth->user('id')));
}

在您的视图中

<?php if($hasliked) :?>
<?php echo $this->Html->link('Dislike', array('controller' => 'userlikes', 'action' => 'dislike', $postId)); ?>
<?php else: ?>
<?php echo $this->Html->link('Like', array('controller' => 'userlikes', 'action' => 'like', $postId));; ?>
<?php endif;?>

答案 1 :(得分:0)

我认为你错过了一件事......像Ajax这样的功能,如Like,dislike,points等。因此,简化所有操作并通过Ajax调用它们。象 -

    public function like(){
    $this->autoRender = false; // If you wants to use this function just for ajax
     if($this->request->is('ajax')){
         // do something
         // capture all values send by Ajax and Call save function
     }else{
        return; // if not a ajax call, return
     }

   }

这只是一个例子---------- 还有一件事,如果您要在View上分享相同的内容,请更好地创建element