2009-04-28 5 views
1

J'écris une application web simple en utilisant CakePHP version 1.2 (la plus récente) et j'ai un problème avec l'affichage du message flash de l'assistant Session. Dans ma mise en page, il existe le code suivant:

<?php echo $this->renderElement('flash'); ?> 

Ce qui rend l'élément suivant:

<?php if($session->check('Message.flash')): ?> 
    <?php $class = isset($error) ? 'contentError' : 'contentSuccess'; ?> 
    <div class="contentBlockWrapper <?php echo $class; ?>"> 
     <div class="contentBlock"> 
      <div id="flashMessage" class="flash"> 
       <?php $session->flash(); ?> 
      </div> 
     </div> 
    </div> 
<?php endif; ?> 

Le comportement souhaité est que, s'il y a un message flash à afficher, qu'il soit affiché à l'emplacement ci-dessus dans le DOM afin qu'il soit stylisé et positionné comme je le souhaite.

Le problème est que s'il y a un message flash, CakePHP le restitue immédiatement après l'ouverture <body>. Maintenant, il rend également les conteneurs décrits ci-dessus dans l'emplacement correct, mais n'écrit tout simplement pas le texte où je le veux.

J'ai essayé de rincer le tampon de sortie dans une variable dans ma vue et d'en faire écho, mais en vain. J'ai également lu que certaines personnes ont essayé d'utiliser des touches nommées pour indiquer le message spécifique qu'elles veulent afficher, mais ce n'est pas approprié ici parce que le texte que je veux afficher est affiché, juste au mauvais endroit.

Toute aide serait appréciée - merci!

+0

Voulez-vous dire que peu importe où vous placez l'appel pour rendre l'élément, le gâteau le mettra toujours juste après l'étiquette du corps? Dans mon application (juste testé), il le rend partout où j'ai l'appel $ session-> flash (en regardant la source générée, dans le DOM). Etes-vous sûr de l'avoir correctement dans la mise en page? Publierez-vous votre mise en page (utilisez bin.cakephp.org et laissez un lien). Merci! –

+0

Je me demande si c'est peut-être parce que j'ai tout le bordel dans un élément plutôt que dans la vue elle-même. Je vais essayer de le sortir de l'élément et voir si cela fonctionne - merci pour les commentaires! – inkedmn

Répondre

1

Je pense que vous avez probablement un reste dans votre mise en page qui dit

$session->flash(); 

Ainsi, le flash est rendu et il effacé. C'est pourquoi il n'est pas rendu dans votre élément.

Vérifiez votre ~/app/views/layouts/default.ctp (ou autre si vous n'utilisez pas la valeur par défaut) et faites-nous savoir si cela vous aide.

1

Assurez-vous que si vous avez utilisé la fonction de traduction lors de l'appel de setFlash() dans votre automate, vous lui avez transmis "true" comme second paramètre. Comme ceci:

$ this-> Session-> setFlash (__ ('Mon message ici', TRUE));

Sinon, le message sera renvoyé, pas retourné! Vous le verrez juste ajouté au code HTML de votre page et le message envoyé à setFlash sera indéfini et ne s'affichera donc pas à l'endroit où vous l'attendez.

Questions connexes