我有一个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
}
答案 1 :(得分:0)
嗯...为什么你要为每个问题用不同的视角构建它?将每个问题存储在数据库中似乎要容易得多,使用带有$ question和$ answers []等变量的通用模板视图作为模板变量,然后只使用该1个视图来显示每个问题。
答案 2 :(得分:0)
我最终做的是在数据库中创建一个“路径”表,每个记录代表调查问卷的可能路径。然后我让控制器抓取一个随机记录,将其分成一个Session变量中的数组,然后在每个函数末尾的“重定向”部分使用这些数组值。谢谢大家。