0

全て、

私はMVCパターンを使用して小さなPHPサイトを構築しています。コントローラ内には、表示ページに送信したい一連の記事があります。ただし、記事を一度に1つずつビューに表示し、ユーザーがいくつかのボタンの1つをクリックしたときにのみ次の記事に変更するようにします。1つのボタンでユーザーは次の記事を見ることができ、他のボタンではユーザーが記事を「採点」または承認して(この情報はコントローラーに返送されます)次の記事に進むことができます。

どうすればいいですか?ボタンはフォーム内にあり、それぞれに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>

配列内の次のアイテムをロードするために、コントローラーに情報を送り返す必要があります。また、記事のユーザーの「承認」に関連する他のデータを送信する必要があり、それらを一緒に実行する必要があります(ボタンは1つだけ)。

4

2 に答える 2

2

私はあなたが2つのオプションのうちの1つを持っていると言うでしょう:

1)AJAXリクエストを介して記事情報を取得し、ユーザーが次の記事に移動したいときに表示します。これは、ユーザーが記事の最新バージョンを持っていることを保証するので、私の意見では最良の方法です。

2)記事情報は、ロード時にページに保存します。つまり、データをjavascript配列、非表示のhtml要素、または任意の方法で書き込みます。ユーザーがボタンを押すと、ページに保存されているデータを使用して記事を読み込みます。

それはあなたの質問に答えますか?

于 2012-11-06T20:48:44.827 に答える
1

これは、サーバー側(つまり、PHP)で実行したいことではありません。foreachループの速度を落とすと、ブラウザでのページ全体の配信が遅くなるだけです。また、ユーザーアクションがPHPの実行を続行するのを「待つ」こともできません。

あなたはjavascript(つまり、ユーザーアクションに基づいてコンテンツ領域を非表示/表示する)、またはより高度になりたいがすべてをダウンロードしたくない場合はAJAX(ユーザーアクションに基づいてページに新しいコンテンツをロードする)にあります。前もってコンテンツ。

于 2012-11-06T20:49:29.397 に答える