我制作了一个将在整个网站中显示的页脚元素。
此页面的内容需要填充来自某个模型的数据,在显示的每个页面上。
$sponsors = $this->Sponsor->find('all', array('条件' => array("NOT" => array("Sponsor.logo_id" => null))));
但是定义这个的最佳位置在哪里?我在 app_controler 中进行了思考,但我并不完全清楚如何做到这一点。
我制作了一个将在整个网站中显示的页脚元素。
此页面的内容需要填充来自某个模型的数据,在显示的每个页面上。
$sponsors = $this->Sponsor->find('all', array('条件' => array("NOT" => array("Sponsor.logo_id" => null))));
但是定义这个的最佳位置在哪里?我在 app_controler 中进行了思考,但我并不完全清楚如何做到这一点。
在你AppController
的beforeFilter
或可能beforeRender
(我从来没有真正注意到差异);确保您AppController
可以访问Sponsor
模型。
// app_controller.php
function beforeFilter() {
parent::beforeFilter();
$this->loadModel('Sponsor');
$this->Sponsor->recursive = -1; // adjust to return more/less data
$sponsors = $this->Sponsor->find('all',
array('conditions' => array("NOT" => array("Sponsor.logo_id" => null))));
$this->set('sponsors', $sponsors);
}
您现在可以$sponors
在任何视图中访问。
最好将数据放入一个元素中并将其缓存一段合适的时间,以避免不断地查询数据库(取决于其他因素,例如页面加载/其他密集查询等。
<?php echo $this->element('footer'); ?>
您的 Layouts/default.ctp 文件这样每个页面的页脚都会被加载。这是一种优雅的方式,您还可以将其他内容放入 Elements 文件夹中,例如标题、分页等。