Bonjour, après avoir lu plusieurs sujets dessus, j'ai réussi à mettre une classe active sur mes liens courant.
J'ai fait ainsi dans menu.ctp
<?php $pages = $this->requestAction(array('controller'=>'pages','action'=>'menu','admin'=>false)); ?>
<?php $controller = $this->request->params'controller'];?>
<li>
<?php echo $this->Html->link('Articles',array('controller'=>'posts','action'=>'index'),array('class'=>$controller=='posts'?'active':null)); ?> </li>
<?php foreach($pages as $k=>$v): $v = current($v); ?>
<li><?php echo $this->Html->link($v'name'],$v'link'],array('class'=>($v'name']==$v'slug'])?'active':null)); ?></li>
<?php endforeach; ?>
Cela fonctionne bien pour mes articles, par contre pour mes pages cela ne fonctionne pas, lorsque je mets
'class'=>$controller=='pages'?'active':null
et que je clique sur une de mes pages, tous mes liens correspondant à mes pages passent en active , logique. C'est pourquoi j'ai mis
'class'=>($v'name']==$v'slug'])?'active':null
et là plus rien, aucune classe active.
Est ce que ma syntaxe est bonne ?
Y a-t-il une autre solution pour paraît à ce problème ?
Merci
code modifier :) autre solution
<?php $pages = $this->requestAction(array('controller'=>'pages','action'=>'menu','admin'=>false)); ?>
<ul>
<li>
<?php echo $this->Html->link('Articles',array('controller'=>'posts','action'=>'index'),array('id'=>'Articles')); ?>
</li>
<?php foreach($pages as $k=>$v): $v = current($v); ?>
<li>
<?php echo $this->Html->link($v'name'],$v'link'],array('id'=>'P'.$v'id'])); ?>
</li>
<?php endforeach; ?>
</ul>
et dans la vue de pages/show ajouter
<<script type="text/javascript">
$('document').ready(function() {
$('#P<?php echo $page'id']; ?>').addClass("active");
})
</script>
et dans la vue de posts/ index et show ajouter
<<script type="text/javascript">
$('document').ready(function() {
$('#Articles').addClass("active");
})
</script>
tu peux essayer avec c'est code :)
menu.ctp
<?php $pages = $this->requestAction(array('controller'=>'pages','action'=>'menu','admin'=>false)); ?>
<?php if(isset($this->Session->read('active')) && !empty($this->Session->read('active'))){
$active=$this->Session->read('active');
}else
$active=null;
?>
<ul>
<li>
<?php if($active == 'Articles'): ?>
<?php echo $this->Html->link('Articles',array('controller'=>'posts','action'=>'index')
,array('class'=>'active')); ?>
<?php else: ?>
<?php echo $this->Html->link('Articles',array('controller'=>'posts','action'=>'index')); ?>
<?php endif ; ?>
</li>
<?php foreach($pages as $k=>$v): $v = current($v); ?>
<li>
<?php if($active == 'P'.$v'id']): ?>
<?php echo $this->Html->link($v'name'],$v'link'],array('class'=>'active')); ?>
<?php else: ?>
<?php echo $this->Html->link($v'name'],$v'link']); ?>
<?php endif ; ?>
</li>
<?php endforeach; ?>
</ul>
est dans Postecontroller action index ajoute
public function index()
{
$this->Session->write('active', 'Articles');
........
est dans Postecontroller action show ajoute
function show($id=null,$slug=null){
if(!$id || !is_numeric($id)){
throw new NotFoundException('Aucun page ne correspond à cet ID');
}
$this->Session->write('active', 'P'.$id);
............
Je te remercie, mais j'ai une erreur :
Fatal error: Can't use method return value in write context in /home/.../app/View/Elements/menu.ctp on line 2
essayer avec c'est code
mais le seul problem le cache
<?php $pages = $this->requestAction(array('controller'=>'pages','action'=>'menu','admin'=>false)); ?>
<?php $active=$this->Session->read('active'); ?>
<ul>
<li>
<?php if($active == 'Articles'): ?>
<?php echo $this->Html->link('Articles',array('controller'=>'posts','action'=>'index')
,array('class'=>'active')); ?>
<?php else: ?>
<?php echo $this->Html->link('Articles',array('controller'=>'posts','action'=>'index')); ?>
<?php endif ; ?>
</li>
<?php foreach($pages as $k=>$v): $v = current($v); ?>
<li>
<?php if($active == 'P'.$v'id']): ?>
<?php echo $this->Html->link($v'name'],$v'link'],array('class'=>'active')); ?>
<?php else: ?>
<?php echo $this->Html->link($v'name'],$v'link']); ?>
<?php endif ; ?>
</li>
<?php endforeach; ?>
</ul>
merci cela fonctionne, mais j'ai le soucis du cache en effet.
Pourquoi j'ai cette erreur avec ton premier code ?
j'ai trouve le problème dans lien mé je ne connais pas exactement
if(isset($this->Session->read('active')) && !empty($this->Session->read('active')))
Un p'tit coup de jaja, ça n'a jamais fait de mal. J'avais oublié cet adage du grand-père. C'est intemporel.
Merci AbdelakbirG, cela fonctionne avec ta dernière solution.
Je vais tout de même essayer de régler le soucis de la première. J'aime bien le faite d'utiliser cakePHP sans le Javascript.
A bientôt