2011-04-23 4 views
2

나는 설문지 역할을하는 CakePHP 웹 사이트를 운영하고 있습니다. "다음"을 클릭하면 한 질문에서 다른 질문으로 이동합니다. 자, 각 사람을 위해, 나는 그들이 받게 될 질문을 무작위로 선택하기를 원합니다.CakePHP : 임의의보기로 리디렉션

각 질문은 다른보기로 리디렉션되는보기로 작성됩니다. 누구든지 그것을 구축하는 방법에 대한 좋은 생각을 가지고 있으므로 사용자가 "다음"을 클릭 할 때 임의의보기로 리디렉션됩니다.

많은 분들께 감사드립니다.

답변

0

내가 끝내게 된 것은 각 레코드가 설문지를 통해 가능한 경로를 나타내는 데이터베이스에 "경로"테이블을 만드는 것이 었습니다. 그런 다음 컨트롤러에서 임의의 레코드를 가져 와서 세션 변수의 배열로 나눈 다음 모든 함수의 끝에있는 "리디렉션"부분에서 해당 배열 값을 사용합니다. 모두에게 감사드립니다.

0

정확하게 이해하면 각 양식의 데이터베이스에 고유 한 식별자가 없습니다. 이 경우,이를 식별 할 수있는 방법이 필요합니다. 여기서 간단한 뷰 파일 이름 배열을 사용 하겠지만 뷰 이름을 필드로 사용하고 제출 된 응답을 질문에 연결하는 것이 더 나을 것입니다. 컨트롤러에서

// always make sure that the current view gets passed as a parameter 
echo $form->create('Question', array('url'=>array('action'=>'next', $currentView)); 
... 
echo $form->submit('Next'); 

:

var $questionViews = array('q1', 'q2', 'q3'); // filenames of the views 

function next($view = null) { 

    if(isset($this->data)) { 
     // save answers to database, session, etc 
     if(/*save successful*/) { 
      // redirect to the same action, which will load a new view because 
      // no form data was passed 
      $this->redirect(array('action'=>'next')); 
      exit(); 
     } 
    } 

    $toRender = null; // view to be rendered 
    if($view && in_array($view, $this->questionViews)) { 
     // render the explicitly passed view 
     $toRender = $view; 
    } else { 
     // grab a random view 
     $toRender = $this->questionViews[array_rand($this->questionViews)]; 
    } 

    $this->set('currentView', $toRender); // used by form action 
    $this->render($toRender); // explicit call to render stops the default view from being rendered 
} 
0

흠 ... 왜 모든 질문에 대해 다른 관점을 구축하고있다? 각 질문을 데이터베이스에 저장하는 것이 훨씬 쉬워 보일 것입니다. $ question과 $ answers [] 같은 변수를 템플릿 변수로 사용하는 일반 템플릿보기를 사용하고 그 중 하나의보기 만 사용하여 각 질문을 표시하십시오.