在整个cakePHP网站上使用find()结果

时间:2012-06-14 12:33:52

标签: cakephp

我制作了一个页脚元素,将在整个网站上显示。

此页面的内容需要填写来自特定模型的数据,并显示在每个页面上。

$sponsors = $this->Sponsor->find('all',
        array('conditions' => array("NOT" => array("Sponsor.logo_id" => null))));

但是定义这个的最佳位置在哪里?我在app_controler中想过,但对我来说这样做并不是很清楚。

2 个答案:

答案 0 :(得分:2)

AppController的{​​{1}}或可能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); }

最好将数据放入元素并将其缓存一段合适的时间,以避免不断查询数据库(取决于其他因素,如页面加载/其他密集查询等。

答案 1 :(得分:0)

  • 您可以在元素文件夹中创建一个元素,然后在那里创建一个footer.ctp文件。
  • 现在,在Layouts / default.ctp文件中添加<?php echo $this->element('footer'); ?>

这样每个页面都会加载页脚。这是一种优雅的方式,您可以将其他内容放在Elements文件夹中,如标题,分页等。