使用PHP / Ajax / Jquery显示根据内容格式化的动态帖子

时间:2012-08-09 10:22:59

标签: php jquery ajax

我正在制作一个评论/内容/发布系统并在路上遇到一个分叉,所以我想在选择路径之前我应该​​先征求其他意见。对不起,但此时我还没有一个足够好的工作示例(或者我可以分享的一个),所以希望我的描述已经足够了。

我有一个index.php主页,它调用loadmore.php来请求用户帖子显示在div中。 loadmore.php从MySQL DB获取此数据。

每个帖子可以是不同类型的,并且在屏幕上显示时会以不同的方式显示。

示例(所有帖子显示发布的用户和日期在顶部):

  • POST:常规帖子,仅限文字。
  • LINK:将链接页面的标题显示为超链接,旁边显示小缩略图,以及从链接网站中提取的文本片段。
  • 图片:显示带有标题的大图片。
  • VIDEO:在顶部显示标题,标题下的视频占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 。或者,我可以让loadmore.php使用IF语句,以便返回在index.php中预先添加的相应HTML字符串,但我发现在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
    ?>

这是最好的选择?为什么?

对不起,如果它看起来很乱,我还是习惯了这个网站的格式化方法......

1 个答案:

答案 0 :(得分: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中。一种方法是使用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膨胀你的网页(选项1),或者从php文件传递html字符串(选项2)更好。