Bonjour alors j'essaye de mettre en place mon menu mais quand j'arrive sur la récuperation des données dans la vue
Notice (8): Undefined index: id [APP\View\Elements\menu.ctp, line 7]
voici ma vue
<?php $menus = $this->requestAction(array('controller'=>'pages','action'=>'test_menu','admin'=>false)); ?>
<ul class="nav pull-left">
<?php foreach($menus as $k=>$v): ?>
<?= debug($v) ; ?>
<?php if (!isset($v'sub'])): ?>
<li><?php echo $this->Html->link($v'name'],$v'link']); ?></li>
<?php else: ?>
<?php endif ?>
<?php endforeach ?>
</ul>
et le resultat du debug($v)
array(
(int) 0 => array(
'id' => '13',
'slug' => 'smqs',
'name' => 'SMQS',
'type' => 'page',
'parent_id' => null,
'link' => array(
'controller' => 'pages',
'action' => 'show',
'id' => '13',
'slug' => 'smqs'
),
'sub' => array(
(int) 0 => array(
'Post' => array(
'id' => '14',
'slug' => 'formation',
'name' => 'Formation',
'type' => 'page',
'parent_id' => '13',
'link' => array(
'controller' => 'pages',
'action' => 'show',
'id' => '14',
'slug' => 'formation'
)
)
),
(int) 1 => array(
'Post' => array(
'id' => '15',
'slug' => 'consultation',
'name' => 'Consultation',
'type' => 'page',
'parent_id' => '13',
'link' => array(
'controller' => 'pages',
'action' => 'show',
'id' => '15',
'slug' => 'consultation'
)
)
),
(int) 2 => array(
'Post' => array(
'id' => '16',
'slug' => 'expertise',
'name' => 'Expertise',
'type' => 'page',
'parent_id' => '13',
'link' => array(
'controller' => 'pages',
'action' => 'show',
'id' => '16',
'slug' => 'expertise'
)
)
)
)
),
(int) 1 => array(
'id' => '20',
'slug' => 'magasin-zaki',
'name' => 'magasin zaki',
'type' => 'page',
'parent_id' => null,
'link' => array(
'controller' => 'pages',
'action' => 'show',
'id' => '20',
'slug' => 'magasin-zaki'
),
'sub' => array()
)
)
Quelqu'un aurai une idée sur comment avoir les données?? Merci d'avance.
J'ai trouvé mon erreur j'avais oublier de mettre un current() pour la variable menus ce qui compliqué le traitement... ><'
Voici le code:
<?php $menus = $this->requestAction(array('controller'=>'pages','action'=>'test_menu','admin'=>false)); ?>
<?php $i=0;?>
<ul class="nav pull-left">
<?php $menus = current($menus); ?>
<?php foreach($menus as $k=>$v): ?>
<?php if (!isset($v'sub'])): ?>
<li><?= $this->Html->link($v'name'],$v'link']); ?></li>
<?php else: ?>
<?php endif ?>
<?php endforeach ?>
</ul>
Salut !
Où est ce que tu essaye d'utiliser ton id ?
Tu as peut être un problème d'index d'accès sur ton tableau, voici quelques exemple des différents id que tu as dans ton tableau :
$v'0']'id']
$v'0']'link']'id']
$v'0']'sub']'0']'Post']'id']
etc etc
En fait je l'avais mis dans le debug quand j'ai fait le copier et j'avais oublier que j'avais modifier le script avant de le poster,
mais comment je peux faire pour y accéder j'ai essayer avec $v$k]'id'] mais ça m'affiche la même erreur a quel variable correspond le 0
du $v'0'] que tu me donne ?
La première ligne de ton tableau où tu auras ta catégorie principale et ses sous catégories :')
En suivant vos remarque j'ai modifié le code pour que ça prenne en compte l'index mais quand le met dans la boucle foreach celle ci saut le premier index y a t'il un moyen de modifier cela ou est-ce que je suis entrain de me compliquer les choses...
<?php $menus = $this->requestAction(array('controller'=>'pages','action'=>'test_menu','admin'=>false)); ?>
<?php $i=0;?>
<ul class="nav pull-left">
<?php foreach($menus as $k=>$v): $i++; ?>
<?= debug($v$i]) ; ?>
<?php if (!isset($v$i]'sub'])): ?>
<li><?= $this->Html->link($v$i]'name'],$v$i]'link']); ?></li>
<?php else: ?>
<?php endif ?>
<?php endforeach ?>
</ul>
Montres nous un screen de ce que tu as (et un autre avec ce que tu voudrais) et on t'aideras a compléter/arranger ton code
Désolé je n'avais pas pu me connecté depuis la dernière fois je remet mon PagesCOntroller
function test_menu(){
$d'menus'] = $this->Post->find('all',array(
'conditions'=> array('type'=>'page','online'=>1, 'parent_id'=>null),
'fields' => array('id','slug','name','type','parent_id','lft','rght'),
'order' => array('Post.created DESC')
));
foreach ($d'menus'] as $k => $v) {
$m= $v'Post']'rght'] - $v'Post']'lft'];
if ($m > 1 ) {
$v = current($v);
$v'sub']= $this->Post->find('all',array(
'conditions'=> array('type'=>'page','online'=>1, 'parent_id'=> $v'id']),
'fields' => array('id','slug','name','type','parent_id'),
'order' => array('Post.created DESC')
));
}
$d'menus']$k] = $v;
}
return $d;
}
et mon élément menu.ctp
<?php $menus = $this->requestAction(array('controller'=>'pages','action'=>'test_menu','admin'=>false)); ?>
<ul class="nav pull-left">
<?php $menus = current($menus); ?>
<?php foreach($menus as $k=>$v): ?>
<?php if (!isset($v'sub'])): ?>
<li><?= $this->Html->link($v'Post']'name'],$v'Post']'link']); ?></li>
<?php else: ?>
<li class="dropdown"><?php echo $this->Html->link($v'name'],'#',array('class' => 'dropdown-toggle','data-toggle' => 'dropdown')); ?>
<ul class="dropdown-menu">
<?php foreach ($v'sub'] as $kk => $vv): ?>
<li><?php echo $this->Html->link($vv'Post']'name'],$vv'Post']'link']); ?></li>
<?php endforeach ?>
</ul>
</li>
<?php endif ?>
<?php endforeach ?>
<li><?= $this->Html->link('Actualités',array('controller'=>'posts','action'=>'index','admin'=>false)); ?></li>
</ul>
j'ai réussi à faire afficher déjà un premier niveau de sous-menu et je voudrai le continué maximum un second niveau.
Je continue comme pour le premiers niveaux ?? en imbriquant un les foreach ??