用分页计数段落

时间:2013-06-02 19:01:59

标签: php jquery

我刚开始学习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的倍数拉出来。但是后来,某些东西否则告诉我根本不会是一个实际的解决方案,特别是因为我无法知道每个用户将编写/提交多少段落。

我没有足够的积分来发布图片所以这里是我上传的图片的链接,试图证明我的意思,如果我试图描述这个问题是不够的。

图表显示问题

Diagram showing issue

提前感谢您的任何建议。

1 个答案:

答案 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中。