Salut à toutes et tous,
Je suis en train de bosser sur Cake, je profite des tutos pour en apprendre plus sur le framework, mais une question me taraude:
Comment s'y prendre pour ajouter (par exemple) une sidebar uniquement dans une page spécifique?
Un peu comme faire:
if($rubrique == 1){
include("map.php");
}
Dois je créer ma sidebar en tant qu'élément, en tant que bloc? Ou une autre technique peut être?
J'ai du louper quelque chose dans la compréhension de la logique du framework j'ai l'impression, parce que là je ne sais pas comment m'y prendre, alors que c'est une tâche courante à réaliser.
Si une âme charitable pouvait m'expliquer un peu le fonctionnement et la logique du framework pour ce genre de situation, ça serait bien aimable!
D'avance merci!
La Sidebar doit être affichée juste sur une vue particulière (Ca peut-être ta page d'accueil) ? Si c'est le cas, il te suffit de mettre ou doit être ta sidebar :
<?php echo $this->element('sidebar'); ?>
Si c'est dans une action et un controller spécifique :
<?php if($this->params'action'] == 'monAction' && $this->params'controller'] == 'monController'){
echo $this->element('sidebar');
}
Si c'est avec un id spécifique (fourni dans l'URL, ici, l'id sera égale à 1, à toi d'adapter)
<?php if(isset($this->params'id']) && $this->params'id'] == 1){
echo $this->element('sidebar');
}
Si c'est un paramètre passé dans l'url (quand tu fais un link, "$this->Html->link('Mon Lien', array('controller' => 'controller', 'action' => 'action', 'id' => 1));", le 'id' est le paramètre passé.)
<?php if(!empty($this->params'pass']) && $this->params'pass'][0] == 1){
echo $this->element('sidebar');
}
L'index 0 est le premier paramètre passé.
Je crois que j'ai fait le tour de la question.
Bonjour,
Tu crées ton élément dans : app/views/elements/le_nom_de_votre_element.ctp
ensuite dans la vu spécifique tu l'appelle :
<? php echo $this->element ('le_nom_de_votre_element.ctp'); ?>
(ceci fonctionne si tu appelles pas la bdd)
Pour des spécificités, je te conseille d'aller voir ce lien :
Je ne pense pas que ceci fonctionne dans mon cas, puisque j’interroge la base de données.
En fait, dans la base de données, j'ai une table 'posts' qui reprend mes pages, et mes news (on distingue page et news via un champ type).
Je voudrais donc insérer une sidebar, uniquement sur la page d'accueil par exemple, donc par exemple:
if($post.id == 1){
include("sidebar.php");
}
(comment on fait en PHP classique).
J'avais pensé que peut être, les vues étendues et/ou les blocks (ajouts cakephp 2.1 si je ne m'abuse) pourraient m'aider, mais je ne suis pas certaine d'avoir bien compris le principe de ces 2 nouveaux concepts
bah étant donnée que tu es dans post, tu n'as pas besoin d'un élement ou autre.
tu sais lister tes post ?
1) find all des post dans controller post function index. Tu envois ta variable
2) dans ta vue :
<div id="sidebar1">
<h2>News</h2>
<?php
foreach($post as $p ):
if ($p'champ']=='news' ) {
echo $p'title'];
}
endforeach;
?>
<h2>Page</h2>
<?php
foreach($post as $p ):
if ($p'champ']=='pages' ) {
echo $p'title'];
}
endforeach;
?>
</div>
Je capte pas là: peux-tu m'expliquer, dans le code que tu donnes, où tu insère la sidebar?
O_o
Bon reprenons un peu / le code que je t'ai passé c'est la composition de ta sidebar.
Je reprends l'énoncé : "j'ai besoin d'une sidebar pour une page spécifique"
Donc il n'y a pas besoin d'un élément pour cette page comme elle sera que sur ta page d'accueil.
Maintenant tu vas dans ton controlerPost faire un find->all dans la fonction de ta page d'accueil.
cette page : qui est par là selon tes dires : view/post/index.ctp
tu rajoute ta sidebar dans cette page (le code plus haut comme exemple). Voilà.
Ok, la pièce vient de tomber je crois! Désolée lol, j'avais pas tout suivi je crois :-p
Je vais tester cela ce soir, si d'ici là c'est bon je mets en résolu!
D'avance merci, et bonne fin de journée à vous.
C'est tres simple en faite. Dans ton layout, ajout simplement un block dans lequel tu injectera ta sidebar par la suite :
<?php echo $this->fetch('sidebar'); ?>
Ensuite dans la vue dans laquelle tu veux afficher ton élément, tout ce que tu as a faire c'est d"insérer ton code comme ceci :
<?php $this->start('sidebar'); ?>
// Le code a afficher dans la sidebar
<?php $this->end(); ?>
Cette technique te permettra d"afficher une sidebar dans n'importe laquelle de tes vues si jamais dans le futur tu en aurai besoin
En espérant que sa t'ai aider
Le soucis, c'est que mon élément sidebar ne doit pas s'afficher sur une vue spécifique, mais sur une page spécifique.
J'ai une vue "show" qui affiche le contenu de mes pages, mais ma sidebar je n'en ai besoin que sur UNE page, la page d'accueil en l'occurence.
J'avais donc pensé à faire quelque chose comme ceci:
<?php
if($this->$params = array('id'=>'1')){
echo $this->fetch('sidebar');
}
?>
Mais cela retourne une erreur:
Cannot access empty property au niveau de Portfolio\lib\Cake\View\View.php
Line: 852
La fonction présente à cette ligne est la suivante:
public function __set($name, $value) {
switch ($name) {
case 'output':
return $this->Blocks->set('content', $value);
default:
$this->{$name} = $value;
}
}
Je vois avoir loupé quelque chose je crois... je bloque depuis 3 jours.
Merci pour l'aide déjà apportée ;-)
Un tout grand merci à Kareylo (et aux autres) pour cette réponse pertinente.
J'avais en effet loupé un truc dans la logique de CakePHP, maintenant que j'ai compris je me sens bête, ça fonctionne nickel et c'est pile poil ce dont j'ai besoin.
Grand merci donc!