我想忽略分页器项目列表中的前n项。即它们被用于设计的其他地方。
所以我的寻呼机列表必须如此:
Page 1: Items 8 - 17
Page 2: Items 18 - 27
Page 3: Items 28 - 37
...
但是,在条件对象中设置偏移量或限制不会执行任何操作。我认为它们被寻呼机本身使用。
是否可以通过其他方式向寻呼机类添加偏移量?
答案 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
}