如何使用类似模式的元素构建页面

时间:2014-01-13 14:07:24

标签: php html

我想创建一些测验。但问题会有所不同,具体取决于下拉菜单中选择的选项。

主要问题是我需要存储带有问题的html块吗? 所有问题都将是这种模式:

<tr>
<td>Question</td>
<td>Answer 1, Answer 2, ...</td>
</tr>

问题总数 - 50,完整的“问题表”有10个问题并提交按钮。 不同组合的总量 - 超过100个“问题表”。 大多数情况下的问题将重复进行。

首先,我尝试将我的问题存储在变量中:

$question01 = '<tr>
<td>Question 01</td>
<td><input type="radio" name="v2" checked="" >Answer 1 <input type="radio" name="v2">Answer 2</td>
</tr>';

然后我将它们写在表格中,如:

$fullTable = $question01 . $question02 . $question03;

但我对此感觉不对。也许你至少可以指出我应该看哪个框架/模式? 例子受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

如果你愿意,我可以把它翻译成PHP,但你应该有:

 question = {id:"123", question:"", answers:[{text:"",id:"2"}], correct:"2"}

然后你可以迭代所有问题并从数组填充可能的答案......当他们提交答案时,你可以在id上查找正确的答案

$ans = $_POST['ans'];
$id = $_POST['id'];
if ($ans == $question[$id]['correct'] )
{
   echo "correct!";
}

虽然存储在客户端上,但您很可能不希望它显示为无。我同意如果你有一个脚本提出问题答案对,那么你只需要根据需要调用php脚本。类似的东西:

for (var i = 10;i;i--){
    //calls 10 times
    $.ajax("mygenscript.php", function(){  
         //replace previous question block with this new question.
    });
}

然后你不会在客户端存储东西。

然后

可以有类似的东西:

并在成功通话中说:

var newQ = "result from ajax call"; 
$("div#question").empty().append(newQ);

答案 1 :(得分:1)

您可以将html块存储在脚本内的变量中,但这不一定是最易维护的路径。我喜欢使用模板引擎,其中HTML存储在一个单独的文件中,该文件包含PHP脚本将填充的特殊占位符。就个人而言,我是MiniTemplator的粉丝。它支持定义HTML块,每次都可以重复使用不同的替换。

例如,使用MiniTemplator语法,您的HTML将如下所示:

    <!-- $beginBlock Question -->
    <tr>
     <td>{$question_text}</td>
     <td>{$answer_options}</td>
    </tr>
    <!-- $endBlock Question -->

然后,在您的代码中,您将像这样调用MiniTemplator类上的例程(可能在所有问题/答案集的循环中)。其中$ t是MiniTemplator类的一个实例并加载了模板:

$t->setVariable("question_text", "What is your name?");
$t->setVariable("answer_options", "A: Pudnintame, B: Murgatroyd, C: Ethyl");
$t->addBlock("Question");

每次执行这三行(填写不同的问题和答案选项),模板引擎将添加另一个HTML块。