Bonjour,

est is possible de faire des if imbrique sous cette forme ?

<?php if ($this->Session->read('Auth.User')): ?>

    <?php endif ?>

pour ceci

<?php
if($this->Session->read('Auth.User')) { // registered user
    echo $this->Html->link(__('My Profile'),array('admin'=>false, 'plugin'=>null, 'controller'=>'users', 'action'=>'view',
        $this->Session->read('Auth.User.slug')));
    if(Configure::read('settings.disableMessages') == 0) {
        if(!isset($messages_number)) $messages_number = 0;
        echo $this->Html->link(__('Messages').'('.$messages_number.')', 
            array('admin'=>false, 'plugin'=>'messages', 'controller'=>'messages', 'action'=>'index'));
    }
    if($this->Session->read('Auth.User.admin')) {
        echo $this->Html->link(__('Admin'), array('plugin'=>null, 'controller'=>'settings', 
            'action'=>'dashboard', 'admin'=>true));
    }

11 réponses


Lartak
Réponse acceptée

Voilà des if sans accolades et sans balises HTML comme des li non incluses dans le balisage PHP :

<?php if($this->Session->read('Auth.User')): // registered user ?>
    <li><?php echo $this->Html->link(__('My Profile'), array('admin' => false, 'plugin' => null, 'controller' => 'users', 'action' => 'view', $this->Session->read('Auth.User.slug'))); ?></li>
    <?php if(Configure::read('settings.disableMessages') == 0): 
        $number_messages = !isset($messages_number)?'0':$messages_number; /* Petite modification */ ?>
        <li><?php echo $this->Html->link(__('Messages').' ('.$number_messages.')', array('admin' => false, 'plugin' => 'messages', 'controller' => 'messages', 'action' => 'index')); ?></li>
    <?php endif ?>
    <?php if($this->Session->read('Auth.User.admin')): ?>
        <li><?php echo $this->Html->link(__('Admin'), array('plugin' => null, 'controller' => 'settings', 'action' => 'dashboard', 'admin' => true)); ?></li>
    <?php endif ?>
<?php endif ?>

Bonjour.
Si tu veux dire comme ça :

<?php
if($this->Session->read('Auth.User')): // registered user
    echo $this->Html->link(__('My Profile'), array('admin' => false, 'plugin' => null, 'controller' => 'users', 'action' => 'view', $this->Session->read('Auth.User.slug')));
    if(Configure::read('settings.disableMessages') == 0): 
        $number_messages = !isset($messages_number)?'0':$messages_number; /* Petite modification */
        echo $this->Html->link(__('Messages').' ('.$number_messages.')', array('admin' => false, 'plugin' => 'messages', 'controller' => 'messages', 'action' => 'index'));
    endif; 
    if($this->Session->read('Auth.User.admin')):
        echo $this->Html->link(__('Admin'), array('plugin' => null, 'controller' => 'settings', 'action' => 'dashboard', 'admin' => true));
    endif;
endif;

Normalement, il n'y a pas de soucis.
Tu remarqueras que j'ai fais une petite modification, à toi de voir si tu veux l'apporter ou non.

sylvain
Auteur

Je voulais dire comme ca

<?php if ($this->Session->read('Auth.User')): ?>
      <?php if (): ?>
         ....

        <?php endif ?>
    <?php if (): ?>
      ....   
        <?php if (): ?>
        ....   
       <?php endif ?>
    <?php endif ?>
<?php endif ?>

Il n'y a aucune raison que cela ne fonctionne pas. C'est simplement une annotation alternative

C'est approximativement ce que j'ai fais, des if avec des " :" et des endif au lieu des accolades habituelles.

sylvain
Auteur

Oui mais ce n'est pas pareil, car j'ai besoins de la premiere structure car je dois ejouter des LI et des UL pour faire mon menu de navigation, je voulais eviter d'ajouter du html dans le php en faisant des "<ul><li>".$.....

sylvain
Auteur

Super merci, je me demandais si c'etais faisable du coup j'ai la reponse en image :-)

De rien. :)

sylvain
Auteur

Je me rappel pourquoi j'avais posé la question, il me semble que les if imbriqué posait probleme en cas de realisation de cache

Effectivement en cas de conditions dans une vue mise en cache ça va poser problème mais tu peux mettre ton block entre <!--nocache--> <!--/nocache--> afin de ne pas mettre le bout de code dans le cache ;)

Ce n'est pas vraiment le fait que les if soient imbriqués, c'est tout simplement qu'il faut éviter de mettre du code PHP utilisant des conditions par exemple qui mettra en "déroute" le code généré par le cache de l'application.
Tout comme les fonctions foreach et autres qui doivent de préférence être exclus des blocs de cache, les affichages echo et autres comme les helpers ne sont pas gênant pour le cache, normalement.