2

私はコメント/コンテンツ/投稿システムに取り組んでいて、道に分かれているので、道を選ぶ前に他の意見を聞くべきだと考えました。申し訳ありませんが、現時点では、提示するのに十分な実用的な例 (または共有できるもの) がありません。うまくいけば、私の説明で十分です。

loadmore.php を呼び出してユーザーの投稿を div に表示するように要求する index.php メイン ページがあります。loadmore.php は、MySQL DB からこのデータを取得します。

各投稿にはさまざまな種類があり、画面に表示されるとさまざまに表示されます。

例 (すべての投稿は、投稿したユーザーと日付を一番上に表示します):

  • POST: 通常の投稿、テキストのみ。
  • リンク: リンク先のページのタイトルをハイパーリンクとして表示し、その横に小さなサムネイル画像を表示し、リンク先のサイトから抽出したテキストのスニペットを下に表示します。
  • PICTURE: 大きな画像とその下にキャプションを表示します。
  • ビデオ: タイトルを上部に表示し、タイトルの下のビデオは div の半分の幅を取り、ビデオの説明はビデオの隣にあります。

書式設定などは気にしないでください。投稿の種類に応じて各投稿の書式設定が異なり、HTML が長くなる可能性があることを示したかっただけです。

さて、これが私が知りたいことです。生成または選択された HTML はどこから来るのか? (簡単にするために、疑似コードを使用しています)

オプション 1。index.phpページ自体のajax/jsにさまざまなHTML「テンプレート」を配置し、一連のIFステートメントを使用して変数を入力するだけで済みますが、これがインデックスファイルにある必要があるかどうかはわかりません。

index.php

    <div id="mainContainer">
    //Content
    <div id="postsContainer">
        //Individual posts go in here (Several divs formatted according to content)
    </div>
    //More content
    </div>
    <script>
     GET data to loadmore.php and get results into variables
     IF "type" is "link" 
         append to #postsContainer "<div id="linkURL"....$variables etc...
     IF "type" is "video" 
         append to #postsContainer "<div id="videoDiv"....$variables
     //And so on...
    </script>

loadmore.php

    <?PHP
    //Get and process post data into variables
    //Query SQL database for more/new posts
    //Return individual data in JSON format to index.php
    ?>

オプション 2。または、index.php の先頭に追加する適切な HTML 文字列を返すために、loadmore.php に IF ステートメントを使用させることもできますが、2 つの PHP ファイル サーバー間で非常に多くの長い HTML 文字列を渡すのは非効率的であることがわかりました。変数のみを渡すことができる側。

index.php (注: スクリプト部分のみが異なります)

    <div id="mainContainer">
    //Content
    <div id="postsContainer">
        //Individual posts go in here (Several divs formatted according to content)
    </div>
    //More content
    </div>
    <script>
     //GET data to loadmore.php and get resulting HTML string
     //Append to #postsContainer the HTML string returned from loadmore.php
    </script>

loadmore.php

    <?PHP
    //Get and process post data into variables
    //Query SQL database for more/new posts
    IF "type" is "link" 
         $returnHTML = "<div id="linkURL....$variables etc...
    IF "type" is "video" 
         $returnHTML = "<div id="videoDiv....$variables
    //And so on...

    return $returnHTML; 
    //This is a single long string returned with all HTML formatted by loadmore.php
    //index.php simply has to Append the entire string into the div
    ?>

これで行くのに最適なルートはどれですか?なぜ?

乱雑に見えて申し訳ありませんが、私はまだこのサイトのフォーマット方法に慣れています...

4

1 に答える 1

3

昔、似たようなことをしたとき、

単純に、表示したい投稿を loadmore.php で反復処理し、タイプを判別し、正しいフォーマットをエコーするようにします。

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
//...
$result = $mysqli->query($query);

while ($row = $result->fetch_array(MYSQL_ASSOC)) {
  $count += 1;
  echo '<div id="post'.$count.'">';
  switch ($row['type']) {
    case 'POST':
      //POST format
      break;
    case 'LINK':
      //LINK format
      break;
    case 'PICTURE':
      //PICTURE format
      break;
    //...
    default:
      //default
  }
  echo '</div';
}

$result->free();
$mysqli->close();
?>

次に、php ページを div にロードするだけです。1 つの方法は、jQuery を使用することです。

<script typ="text/javascript">
    $(document).ready(function(){
         $("#postsContainer").load("loadmore.php");
    });
</script>

パラメータを loadmore.php に渡したい場合 (たとえば、フォームから、おそらく非表示)、次のように使用できます。

var variables = $("#form").serialize();
$.post("loadmore.php", variables, function(data) {
    $("#postsContainer").html(data);
});

次に、loadmore.php に投稿されたデータを取得するのは $POST_['variable'] と同じくらい簡単です。実行内容に応じて、それをクエリ (またはその他のもの) に組み込むことができます。

php ファイルから出力をロードするだけのほうが、変数を転送してテンプレートと ifs で Web ページを肥大化させたり (オプション 1)、php ファイルから html 文字列を渡したりするよりも優れていると思います (オプション 2)。

于 2012-10-16T14:42:15.963 に答える