2012-01-17 2 views
0

CakePHP 2.0과 Ajax를 사용하여 간단한 투표를 만들려고합니다. 나는이 프레임 워크에서 초보자이기 때문에 정말 어렵다는 것을 알았다. ...CakePHP 2.0에서 ajax로 간단한 투표를 만드는 방법

컨트롤러의 액션을 호출하여 테이블의 "numberVotes"필드를 업데이트하는 링크를 만들고 싶다. 데이터베이스.

나는 그것을 시도하고 있지만 나는 잘하고 있는지 모른다. 지금이 있습니다

//posts/view.ctp $ this->, HTML> 스크립트 ('votar', 배열 ('인라인'=> 거짓)); //이 레이아웃

echo '<div id=\'vote\'>'; 
    echo $this->element('vote', array('id' => $post['Post']['id'])); 
echo '</div>' 

요소/vote.ctp

if(!empty($voting)){ 
echo "You have voted!!!"; 
}else{ 
echo '<a href="#" onclick="votar(\''.$id.'\');return false;">Vote here!!</a> 
} 

웹 루트/JS/vote.js

//XMLHttpRequest Ajax 
function newAjax() 
{ 
var xmlhttp=false; 
try 
{ 
    xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch(e) 
{ 
    try 
    { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch(E) { xmlhttp=false; } 
} 
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest();  } 
return xmlhttp; 
} 


function voting(num) { 
var url; 
var obCon = document.getElementById('vote'); 
var ajax = newAjax(); 

url = 'http://localhost:8888/mysite/posts/voting/' + num; 
alert(url); 
ajax.open("GET", url); 

ajax.onreadystatechange=function(){ 
    if(ajax.readyState==4){ 
     if(ajax.status==200){ 
      obCon.innerHTML=ajax.responseText; 

     }else if(ajax.status==404){ 
      obCon.innerHTML = "Page not found"; 
     }else{ 
      obCon.innerHTML = "Error:"+ajax.status; 
     } 
    } 
} 
ajax.send(null); 

}

에로드 // 컨트롤러/PostsCont roller.php

public function voting($id = null){ 
      ... //stuff to add the vote in the DB 
    $this->set(array('id' => $id, 'voting' => 'yes')); 
    $this->render('/Elements/vote', false); 
} 

나는 아약스에 대한 CakePHP에서의 힘을 사용하고 있지 않다 확신 ...하지만 난 그것을 어떻게 그 이상을 적용 할 수있는 내가 잘 모릅니다. 제안 사항이 있으십니까?

감사합니다.

+0

나는 정말 사람들이 '예'또는 '아니오'를 투표 할 수 있도록 노력 여부를 알 수 없습니다

<?php $this->Js->get('#link-id'); $this->Js->event( 'click', $this->Js->request( array('action' => 'vote', $post_id), //this is effectively www.yourdomain.com/posts/vote/1 (if the post_id is 1) array('async' => true, 'update' => '#content') ) ); ?> 

컨트롤러가 다음과 같이 표시한다 , 또는 사람/주제에 대해 이름으로 투표 할 수 있습니다. 투표 시스템에 대해 좀 더 자세히 설명해 주시겠습니까? 또한 귀하의 오류를 알려주십시오. 단순히 뭔가를 게시하고 '작동하지 않습니다'또는 '더 좋게 만들자'라고 말하면 Stackoverflow에서 많은 주목을받지 못할 것입니다. – Vigrond

답변

1

그것은 당신이 투표 시스템은 당신이 올바른 방향으로 가고 얻을 수있는 몇 가지 예입니다 여기에 설정할 수 있지만 방법을 정확히 나에게 완전히 분명하지 않다 : 설치에

사용 CakePHP의 JS 도우미 전체 AJAX 요청이.

'link-id'ID가있는 링크의 클릭 이벤트에 AJAX 요청을 바인딩합니다. 이 요청은 정상적인 요청처럼 컨트롤러에 전달되지만, Cake의 기본 AJAX 레이아웃을 사용해야한다. 요청의 결과는 html로 된 모든 내용을 대체하기 위해 사용해야한다. #content div.

이보기 파일에 간다 :

<?php 
function vote($id) { 
    //update your number in the database 
    if(/* the update was a success */){ 
     $this->set('message', 'Thank you for voting!'); 
    } else { 
     $this->set('message', 'Try again.'); 
    } 

    //then in vote.ctp, echo $message somewhere 
    //the result of vote.ctp will replace #content on your page 
} 
?>