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
Réponse acceptée

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.

iriven
Réponse acceptée

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');
}

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
Auteur

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

Mirrix
Auteur

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

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
Auteur

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 ?

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
Auteur

Oui oui le fichier existe bel et bien.

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

Mirrix
Auteur

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;
?>

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

Mirrix
Auteur

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.

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

Mirrix
Auteur

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

Mirrix
Auteur

Et pourtant dans ma barre d'adresse quand je tape http://127.0.0.1/test/post/posts ca marche nickel, je vois tout mes posts

le pb est reglé ou pas?

Mirrix
Auteur

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 !!

de rien