通常,$this->Session->setFlash(__('My message.'));
将输出:
<div id="flashMessage" class="message">
My message.
</div>
如何更改,以便输出:
<p class="notification>
My message.
</p>
代替?
答案 0 :(得分:19)
如果查看源代码,您会看到SessionComponent方法的第二个参数是元素的名称:
function setFlash($message, $element = 'default', $params = array(), $key = 'flash')
您可以在视图/元素(或Cake2的Views / Elements)中创建一个名为'flash_notification.ctp'的文件
具有以下内容:
<p class="notification">
<?php echo $message; ?>
</p>
并使用
$this->Session->setFlash(__('My message.'), 'flash_notification');
答案 1 :(得分:3)
根据cakephp flash message,您无需在视图中处理ID和类。您可以在setFlash中设置id和class,这很简单。
$this->Session->setFlash(__('My message.'), 'default', array('id' => 'flashMessage', 'class' => 'message'), 'message');
$this->Session->setFlash(__('My message.'), 'default', array('class' => 'notification'), 'notification');
在您看来。
echo $this->Session->flash('message');
echo $this->Session->flash('notification');
多数民众赞成。
答案 2 :(得分:0)
在app / element中创建.ctp文件(例如:flash.ctp)
<div class="alert alert-<?= (isset($alert)? $alert : 'info' ) ?>">
<button type="button" class="close" data-dismiss="alert">×</button>
<center> <?= (isset($message)? $message : 'Something went wrong' ) ?></center>
</div>
并使用
$this->Session->setFlash($message,'flash',array('alert'=>'info'));
定义类,在css文件中键入以自定义Flash消息 我希望这会有所帮助
答案 3 :(得分:0)
我认为目前的答案一般都不是闪存消息的好方法。
整个应用程序应该只有$this->setFlash('my message');
,父视图或布局应决定如何呈现它(即使是使用元素)。
以下代码应位于布局中,可能位于<head>
部分。
<?php
$flashMessage = $this->Session->flash();
if ( $flashMessage !== false) {
echo $this->element('my_custom_flash_element', array(
'message' => $flashMessage
));
}
?>
布局捕获它,并将flash消息作为变量传递给元素'my_custom_flash_element'。
在元素内部你可以使用css进行所有花哨的渲染,甚至像toastr.js这些很酷的东西(我个人喜欢!)
示例:(my_custom_flash_element.ctp)
<script>
$(document).ready(function() {
<?php echo "toastr.warning('" . $message . "');"; ?>
});
</script>
还可以通过@dereuromark
在transient flash messages上查看这个精彩的概念答案 4 :(得分:0)
我使用jquery找到了这个解决方法。
我在控制器if($var1 == null) { $this->Flash->error(__('Error message')); }
在/app/View/Layouts/default.ctp中我把这段代码
$(document).ready(function() {
if($('#flashMessage').length) // Check if flashMessage exists
{
var message = $('#flashMessage').html(); // Copy text
// if I send html tags in the flash message,I use this code to print html
message = message.replace(/</g, '<');
message = message.replace(/>/g, '>');
if( $('#flashMessage').hasClass("error") ) // Check if it has the error class
{
// Create a bootstrap alert warning and set the message
$('#flashMessage').html("<div class='alert alert-warning' style='width:50%'>"+message+"</div>");
}
if( $('#flashMessage').hasClass("success") ) // Check if it has the sucess class
{
// Create a bootstrap alert sucess and set the message
$('#flashMessage').html("<div class='alert alert-success' style='width:50%'>"+message+"</div>");
}
}
});