2011-08-18 81 views
1

我有一個名爲PageMetaData模型包含標題描述。這將被綁定到任何其他模型,並被用作頁面的標題標籤和元描述。CakePHP我可以把這段代碼重用嗎?

所以我有一個名爲品牌的模型。品牌有一個字段名爲page_meta_data_id和品牌屬於關聯 PageMetaData

現在的看法品牌,我可以運行此代碼:

if(!empty($data['PageMetaData']['title'])) 
{ 
    $this->set('title_for_layout', $data['PageMetaData']['title']); 
} 
else if(!empty($data['Brand']['name'])) 
{ 
    $this->set('title_for_layout', $data['Brand']['name']); 
} 
if(!empty($data['PageMetaData']['description'])) 
{ 
    echo $this->Html->meta('description', $data['PageMetaData']['description'],array('inline'=>false)); 
} 
else if(!empty($data['Brand']['description'])) 
{ 
    echo $this->Html->meta('description', $data['Brand']['description'],array('inline'=>false)); 
} 

如果一個PageMetaData已經被關聯到最新的品牌和具有價值對於標題,它會將其設置爲頁面標題,否則,如果品牌有一個名爲字段的字段,它將爲我們提供該字段。描述相同。

問題是我不想在每個使用PageMetaData的模型的每個視圖中重複使用此代碼。

我不知道我可以在哪裏抽象代碼,以避免重複。

我不能將它放在行爲或助手中,因爲您無法設置標題。我無法將它放入組件中,因爲它無法訪問從模型中找到的數據。

有什麼地方我可以把這個代碼重用?

回答

0

將在AppModel的方法。我假設該方法接受一個id爲它返回適當的數據。

將另一種方法放在您的AppController的beforeRender方法中。將id傳遞給此方法;這又將調用AppModel中的方法;設置爲title_for_layoutmeta_descriptionkeywords

您也不應該回顯這些值,而是將它們傳遞給視圖並在那裏輸出(或在佈局中)。

AppController和AppModels是應用程序範圍的;所以任何控制器/模型都可以訪問這些方法。

我確定還有其他方法;這可能不起作用,因爲我沒有測試過它。