Bonjour à tous,
Dans un premier temps merci Grafit pour la suite de tuto sur la création d'un MVC d'A à Z.
je vous explique mon problème,
Je suis en train de réaliser un site qui en gros, affiche des articles et des news (les news étant le titre des articles) le tout en même temps.
Pour ce faire, j'ai un contrôleur ArticlesController contenant entre autres les fonctions :
/*
* Liste les articles
*/
function index()
{
$perPage = 10;
$this->loadModel('Article');
$condition = array('online' => 1);
$d'articles'] = $this->Article->find(array(
'conditions' => $condition,
'fields' => 'Article.id,Article.name,Article.slug,Article.created,Article.resume,User.display as username',
'group' => 'Article.id',
'order' => 'created DESC',
'limit' => '0,'.$perPage,
'limit' => ($perPage*($this->request->page-1)).','.$perPage,
'join' => array('users as User' => 'User.id = Article.user_id',
'articles_has_categories as Ahc' => 'Ahc.article_id = Article.id',
'categories as Category' => 'Ahc.category_id=Category.id')
));
$d'total'] = $this->Article->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
/*
* Affiche un article
*/
function view($id,$slug)
{
$this->loadModel('Article');
$d'article'] = $this->Article->findFirst(array(
'fields' => 'id,slug,content,name',
'conditions' => array('online' => 1,'id'=>$id)
));
if(empty($d'article'])){
$this->e404('Article introuvable');
}
if($slug != $d'article']->slug)
{
$this->redirect("articles/view/id:$id/slug:".$d'article']->slug,301);
}
$this->set($d);
}
/*
* Liste le titre des articles
*/
function news()
{
$showed = 5;
$this->loadModel('Article');
$condition = array('online' => 1);
$d'news'] = $this->Article->find(array(
'conditions' => $condition,
'fields' => 'Article.id,Article.name,Article.slug,Article.created,Article.resume,User.display as username',
'order' => 'created DESC',
'limit' => '0,'.$showed,
'join' => array('users as User' => 'User.id = Article.user_id',
'articles_has_categories as Ahc' => 'Ahc.article_id = Article.id',
'categories as Category' => 'Ahc.category_id=Category.id AND Category.name = "News"')
));
$this->set($d);
}
J'ai modifié la fonction render de la classe Controller afin de choisir dans quel variable rendre ma vue
/**
* Permet de rendre une vue
* @param $view Fichier à rendre (chemin depuis view ou nom de la vue)
**/
public function render($view,$place="content_for_layout")
{
if($this->rendered){ return false; }
extract($this->vars);
if(strpos($view,'/')=== 0){
$view = ROOT.DS.'view'.$view.'.php';
}else{
$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
}
ob_start();
require_once($view);
$$place = ob_get_clean();
require_once(ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php');
$this->rendered = true;
}
Le layout courant contient les 2 variables que je souhaite afficher.
<div class="span3 offset5">
<?php echo($content_for_news);?>
</div>
<div class="span10">
<?php echo ($this->Session->flash()); ?>
<?php echo ($content_for_layout); ?>
</div>
Sachant que mes différentes vues fonctionnent correctement indépendamment, comment dois-je faire pour que, lorsque je vais sur www.monsite.xx il affiche, l'index dans $content_for_layout (chose qu'il fait à l'heure actuelle) mais également news dans $content_for_news ?
Si vous avez besoin d'autres portions de code pour m'aider à trouver la solution, suffit de demander =)