2010-10-18 156 views
1

我已经成功地过度乘坐的默认方法在我的模型自定义查询其他地方的建议,CakePHP的1.3 PAGINATE与自定义查询

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) 

function paginateCount($conditions = null, $recursive = 0, $extra = array()) 

不幸的是这种方法了-rides 全部这个模型的分页,并影响其他分页。我发现了一些代码,可以帮助我选择是否希望根据变量使用自定义分页。

在我的模型

var $useCustom = false; 

function paginateCount($conditions = null, $recursive = 0, $extra = array()) 
{ 
if(!$this->useCustom) 
    return parent::paginateCount($conditions, $recursive); 

// code to handle custom paginate count here 
} 

我发现,使用这种方法给我一个错误,

Fatal error: Call to undefined method AppModel::paginateCount() in....

我在做什么错?我认为我也需要在分页函数中使用类似的代码?难道我还以为我可以在我的控制器即$this->useCustom = 'true';

回答

1

后有点钻研我发现paginateCount的方法的代码和分页在模型中不存在,或其他为此事的任何地方,这就是为什么我不能给他们打电话。解决的办法是将代码从主控制器,测试对于的超驰

的存在对于那些想类似的解决方案使用paginateCount

以下复制
if(!$this->useCustom) 
{ 
    $parameters = compact('conditions'); 
    if ($recursive != $this->recursive) { 
     $parameters['recursive'] = $recursive; 
    } 
    $count = $this->find('count', array_merge($parameters, $extra)); 

    return $count; 

} else { 

custom method... 

} 

和PAGINATE使用

if(!$this->useCustom) 
{ 
    $parameters = compact('conditions', 'fields', 'order', 'limit', 'page'); 
    if ($recursive != $this->recursive) { 
     $parameters['recursive'] = $recursive; 
    } 
    $results = $this->find('all', array_merge($parameters, $extra)); 
    return $results; 

} else { 

custom method... 

} 

希望这可以帮助其他人。

0

将此变量设置正确,我认为您的功能使用范围解析操作以这种方式前需要公共关键字。

公共职能 paginateCount(....

+0

谢谢,但这没有奏效,请参阅我的解决方案 – Dave 2010-10-18 14:26:14