在CakePHP中实现以下功能的最佳方法是什么?
我有一个布局,像许多其他人有3个主要部分,一个页眉,一个页脚和主要内容。页眉和页脚不是完全静态的,而是作为元素实现的,它有点击计数和其他一些动态的东西。这些动态内容与主要内容没有任何关系,但与整个网站更相关。
对于这个我认为页脚需要有自己的模型,我可以有页脚运行在不同的控制器/动作比主要内容?否则,我想我需要将页脚模型放在主view
的模型中,然后传递到页脚element
,这似乎不是最简洁的方式。
换句话说,页眉、页脚、主要内容和可能更多的边栏是完全相互独立的,但从相同的布局呈现。从控制器传递到视图/布局的模型需要有页眉/页脚/内容/侧边栏所需的模型?
我探索并发现requestAction
可能是一种方式,但不相信这是否是最好的方式。也许我还没找对地方。
只需在AppController
的beforeRender
方法中添加所需的内容:
class AppController extends Controller {
public function beforeRender () {
$this->set('number_of_visists', /* ... */) ;
}
} ;
所以你会得到每个页面的值,然后你可以把所有的东西都放在你的布局文件中,或者分割成多个元素,但你可以访问$number_of_visits
无处不在。
编辑:小编辑回答你的评论。这是做你想做的事的一种方式,也许不是最"正确"的,但却是我最先想到的。我没有测试这个,所以它可能包含一些错误…
你可以使用组件:假设你有三个组件,一个用于页眉,一个用于页脚,一个用于菜单。
在你的AppController
:
class AppController extends Controller {
public $components = array('Header', 'Menu', 'Footer');
} ;
然后是组件(我将只展示一个示例):
class FooterComponent extends Component {
public function beforeRender(Controller $controller) {
$visitModel = ClassRegistry::init('VisitCounter');
$controller->set('number_of_visits', $visitModel->getNumberOfVisits()) ;
}
}
然后在布局中使用elements:"
<html>
<!-- Whatever you want... -->
<?php echo $this->element('footer') ; ?>
</html>
每个开发人员都可以在自己的组件(以及相关的模型)和自己的元素上工作,而不会干扰其他的。