2011-04-24 45 views
0

我試圖在蛋糕php中創建一個菜單,我也可以知道該區域內有多少文章,應該使用手動查詢,還是確實存在一些現有的方法來執行此操作?計數cakephp中的帖子數

My site menu: 
- Works (12) 
- Photos (35) 
- Stuff (7) 
- Contacts 

我的問題是我還沒有得到我如何可以訪問數據這樣對每個視圖,這應該是一個主菜單,所以我應該在每一個視圖中使用這一點,但如果我把它放在default.ctp ,每個模型都不存在,因爲我無法從視圖中訪問它。

是否存在一些談及此的頁面?

回答

1

因爲這些是不相關彼此獨立的模型,你需要做人工計數。

$this->Model->find('count'); 

編輯

好,所以看起來你是在談論不同的模型。

如果在菜單中使用此功能,則表示它將顯示在所有頁面中。

你有兩種方法來做到這一點。

您可以通過爲您的應用程序提供AppController來實現。基本上,你可以這樣運行每次您的請求呈現

function beforeRender() { 
    App::import('Model', array('Work', 'Photo', 'Stuff')); 
    $work = new Work(); 
    $workCount = $work->find('count'); 

    //do the same for the other 

    $this->set('workCount', $workCount); 
} 

看一看本作更多細節回調把這個代碼在beforeRender方法:http://book.cakephp.org/view/977/Controller-Methods#Callbacks-984

其次,你可以做到這一點通過幫手。您可以將相同的代碼(即在bforeRender內)放入幫助程序中,然後可以調用幫助程序方法。

你可以看看這裏的更多信息創建一個幫手:http://book.cakephp.org/view/1097/Creating-Helpers

+0

這樣做會爲從原始查詢返回的每一行創建一個額外的調用。通過使用'CounterCache'行爲,_parent_模型('Section')中的count屬性('article_count')每次添加新的子項('Article')時都會更新。由於寫入操作可能比讀取操作少得多,因此使用CounterCache將會減少對數據庫的拖動。 – 2011-04-25 16:34:42

+0

@安德魯,我想你誤解了這個問題。 OP正在談論一個網站菜單,模型之間沒有任何關係。 CounterCache只能在有相關模型時使用。在這裏調用計數是首選,因爲A)模型是不相關的B)你真的只想得到總行數。 – JohnP 2011-04-25 16:54:45

+0

如何爲所有部分使用這樣的菜單?我無法訪問'$ this-> Model-> find('count');'從默認視圖'default.ctp'' – vitto 2011-04-26 21:17:15