如何使用View按钮在Controller中调整foreach的速度?

时间:2012-11-06 20:45:19

标签: php javascript html

所有

我正在使用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发回一些信息来加载数组中的下一个项目。我还需要发送一些与用户“认可”文章相关的其他数据,我希望这些数据一起发生(只有一个按钮)。

2 个答案:

答案 0 :(得分:2)

我想说你有两种选择:

1)通过AJAX请求提取文章信息,并在用户希望转到下一篇文章时显示。这是我认为最好的方式,因为它可以保证用户拥有最新版本的文章。

2)加载时将文章信息存储在页面中。即将数据写入javascript数组,隐藏的html元素或任何您喜欢的方法。当用户点击按钮时,使用页面上存储的数据加载文章。

这会回答你的问题吗?

答案 1 :(得分:1)

这不是你想在服务器端做的事情(即在PHP中)。减慢foreach循环只会减慢浏览器中整个页面的传送速度。您也无法“等待”用户操作继续执行PHP。

你的答案在于javascript(即根据用户操作隐藏/显示内容区域),或者甚至是AJAX(根据用户操作将新内容加载到页面)如果你想获得更高级的东西并且不想;预先下载所有内容。