CakePHP: перенаправление на случайное представление - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть веб-сайт CakePHP, который действует как вопросник.Он перемещает пользователя от одного вопроса к другому, когда они нажимают «Далее».Теперь для каждого человека я хочу, чтобы система случайным образом выбирала вопросы, которые они получат.

Каждый вопрос создается как представление, которое перенаправляет в другое представление.У кого-нибудь есть хорошая идея о том, как построить его так, чтобы, когда пользователь нажимает «Далее», он перенаправлялся в случайное представление?

Большое спасибо всем.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2011

Хм ... почему вы строите это с другим взглядом на каждый вопрос?Казалось бы, гораздо проще хранить каждый вопрос в базе данных, использовать общее представление шаблона с переменными, такими как $ question и $ answers [], в качестве переменных шаблона, а затем использовать только это 1 представление для отображения каждого вопроса.

0 голосов
/ 12 июня 2011

Я закончил тем, что создал в базе данных таблицу «путей», где каждая запись представляла возможный путь в вопроснике.Затем я заставил контроллер получить случайную запись, разделить ее на массив в переменной Session, а затем использовать эти значения массива в части «redirect» в конце каждой функции.Спасибо всем.

0 голосов
/ 23 апреля 2011

Если я правильно понимаю, у вас нет уникального идентификатора в базе данных для каждой формы. В этом случае вам нужен способ их идентификации. Здесь я собираюсь использовать простой массив имен файлов представлений, но вам, вероятно, лучше создать таблицу вопросов, в которой в качестве поля будет указано имя представления, и связать представленные ответы на вопрос.

// 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...