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

使用PHP/Ajax/Jquery显示根据内容格式化的动态帖子,php,jquery,ajax,Php,Jquery,Ajax,我正在开发一个评论/内容/发布系统,遇到了一个岔路口,所以我想我应该在选择路径之前征求其他意见。很抱歉,但目前我没有一个足够好的工作示例来展示(或者我可以分享),所以希望我的描述足够了 我有一个index.php主页,它调用loadmore.php请求在div中显示用户帖子。loadmore.php从MySQL数据库获取这些数据 每个帖子可以是不同的类型,在屏幕上显示时也会有所不同 示例(所有帖子均显示发布的用户和顶部的日期): POST:常规POST,仅限文本 链接:将链接页面的标题显示为超

我正在开发一个评论/内容/发布系统,遇到了一个岔路口,所以我想我应该在选择路径之前征求其他意见。很抱歉,但目前我没有一个足够好的工作示例来展示(或者我可以分享),所以希望我的描述足够了

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

每个帖子可以是不同的类型,在屏幕上显示时也会有所不同

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

  • POST:常规POST,仅限文本
  • 链接:将链接页面的标题显示为超链接,旁边是小缩略图,下面是从链接站点提取的文本片段
  • 图片:显示带有标题的大图片
  • 视频:在顶部显示标题,标题下的视频占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>
    <?PHP
    //Get and process post data into variables
    //Query SQL database for more/new posts
    //Return individual data in JSON format to index.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
    ?>

//内容
//单独的帖子放在这里(几个div根据内容格式化)
//更多内容
将数据获取到loadmore.php并将结果获取到变量中
如果“类型”是“链接”

追加到#postsContainer“过去做类似事情时

我只想让你的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();
?>
然后,在loadmore.php中检索发布的数据就像$POST_u['variable']一样简单,您可以将其合并到查询中(或其他任何内容),具体取决于您所做的操作


我认为从php文件加载输出比传输变量、让模板和ifs使网页膨胀(选项1)或从php文件传递html字符串(选项2)要好。

is loadmore.php作为模型或视图运行吗(检索包含post详细信息的对象,或者它获取一个对象并生成html)?它不是一个视图,它只是从index.php脚本中获取参数,并返回变量,如用户名和HTML代码,以作为前缀或附加。它只是运行SQL查询。我个人会在AJAX调用中使用JSON作为数据,这样您就可以轻松地获得“类型”属性,您可以使用该属性根据提供的内容在前端部件上创建相应的标记。
{“type”:“link”,“linkData”:“linkUrl”。.etc}
I`d将当前页面与AJAX相结合(页面调用自身),如果是HTTP_请求,则获取参数并生成post/post,否则将作为正常页面,并在视图部分使用switch语句(基于int),根据该语句创建模板use@PeterPajchlJSON是用来传递变量的。那么你的投票是选项1?
<?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();
?>
<script typ="text/javascript">
    $(document).ready(function(){
         $("#postsContainer").load("loadmore.php");
    });
</script>
var variables = $("#form").serialize();
$.post("loadmore.php", variables, function(data) {
    $("#postsContainer").html(data);
});