2009-04-28 4 views
1

Ich schreibe eine einfache Web-Anwendung mit CakePHP Version 1.2 (die neueste) und habe ein Problem mit der Anzeige der Flash-Nachricht von der Sitzung Helfer. In meinem Layout gibt es den folgenden Code:

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

Welche das folgende Element macht:

<?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; ?> 

Das gewünschte Verhalten ist, dass, wenn es eine Flash-Mitteilung ist angezeigt werden, dass es bei angezeigt den oben genannten Ort innerhalb des DOM, so dass es wie gewünscht gestaltet und positioniert wird.

Das Problem ist, dass, wenn es eine Flash-Nachricht gibt, CakePHP Rendern es sofort nach dem Öffnen <body> Tag. Jetzt rendert es auch die oben beschriebenen Container an der richtigen Stelle, schreibt aber einfach nicht den Text, wo ich es haben will.

Ich habe versucht, den Ausgabepuffer in eine Variable innerhalb meiner Ansicht zu spülen und das Echo, aber ohne Erfolg. Ich habe auch gelesen, dass einige Leute versucht haben, benannte Schlüssel zu verwenden, um die spezifische Nachricht anzuzeigen, die sie anzeigen möchten, aber das ist hier nicht passend, weil der Text, den ich anzeigen möchte, nur an der falschen Stelle angezeigt wird.

Jede Hilfe wäre willkommen - danke!

+0

Sie sagen, dass egal, wo Sie den Aufruf platzieren, um das Element zu rendern, wird Kuchen immer gleich nach dem Body-Tag setzen? In meiner App (nur getestet), rendert es es, wo auch immer ich den $ session-> Flash-Aufruf (Blick auf die generierte Quelle, innerhalb des DOM). Sind Sie sicher, dass Sie es richtig im Layout haben? Werden Sie Ihre Layoutansicht veröffentlichen (verwenden Sie bin.cakephp.org und hinterlassen Sie einen Link). Danke! –

+0

Ich frage mich, ob es vielleicht ist, weil ich die ganze Unordnung in einem Element statt innerhalb der Ansicht selbst habe. Ich werde versuchen, es aus dem Element zu entfernen und zu sehen, ob das funktioniert - danke für das Feedback! – inkedmn

Antwort

1

Ich glaube, Sie wahrscheinlich ein Überbleibsel in Ihrem Layout haben, das sagt

$session->flash(); 

So der Blitz dort gerendert und gelöscht wird. Deshalb wird es nicht in deinem Element gerendert.

Überprüfen Sie Ihre ~/app/views/layouts/default.ctp (oder andere, wenn Sie nicht die Standardeinstellung verwenden) und lassen Sie uns wissen, wenn es hilft.

1

Stellen Sie sicher, dass Sie, wenn Sie beim Aufruf von setFlash() in Ihrem Controller die Übersetzungsfunktion verwendet haben, als zweiten Parameter "true" übergeben haben. Wie so:

$ this-> Sitzung-> setFlash (__ ('Meine Nachricht hier', WAHR));

Andernfalls wird die Nachricht wiederholt, nicht zurückgegeben! Sie sehen es nur dem HTML-Code Ihrer Seite vorangestellt und die an setFlash gesendete Nachricht ist undefiniert und wird daher nicht an dem Ort angezeigt, an dem Sie es erwarten.