Bonjour,
Je suis les tutoriels Grafikart "Créer son site en PHP de A à Z" et je souhaitais réaliser une amélioration : créer un système de sous pages.
J'ai donc crée une fonction getSubPages dans le fichier PagesController
function getSubPages($curPage)
{
//$this->loadModel('Post'):
return $this->Post->find(array(
'conditions'=>array('online'=>1, 'type' => 'page'.$curPage)
));
}
Et dans mon layout default :
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<?php $pagesMenu = $this->request('Pages', 'getMenu'); ?>
<?php foreach($pagesMenu as $p):?>
<li>
<a href="<?php echo BASE_URL.'/pages/view/'.$p->id;?>"title ="<?php echo $p->name;?>"><?php echo $p->name;?></a>
<?php $subPagesMenu = $this->request('Pages','getSubPages'); ?>
<?php $subPagesMenu as $q):?>
<a href="<?php echo BASE_URL.'/pages/view/'.$q->id;?>"title ="<?php echo $q->name;?>"><?php echo $q->name;?></a>
<?php endforeach;?>
</li>
<?php endforeach;?>
Je précise mon système : dans la base de donées au moment de créer une sous page on indiquerait dans le champ Type à place de "page" "page".leNomDeLaPageParente
Cependant mon code ne fonctionne pas... Du coup ce serait super si vous pouviez me donner des pistes pour corriger le défaut...
Merci d'avance de votre aide !
Bonjour,
Il vous manque un foreach pour lister les sous-pages à la ligne 8
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<?php $pagesMenu = $this->request('Pages', 'getMenu'); ?>
<?php foreach($pagesMenu as $p):?>
<li>
<a href="<?php echo BASE_URL.'/pages/view/'.$p->id;?>"title ="<?php echo $p->name;?>"><?php echo $p->name;?></a>
<?php $subPagesMenu = $this->request('Pages','getSubPages'); ?>
<?php foreach($subPagesMenu as $q):?>
<a href="<?php echo BASE_URL.'/pages/view/'.$q->id;?>"title ="<?php echo $q->name;?>"><?php echo $q->name;?></a>
<?php endforeach;?>
</li>
<?php endforeach;?>
Bonjour,
Merci beaucoup.
Je me suis aperçu qu'il y avait une autre erreur : ma fonction getSubPages prend en argument le nom de la page parente.
J'ai donc essayé de remplacer
<?php $subPagesMenu = $this->request('Pages','getSubPages'); ?>
par
<?php $subPagesMenu = $this->request('Pages','getSubPages('.$p.')'); ?>
Mais j'ai une erreur : " Object of class stdClass could not be converted to string "
En vous remerciant par avance
Salut,
Quand tu fais :
<?php $subPagesMenu = $this->request('Pages','getSubPages('.$p.')'); ?>
Ta variable $p est un objet qui représente la page parente.
Or, dans ta fonction getSubPages tu fais :
return $this->Post->find(array(
'conditions'=>array('online'=>1, 'type' => 'page'.$curPage)
));
Donc tu essayes de concaténer la chaîne de caractères 'page' avec l'object $curPage, du coup ça marche pas.
Je ne sais pas exactement quelle est la structure de ton objet $curPage, mais j'imagine que c'est son type que tu veux concaténer à 'page', auquel cas il faut que tu fasses :
return $this->Post->find(array(
'conditions'=>array('online'=>1, 'type' => 'page'.$curPage->type)
));
Bonjour,
Merci de votre réponse.
Effectivement j'avais oublié de mettre $p->name.
Du coup maintenant j'ai une erreur :
"Fatal error: Call to undefined method PagesController::getSubPages(Les clubs)() in site/core/Controller.php on line 97"...
Je précise que "les clubs" correspond à mon $p->name...
Je suis désolé de faire autant d'erreurs mais je m'y connais pas beaucoup en PHP...