Настройка стиля и расположения вывода $ session-> flash в CakePHP 1.2 - PullRequest
1 голос
/ 28 апреля 2009

Я пишу простое веб-приложение, использующее CakePHP версии 1.2 (самая последняя), и у меня возникла проблема с отображением флеш-сообщения от помощника Session. В моем макете существует следующий код:

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

Который отображает следующий элемент:

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

Желаемое поведение заключается в том, что, если есть отображаемое флэш-сообщение, оно должно отображаться в указанном выше месте в DOM, так что оно будет стилизовано и расположено так, как я хочу.

Проблема в том, что при наличии флеш-сообщения CakePHP отображает его сразу после открывающего тега <body>. Теперь он также отображает контейнеры, описанные выше, в правильном месте, но просто не записывает текст там, где я хочу.

Я попытался сбросить буфер вывода в переменную в моем представлении и повторил это, но безрезультатно. Я также читал, что некоторые люди пытались использовать именованные ключи, чтобы указать конкретное сообщение, которое они хотят отобразить, но это здесь не подходит, потому что текст, который я хочу отобразить, отображается в неправильном месте.

Буду признателен за любую помощь - спасибо!

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

Убедитесь, что если вы использовали функцию перевода при вызове setFlash () в вашем контроллере, вы передали «true» в качестве второго параметра. Вот так:

$ this-> Session-> setFlash (__ ('My Message Here', TRUE));

В противном случае сообщение будет отражено, а не возвращено! Вы просто увидите, что он добавлен к HTML-коду вашей страницы, и сообщение, отправленное в setFlash, будет неопределенным и, следовательно, не будет отображаться в том месте, где вы ожидаете.

1 голос
/ 29 апреля 2009

Я думаю, что у вас, вероятно, есть остаток в макете, который говорит:

$session->flash();

Таким образом, вспышка отображается и очищается. Вот почему он не отображается в вашем элементе.

Проверьте ваш ~/app/views/layouts/default.ctp (или другой, если вы не используете по умолчанию) и дайте нам знать, если это поможет.

...