0

全部,

我正在使用 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>

我需要将一些信息发送回控制器以加载数组中的下一项。我还需要发送一些与用户“认可”文章相关的其他数据,我希望这些数据一起发生(只有一个按钮)。

4

2 回答 2

2

我会说你有两个选择:

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

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

这是否回答你的问题?

于 2012-11-06T20:48:44.827 回答
1

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

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

于 2012-11-06T20:49:29.397 回答