2010-10-18 158 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