我有一个页面,我按相反的时间顺序从我的数据库中渲染项目。最后添加的项目是页面顶部的第一个项目。
我使用无限滚动,因此每次用户点击底部时,我都会将pagenumber和resultcount发送到我的服务器。在那里,我使用propel paginate来获取下一页。
问题是,当用户在页面上添加新项目时,它将被添加到我的数据库中,并且是我的结果中第1页的第一项。所以其他所有结果都移动了1个位置。 有没有办法告诉推动它应该从偏移+ 1开始忽略新添加的元素?
一个小例子:
我每页有5个项目。在这个例子中,每个项目只有一个数字,所以在页面上你可以看到1,2,3,4,5。现在,用户添加项目0.我的数据库结果没有分页现在: 0,1,2,3,4,5因为添加了新项目。现在用户点击页面的底部,分页的属性页面= 2,每页的项目数= 5,我将得到5,6,7,8,9。现在我的页面再次呈现5。如果我可以说推进初始偏移量应该在第一个项目之后开始,结果就可以了。
答案 0 :(得分:1)
只是一个想法,我自己没有尝试过代码,但你可以在搜索条件中添加时间戳并将其传入分页,以便所有搜索结果都限制在当前搜索开始之前创建的记录:
<?php
$page = (isset($_GET['page']))?$_GET['page']:1;
$timeFilter = (isset($_GET['time']))?$_GET['time']:date("Y-m-d H:i:s", time());
$posts = PostQuery::create()
->filterByCreatedAt($timeFilter, Criteria::LESS_THAN)
// add other filters as necessary
->paginate($page, $limit);
// Obviously there is a lot of other things to include, just an example...
?>
<html>
<head>
<title>Paging Example</title>
</head>
<body>
<ul id='results'>
<?php foreach ($posts as $post) {
echo "<li>".$post->getTitle()."</li>";
} ?>
</ul>
<div id='paging'>
<?php
if (!$pager->isFirstPage()) {
echo "<a href='thisFile.php?page=".$pager->getPreviousPage()."&time=".$timeFilter."'>Previous Page</a>";
}
// may want to add a page list here...
if (!$pager->isLastPage()) {
echo "<a href='thisFile.php?page=".$pager->getNextPage()."&time=".$timeFilter."'>Next Page</a>";
}
?>
</div>
</body>
</html>
答案 1 :(得分:0)
接受的答案适用于添加但不适用于删除。这不是实现这一目标的好方法。如果您可以传递包含上述任何问题的记录数的起始索引,因为您始终可以通过查看您拥有的记录来编写索引。这可以使用DB级别来实现。但是我不确定是否支持那种。