Inclure une vue dans une autre

Par Mirrix, il y a 13 ans


Bonjour,

J'ai suivi le tuto concernant la création d'un site web de A à Z.

J'ai donc la même structure, et sur ma page d’accueil j'ai l'ensemble de mes posts présents sur mon site.

Il y a une div filtre sur la page d'accueil ainsi qu'une div ou sont affichés tous les posts. J'ai donc une méthode index dans le controller post qui me permet d'afficher ma page avec une vue index.php

Dans cette vue je ne voudrais afficher que la structure de ma page d'accueil, avec le filtre a gauche, mettre une div pour les posts mais la laisser vide.

En effet, je voudrais afficher la vue "posts" dans cette div. Il y a une méthode posts dans le controller post pour envoyer les données a la vue.

Le truc c'est que je ne sais pas comment inclure ma vue posts dans ma vue index pour que tout mes posts soient affichés dans la page index.

Merci d'avance

19 réponses

iriven, il y a 13 ans

salut pour mettre sur pied le système dispos ici,
j'ai procedé comme suit:
dans ma vue portfolio (celle que je veux inclure), j'insert ce code tout au debut:

if($this->request->controller !== 'demos'){ // car si le controller "demos" est lancé, la methode "portfolio" est automatique appellée.
    $ProjectLists = $this->request('demos','portfolio');
    $CurrentProject = '';
}

et ensuite dans mon header.php j’inclue simplement le fichier portfolio.php:

$file = APPLICATIONS.DS.ucfirst('demos').DS.'portfolio.php';
if(file_exists($file)) require $file;

en esperant que cela t'aide.

Mirrix, il y a 13 ans

J'ai pas trop compris ce que tu m'as dis.

iriven, il y a 13 ans

dans ta vue "posts", tu mets ceci au debut:

if($this->request->controller !== 'post'){
    $Posts = $this->request('post','posts');
}

et dans ta vue "index", tu mets ceci à l'endroit où tu veux afficher les posts:

$file = chemin_vers_le_dossier_contenant_la_vue_posts.'/posts.php';
if(file_exists($file)) require $file;

normalement çà devrait marcher.

Mirrix, il y a 13 ans

C'est bizarre, mon fichier posts.php n'est pas trouvé.

J'ai cette erreur la si j’enlève le test pour voir si le fichier existe :

Warning: require(/test\view\post\posts.php) [function.require]: failed to open stream: No such file or directory in \Mes Documents\EasyPHP-5.3.9\www\test\view\post\index.php on line 274

Fatal error: require() [function.require]: Failed opening required '/test\view\post\posts.php' (include_path='.;C:\php\pear') in \Mes Documents\EasyPHP-5.3.9\www\test\view\post\index.php on line 274

iriven, il y a 13 ans

je constate que si tu as respecté les noms et la casse de variables tout au long du tuto, au lieu de la variable $Posts, tu aurai plutot $post (minuscule singulier). tu retiens donc ceci:
**

if($this->request->controller !== 'post'){
    $post = $this->request('post','posts');
}

**

Mirrix, il y a 13 ans

Je pense avoir bien respecté les majuscules et les pluriels (mon controller s'appelle PostController).

Mais ca ne règle pas mon soucis de chemin, je sais pas pourquoi mais il cherche mon fichier dans \view\post\post\index.php

Pourquoi il y a index.php à la fin ?

iriven, il y a 13 ans

est ce que tu as bien une vue nommée "posts.php" dans ton dossier des vues? car il ne le trouve pas.
si tu l'as nommé different, tu doit remplacer posts.php par le vrai nom

Mirrix, il y a 13 ans

Oui oui le fichier existe bel et bien.

iriven, il y a 13 ans

je constate aussi que tu as un pb de slash et antislash. montre moi comment tu fais ton include

Mirrix, il y a 13 ans

J'ai également noté ce problème je ne sais pas d’où ça peu venir.

<?php
$file = BASE_URL.DS.'view'.DS.'post'.DS.'posts.php';
require $file;
?>
iriven, il y a 13 ans

de façon generale tu fais çà:
$file = trim(BASE_URL, '/\').DS.'view'.DS.'post'.DS.'posts.php';
require $file;

Mirrix, il y a 13 ans

J'ai réussi en faisant ca :

$file = ROOT.DS.'view'.DS.$this->request->controller.DS.'posts.php';
require $file;

En fait c'etait ROOT et pas BASE_URL :p

Par contre dans ma vue j'ai des erreurs, il semblerait que la méthode attachée à la vue ne soit pas prise en compte.

iriven, il y a 13 ans

effectivement c'est un include pas un lien d'où le root.
quoi comme erreur?

Mirrix, il y a 13 ans

Notice: Undefined variable: paris in \Mes Documents\EasyPHP-5.3.9\www\test\view\post\posts.php on line 11

Warning: Invalid argument supplied for foreach() in \Mes Documents\EasyPHP-5.3.9\www\test\view\post\posts.php on line 11

Dans ma methode je fais ca :

$condition = array('online' => 1,'ville'=>'paris');
$d'paris'] = $this->Post->find(array(
    'conditions' => $condition,
    'limit' => $perPage,
    'order' => 'id DESC'
));
$this->set($d);

Et dans ma vue je doit les récuperer comme ca :

<?php foreach ($paris as $k => $v): 
...
endforeach ?>

Je récupère chaque variable en faisant $v->title par exemple

iriven, il y a 13 ans

c'est normal que depuis la vue index tu n'ait pas acces à la variable '$paris'
remplace le code precedent par çà:

if($this->request->controller !== 'post'){
    $paris = $this->request('post','posts');
}
iriven, il y a 13 ans

le pb est reglé ou pas?

Mirrix, il y a 13 ans

Oui ca marche merci ;)

J'ai quelques autres problemes mais qui n'ont rien a voir avec le sujet.

Je te remercie pour ton aide !!

iriven, il y a 13 ans

de rien