2

我有一个页面,我在其中以相反的时间顺序呈现数据库中的项目。最后添加的项目是页面顶部的第一个项目。

我使用无限滚动,所以每次用户点击底部时,我都会将 pagenumber 和 resultcount 发送到我的服务器。在那里我使用推进分页来获取下一页。

问题是,当用户在页面上添加新项目时,它将被添加到我的数据库中,并且是我结果中第 1 页上的第一个项目。所以所有其他结果都移动了 1 个位置。有没有办法告诉 propel 它应该从 offset+1 开始忽略新添加的元素?

一个小例子:

我每页有 5 个项目。在此示例中,每个项目只有一个数字,因此在页面上您可以看到 1、2、3、4、5。现在,用户添加了项目 0。我的数据库结果没有分页现在是:0,1,2,3,4,5,因为添加了新项目。现在用户点击页面底部,分页具有属性 page = 2,每页项目数 = 5,我将得到 5、6、7、8、9。现在我的页面再次呈现 5。如果我可以说推动初始偏移量应该在第一项之后开始,那么结果就可以了。

4

2 回答 2

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>
于 2013-01-17T16:26:04.213 回答
0

接受的答案适用于添加但不适用于删除。这不是实现这一目标的好方法。如果您可以通过记录数的起始索引,您将不会遇到上述任何问题,因为您始终可以通过查看您拥有的记录来组​​成索引。这可以使用 DB 级别来实现。但是我不确定推进是否支持这一点。

于 2013-03-01T20:39:58.753 回答