2011-08-30 71 views
2

在CakePHP中,我們假設default.ctp只是構建HTML,其中<body>僅包含$content_for_layout。這對mysite.com的大部分頁面都很有用。但是,假設mysite.com/account/內的視圖需要共享導航欄。在帳戶區域下的意見是否適當?CakePHP導航欄視圖結構

A)製作的導航欄自己的元素,而這種元素被包含在每個視圖:

<!-- settings.ctp, profile.ctp, myfiles.ctp ... --> 
<div id="account_area"> 
    <?php echo $this->element('account_nav'); } 
    <div>...</div> 
</div> 

我真的不喜歡在A)是每個.ctp複製相同的封裝代碼(但是很小)。因此,也許像B)爲更好地:

B)創建一個視圖account/index.ctp,讓每個動作設置一個$section變量,做$this->render('/account/index'),將每個屏幕在它自己的元素:

<!-- /views/account/index.ctp --> 
<div id="account_area"> 
    <div id="account_nav">...</div> 
    <?php echo $this->element("account/$section"); } 
</div> 

C)別的東西

感謝布

回答

3

通常,我這樣做的方式是選項A。但我把$this->element('account_nav');放在佈局中。這可以防止將代碼放在每個視圖中。

如果導航需要配置或禁用,只需向佈局添加邏輯並將變量傳遞到視圖,就像您通常那樣。然後,您可以根據需要從任何操作進行配置。

最後,這是一種混合方法。但從我的經驗中提供了最大的靈活性。

+0

謝謝。選項B是否也被認爲是一種有效的方法?我的應用程序有很多需要這種或那種功能的視圖,並且它可能是佈局本身的大量顯示邏輯。 – Brian

+0

當然。但國際海事組織,任何時候我使用'render()'我覺得骯髒:)從你的描述看來,選項B似乎需要更多的設置。 –

0

新CakePHP的,所以我不知道有什麼具體的好處A和B可能帶來,但似乎李如果您想在多個視圖中重複使用相同的導航欄代碼(顯然是一個好主意),只需(C)使用PHP的include函數來包含所需的.html或.php文件?

我想這取決於你的導航欄究竟是什麼:任何比HTML鏈接更復雜的東西,我的想法死得很厲害。 :/

+0

使用本地'include' /'require'可以切斷數據橋接框架提供的功能。使用*元素*是使用CakePHP執行此操作的正確方法。 –