2014-04-16 3 views
0

나는 cakephp (2.4.7)로 개발 중이며 컨트롤러, 모델 등 어디서 다른 것들을 표시 할 수있는 기능을 쓰는 지 알고 싶습니다 (Buttons, Labels, ..) 보기에서.다른 모양의 레이아웃을 표시

예 : 예를 들어 사용자가 이미 게시물을 좋아하는지 ('좋아요'대신 '싫어요'표시) 확인하거나 사용자가 친구인지 확인하고 '친구 추가'버튼 대신 '친구 제거'를 표시하십시오.

나는 매우 기본적인 질문을 알고 있지만, 코드를 어디에 두어야하는지 모르겠습니다.


내가 무엇을 가지고 : 보기

$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')); 
} 

Userlike 모델

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; 
    } 

} 

하지만 내 솔루션이 매우 더러운 것 같아요, 더 좋은 방법이 있습니까? 고맙습니다.

답변

1

는 내가보기에 솔루션

Userlike 모델

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;?> 
+0

먼저 답장을 보내 주셔서 감사합니다. 당신의 솔루션은 이미 가지고있는 것과 가깝습니다. 이러한 요청을 구현하는 일반적인 방법입니까 아니면 더 좋은 방법이 있습니까? – q0re

+0

당신이 무엇을 필요로 하느냐에 달려 있습니다. 그래서 컨트롤러 팁을 이해할 수 없으므로 팁을 줄 수 있습니다. –

+0

아, 당신은'$ this-> set ('hasliked') ..'을 사용했지만'userlikes/hasliked', 나는 단지 post/view에서이 함수가 필요하다. 그게 왜 내가 requestAction을 사용합니다. 이제 내가 뭘 할 수 있니? – q0re

0

당신이 한 가지를 놓치고 있다고 생각합니다 ... 같은 기능, 싫어하는 것, 포인트 등은 Ajax에서 수행합니다. 따라서 모든 작업을 간단하게 만들고 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 
    } 

    } 

그것의 단지 예를 들어 같은 - ---------- 그리고 한 가지 더, 당신이보기에 같은 일을 공유 할 수있는 일이 있다면, 더 나은 element을 만들 수 있습니다.

+0

예, 제 문제는 내 문제처럼 새로운 것을 만드는 방법이 아니기 때문에 일부 동작 (예 : 싫어함)에 따라 다른 형태 (예 : 버튼, 싫음 버튼)를 표시하는 것입니다. 내가 무슨 말하는지 알면 .. – q0re