我正在制作一个评论/内容/发布系统并在路上遇到一个分叉,所以我想在选择路径之前我应该先征求其他意见。对不起,但此时我还没有一个足够好的工作示例(或者我可以分享的一个),所以希望我的描述已经足够了。
我有一个index.php主页,它调用loadmore.php来请求用户帖子显示在div中。 loadmore.php从MySQL DB获取此数据。
每个帖子可以是不同类型的,并且在屏幕上显示时会以不同的方式显示。
示例(所有帖子显示发布的用户和日期在顶部):
不要关心格式化等等,我只是想表明每个帖子的格式会根据帖子的类型而有所不同,并且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
?>
这是最好的选择?为什么?
对不起,如果它看起来很乱,我还是习惯了这个网站的格式化方法......
答案 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)更好。