我刚开始学习PHP,并试图建立我的第一个数据驱动的网页,以帮助我学习,但我现在似乎遇到了一个让我疯狂的问题。
以下是一些背景知识。
我一直试图从数据库中提取内容,此内容已经用html段落标记标记。内容将由用户提交,因此我无法知道每行将包含多少段。
然后我循环遍历内容并计算段落,以便最终在每个包含div的内部包含5个段落。
以下是我用来执行此操作的代码,我知道我的代码有点基本,但只要在一个查询中检索所有内容,它似乎工作正常。
$stmt = $db->prepare('SELECT * FROM content');
$stmt->execute();
foreach($stmt as $row) {
$allParagraphs .= $row['content'];
}
$paragraphArray = explode("</p>", $allParagraphs);
$paragraphCount = 0;
echo '<div class="bookPage">';
foreach ($paragraphArray as $value) {
echo $value;
$paragraphCount = $paragraphCount + 1;
if ($paragraphCount == 5){
echo '</div><div class="bookPage">';
$paragraphCount = 0;
}
}
echo '</div>';
现在是我的问题。
现在我想使用PHP和Jquery包含无限滚动效果的分页。我有足够的信心做到这一点;但是,我注意到当我引入分页时,我正在使用的当前代码(计算每5段)不会起作用。
据我所知,在完成代码后,将要发生的是关闭div将被插入然后,当通过ajax进行第二次查询时(阅读更多链接点击)它将会导致一个新的开放div。这导致每个查询的剩余段落被div标签包围,不包含我需要的5个段落。
基本上,从最简单的角度来说,我想要做的是仍然能够在每5段包装div标签,但仍然能够通过ajax对结果进行分页。 如果有人能告诉我最好的方法,我将非常感激。
到目前为止,我对这个问题的思考......
我不确定这是否有可能导致我相信我已经采取了错误的方式。我目前不是很有经验,但我不禁想到将每个段落存储在数据库中的单独行中会更容易,这样我就可以将它们以5的倍数拉出来。但是后来,某些东西否则告诉我根本不会是一个实际的解决方案,特别是因为我无法知道每个用户将编写/提交多少段落。
我没有足够的积分来发布图片所以这里是我上传的图片的链接,试图证明我的意思,如果我试图描述这个问题是不够的。
图表显示问题
提前感谢您的任何建议。
答案 0 :(得分:0)
我猜您可以删除HTML
脚本中的所有PHP
标记,并将段落内容作为JSON
对象返回,例如。
所以,基本上,你会返回类似的内容:
echo json_encode($paragraphArray);
请求jQuery
这样(这是http://api.jquery.com/jQuery.getJSON/的第一个例子的采用):
jQuery.getJSON('yourURL.php', function(data) {
var items = [];
jQuery.each(data, function(key, val) {
items.push('<p>' + val + '</p>');
if(items.length == 5) {
appendItemsToBody(items);
items = [];
}
});
appendItemsToBody(items);
});
function appendItemsToBody(items) {
if(items.length) {
jQuery('<div/>', {
'class': bookPage,
html: items.join('')
}).appendTo('body');
}
}
根据点击“加载更多”时会发生什么,您可以将当前显示的项目数量作为数据传递给PHP
脚本通过jQuery.getJSON()
调用(请参阅其API文档)然后在你的PHP
脚本中决定你应该返回哪些段落(即从哪里开始)。您必须附加段落的“其余”以将5个项目填充到jQuery
中现有的最后一个div,并将其余部分放入新的div中。