2011-04-23 47 views
2

我有一個CakePHP網站,充當問卷。當用戶點擊「下一步」時,它將用戶從一個問題移到另一個問題。現在,對於每個人,我希望系統隨機選擇他們將收到的問題。CakePHP:重定向到一個隨機視圖

將每個問題構建爲重定向到另一個視圖的視圖。有沒有人有關於如何構建它的好主意,以便在用戶單擊「下一步」時將它們重定向到隨機視圖?

非常感謝大家。

回答

0

我最終做的是在數據庫中創建一個「路徑」表,每個記錄代表一個可能的路徑通過問卷。然後我讓控制器抓取一個隨機記錄,將它分成一個Session變量中的數組,然後在每個函數結尾的「重定向」部分使用這些數組值。感謝大家。

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 []這樣的變量的通用模板視圖作爲模板變量,然後僅使用該視圖來顯示每個問題似乎更容易。

相關問題