使用Symfony sfPager类时是否可以使用偏移量?

时间:2009-11-02 13:29:04

标签: symfony1 pagination

我想忽略分页器项目列表中的前n项。即它们被用于设计的其他地方。

所以我的寻呼机列表必须如此:

Page 1: Items  8 - 17
Page 2: Items 18 - 27
Page 3: Items 28 - 37
...

但是,在条件对象中设置偏移量或限制不会执行任何操作。我认为它们被寻呼机本身使用。

是否可以通过其他方式向寻呼机类添加偏移量?

2 个答案:

答案 0 :(得分:0)

好的,我通过修改 sfPropelPager.class.php 并将其放入我命名为atPropelPagerOffset.class.php的新类文件中解决了这个问题

除了需要额外参数$offset

之外,它的工作方式完全相同

所以文件顶部如下:

  protected
    $criteria               = null,
    $peer_method_name       = 'doSelect',
    $peer_count_method_name = 'doCount',
    $offset                 = 0;

  public function __construct($class, $maxPerPage = 10, $offset = 0)
  {
    parent::__construct($class, $maxPerPage);

    $this->setCriteria(new Criteria());
    $this->tableName = constant($class.'Peer::TABLE_NAME');
    $this->offset = $offset;
  }

然后我在第50行附近做了这个微小的改变

  $c->setOffset($offset+$this->offset);

努力享受!

答案 1 :(得分:0)

更简单的解决方案是自定义选择方法:

$pager->setPeerMethod('doSelectCustom');

然后将您的逻辑放入模型Peer Class:

public static function doSelectCustom($c)
{
   $c2 = clone $c;
   $offset = $c2->getOffset();
   $limit = $c2->getLimit();
   $someCustomVar = someClass::someMethod();
   if ($offset == 0) // we are in the first page 
   {
      $c2->setLimit($limit - $someCustomVar);
      $c2->add(self::SOMECOLUMN, false);
   } else $c2->setOffset($offset - $someCustomVar);
   return self::doSelectRS($c2); // or doSelect if you wanna retrieve objects
}