bonjour,

je voudrais donner une class active dans la balise li d'un menu foreach



<?php foreach($pagesMenu as $p): ?>
        <li<?php echo ($this->request->params['1'] == ('games/view/id:')) ?' class="active"':'inactive'; ?>>
        <a href="<?php echo Router::url('games/view/id:'.$p->id.'/slug:'.$p->slug); ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a>
      <?php endforeach; ?>```

Malheureusement toute les pages sont active avez vous des idées.

Merci

13 réponses


Carouge10
Réponse acceptée

Donc pourquoi ne pas faire :

<li<?= ($this->request->params['0'] == $p->id) ?' class="current_page_item"':''; ?>>
Carouge10
Réponse acceptée

<?= corresponds à des shorts tags, des balises abrégés en clair. Cela équivaut à <?php echo

Je ne comprends pas votre demande sur le li.

Bonjour,

Il vous manque l'id en cours de la page car la vous comparez toujours la même chose.

Bonjou,

Et merci de votre réponse j'ai modifier comme ceci

      <?php foreach($pagesMenu as $p): ?>

        <li<?php echo ($this->vars->page->name == $p->name) ?' class="current_page_item"':''; ?>>

        <a href="<?php echo Router::url('pages/view/id:'.$p->id.'/slug:'.$p->slug); ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a>

      <?php endforeach; ?>

Et cela m'affiche toujour les <li> en active
Ca devrais fonctionner puisque je test le nom de la page avec le <a>nom du lien</a>
Comprend pas

Que vaut "$this->request->params['1']" ?
essayer de faire des echo des différentes variables pour vérifier ce qu'elle ce qu'elles contiennent.

J'ai la vue sur <?php var_dump($this); ?>
params['1'] contient un array :
public 'params' =>
array (size=2)
0 => string '55' (length=2)
1 => string 'presentation' (length=12)

J'ai trouver pourquoi tout mes liens sont actif, parce que il sont dans foreach ?

55 correspond à l'id de la page ?

Oui
private 'vars' (Controller) =>
array (size=1)
'page' =>
object(stdClass)[9]
public 'id' => string '55' (length=2)

Quoi impossible !

Ca fonctionne ! Merci j'ai passer l'apres midi la dessus
Que veut dire <?=
Maintenant j'ai un autre souci j'ai un li avant qui renvoi une page seul qui ne fonctionne plus

<li<?php echo ($this->request->url == '/') ?' class="current_page_item"':''; ?>>

Mercipour l'info du <?=
Par contre je ne comprend pas pourquoi

<li<?= ($this->request->params['0'] == $p->id) ?' class="current_page_item"':''; ?>>

et pas

<li<?php echo ($this->request->params['0'] == $p->id) ?' class="current_page_item"':''; ?>>

Au sujet du <li> j'avais un autre lien avant qui pointais vers une seul page avec aussi une détection de page li class active qui ressemblais a ceci

<li<?= ($this->request->url == '/accueil') ?' class="current_page_item"':''; ?>>

Et quand j'ai tester ton code qui a fonctionner, la detection de la page li class active de celui ci ne fonctionner plus car il n'y avais aucun params dans request tout simplement.
Par contre pourquoi la detection du params de ton code à jouer sur le mon lien seul avant celui la !
Est-ce du au <?=

<?= c'est la même chose que <?php echo donc si cela vous pose un problème, vous n'êtes pas obliger de les mettre.
Vous pouvez toujours tester les 2 conditions comme ci:

<?php echo (($this->request->url == '/accueil') || ($this->request->params['0'] == $p->id)) ?' class="current_page_item"':''; ?>>