CakePHP导航栏查看结构

时间:2011-08-30 14:38:13

标签: model-view-controller cakephp view

在CakePHP中,假设default.ctp仅执行框架HTML,<body>仅包含$content_for_layout。这对mysite.com的大多数页面都很有用。但是,假设mysite.com/account/中的视图需要共享导航栏。对于帐户区域下的观点,哪种方法是正确的?

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)其他东西

谢谢,Brian

2 个答案:

答案 0 :(得分:3)

通常我这样做的方式是选项A 。但我把$this->element('account_nav');放在布局中。这可以防止将代码放在每个视图中。

如果导航需要配置或禁用,只需向布局添加逻辑并像往常一样将变量传递给视图。然后,您可以根据需要从任何操作进行配置。

最后,这是一种混合方式。但从我的经验来看,提供了最大的灵活性。

答案 1 :(得分:0)

非常对CakePHP来说是新的,所以我不知道A和B可能带来哪些具体好处,但似乎你想在多个视图中重复使用相同的导航条码(显然一个好主意),简单地(C)使用PHP的include函数来包含所需的.html或.php文件?

我认为这取决于导航栏的确切内容:比HTML链接更复杂,我的想法非常糟糕。 :/