Skip to Main Content

A mostly Out of the Box Quiz with ExpressionEngine

I'm working for an agency here in Toronto and one of the sites that I'm currently working on has a matchmaker quiz. There are four questions each with three possible answers and when the user clicks submit they are taken to a results page which will list a recommended product for them to purchase. This sounds simple enough on the surface but I was struggling with the best approach to this for a while. In the end though it was actually quite simple to achieve and only required one additional add-on.

I'm working for an agency here in Toronto and one of the sites that I'm currently working on has a matchmaker quiz. There are four questions each with three possible answers and when the user clicks submit they are taken to a results page which will list a recommended product for them to purchase. This sounds simple enough on the surface but I was struggling with the best approach to this for a while. In the end though it was actually quite simple to achieve and only required one additional add-on.

I approached Carl Crawley on skype about what I thought would be a good way to do this, but his suggestion was much simpler and most of what I'm putting here is a result of my conversation with him.

First up, build a channel called quiz results. with five fields. The first for field types need to be drop downs - I called mine {question-one}, {question-two}, {question-three} and {question-four} and populated with the answers a, b, c each on a new line. The last field is a relationship field which will be the product that the results link to, I called this {question-result}. Now start the data entry creating entries for each possible combination of answers.

Next build a basic form with radio buttons for the answer. You'll also need some way to get the $POST data into the quiz results page to pull up the correct answer. I thought about using strait php, but didn't want to enable php on my templates so looked to devot:ee for an add-on and found a few. The one that I chose looked best and is dead simple to use: EvoPost.

Next you need to create a new template called evopost (or whatever you want it to be) and set the action="" to point to that template like this action="{site_url}/template_group/evopost" and then in the evopost template you add the following code where you prefix the name="" value of each field with ep_ so if your field is name="old" then your post data would be {ep_old}:

    
    
      {exp:evopost:getpostdata}
  {redirect="/treat-matchmaker/results/{ep_old}/{ep_big}/{ep_name}/{ep_foobar}"}
{/exp:evopost:getpostdata}
    
  

This then redirects to the results template where Where your channel entries tag then pulls this information from the url structure like this

    
    
      {exp:channel:entries
  channel="matchmaker"
  search:question-one=""
  search:question-two=""
  search:question-three=""
  search:question-four=""
  disable="pagination|member_data"
}
    
  

And there you have dynamically pulled answers based on a quiz - of course with four questions - each with three answers, there's a fair amount of data entry to ensure that you have results for every possible combination.