使用新添加的项目推动分页(手动设置偏移或某事项)

时间:2012-07-09 08:00:02

标签: php propel offset paginate

我有一个页面,我按相反的时间顺序从我的数据库中渲染项目。最后添加的项目是页面顶部的第一个项目。

我使用无限滚动,因此每次用户点击底部时,我都会将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。如果我可以说推进初始偏移量应该在第一个项目之后开始,结果就可以了。

2 个答案:

答案 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级别来实现。但是我不确定是否支持那种。