所有
我正在使用MVC模式构建一个小型PHP站点。在我的Controller中,我有一系列文章要发送到View页面。但是,我希望文章在视图中一次显示一个,并且只有当用户单击其中一个按钮时才会更改为下一个。一个按钮只允许用户查看下一篇文章,其他按钮允许用户“评分”或认可文章(此信息将发送回控制器)和继续下一篇文章。
我该怎么做?按钮在一个表单中,我有每个附加的Javascript函数。代码的简化版本如下所示:
在控制器中:
<?php
$array=array(10,11,12,13,14,15,16);
$_SESSION['next']=true;
foreach($array as $a){
if($_SESSION['next']){
$_SESSION['next']=false;
$view=$a;
}
}
?>
在视图中:
<script type="text/javascript">
function doOne(){}
function doTwo(){}
</script>
<form class="ReviewArticles" method='POST' accept-charset="UTF-8" action='index.php?action=reviewArticles'>
<p>
<textarea rows="4" cols="60" name='article' id='article' WRAP=SOFT>
<?php
echo $view;
?>
</textarea>
</p>
<p>
<button type="button" name='showNext1' id='showNext1' onclick="doOne()" >Show next 1</button>
<button type="button" name='showNext2' id='showNext2' onclick="doTwo()" >Show next 2</button>
</p>
</form>
我需要向Controller发回一些信息来加载数组中的下一个项目。我还需要发送一些与用户“认可”文章相关的其他数据,我希望这些数据一起发生(只有一个按钮)。
答案 0 :(得分:2)
我想说你有两种选择:
1)通过AJAX请求提取文章信息,并在用户希望转到下一篇文章时显示。这是我认为最好的方式,因为它可以保证用户拥有最新版本的文章。
2)加载时将文章信息存储在页面中。即将数据写入javascript数组,隐藏的html元素或任何您喜欢的方法。当用户点击按钮时,使用页面上存储的数据加载文章。
这会回答你的问题吗?
答案 1 :(得分:1)
这不是你想在服务器端做的事情(即在PHP中)。减慢foreach循环只会减慢浏览器中整个页面的传送速度。您也无法“等待”用户操作继续执行PHP。
你的答案在于javascript(即根据用户操作隐藏/显示内容区域),或者甚至是AJAX(根据用户操作将新内容加载到页面)如果你想获得更高级的东西并且不想;预先下载所有内容。