Любая находка должна быть сделана в модели, а не в контроллере - это следует структуре MVC, а также мантре «толстые модели, тощие контроллеры», которая помогает придерживаться идеи MVC.
Это не только способ, которым это «должно» быть сделано, но также позволит вам иметь код только в одном месте:
//in the Article model
function getArticlesBySection($id) {
$articles = $this->find('all', array(
'limit' => 4,
'order' => array('Article.created'=>'DESC'),
'conditions' => array('Section_id' => $id)
));
return $articles;
}
//in the Articles controller
$block1 = $this->Article->getArticlesBySection('87');
$block2 = $this->Article->getArticlesBySection('88');
$this->set(compact('block1', 'block2'));
Вышеприведенное должно прекрасно работать для того, что выхочу сделать , но вы всегда можете многое сделать, чтобы улучшить его - например, сделать его более гибким, приняв множество параметров:
//in the Article model
function getArticles($id, $opts = null) {
$params = array();
//limit
$params['limit'] = 100; //catchall if no limit is passed
if(!empty($opts['limit'])) $params['limit'] = $opts['limit'];
//order
$params['order'] = array('Article.created'=>'DESC');
if(!empty($opts['order'])) $params['order'] = $opts['order'];
//conditions
$params['conditions'] = array();
if(!empty($opts['sections'])) array_push($params['conditions'], array('Section_id'=>$opts['sections']));
$articles = $this->find('all', $params);
return $articles;
}
//in the Articles controller
$opts = array('limit'=>4, 'sections'=>array('87'));
$block1 = $this->Article->getArticles($opts);
$opts['sections'] = array('88');
$block2 = $this->Article->getArticles($opts);
ЯКонечно, есть вещи, которые можно сделать, чтобы сделать это более скудным ... и т. д., но это то, как мне нравится писать это для простоты использования и удобочитаемости, и, по крайней мере, дает вам представление о методах модели ивозможность использовать и повторно использовать их для различных целей.