15Дек/108
setFlash сообщения в CakePHP используя эффекты jQuery
Всем привет, я хочу рассказать как можно изменить вид для сообщений setflash в CakePHP. Я не могу сказать что это сильно отличается от стандартных элементов, но я добавил CSS и jQuery эффекты. Теперь это смотрится иначе, не как обычное сообщение CakePHP. И так за дело.
- Добавьте jQuery файл в ваш шаблон (layout) или представление (view). Вы можете скачать его отсюда http://code.jquery.com/jquery-1.4.4.min.js
- Создайте новый файл с jQuery с таким содержимым:
// Location : /app/webroot/js/flash.js $(document).ready(function(){ $('.cancel').click(function(){ $(this).parent().parent().fadeOut(); return false; }); }); - Создайте элемент (element) или шаблон (layout) для сообщений. Если вы используюте CakePHP 1.2 или более старую версию, то вам необходимо создать шабло (layout). А если вы используюте CakePHP 1.3, то создавайте элемент (element).
// Location for cakephp 1.3.x : /app/views/elements/flash_good.ctp // Location for cakephp 1.2.x : /app/views/layouts/flash_good.ctp <div><a href="javascript:void(0);"><img src="/<?php echo SITE_URL.SITE_ROOT; ?>/img/delete.png" alt="Close" /></a></div>
// Location for cakephp 1.3.x : /app/views/elements/flash_bad.ctp // Location for cakephp 1.2.6 : /app/views/layouts/flash_bad.ctp <div class="flash_bad"> <a href="javascript:void(0);" class="cancel"><img src="/img/delete.png" alt="Close" /></a> <?php // for cakephp 1.3.x echo $message; // for cakephp 1.2.x echo $content_for_layout; ?> </div>
- Теперь пришло время по играть с CSS. Добавьте следующий CSS код в ваш шаблон (layout) или создайте отдельный файл для него
/* Location : /app/webroot/css/flash.css */ .flash_good { background:none repeat scroll 0 0 #94DDF9; border:1px solid #69CFF6; float:left; margin:5px 10px; padding:3px; text-align:center; width:932px; border-radius:5px; behavior: url(border-radius.htc); -moz-border-radius: 5px; } .flash_bad { background:none repeat scroll 0 0 #FC7862; border:1px solid #ff0000; float:left; margin:5px 10px; padding:3px; text-align:center; width:932px; border-radius:5px; behavior: url(border-radius.htc); -moz-border-radius: 5px; } .flash_good img { float:right; } .flash_bad img { float:right; } - Это пример вашего основного шаблона (main layout)
<?php echo $html->css('flash'); echo $javascript->link('/js/jquery-1.4.4.js'); echo $javascript->link('/js/flash.js'); ?> - Этот пример демонстрирует как можно оформить контроллер (controller).
function editprofile($username = null) { if (!empty($this->data)) { $save = $this->User->save($this->data['User']); if (!empty($save)) { $this->Session->setFlash('Your profile has been saved successfully.', 'flash_good'); $this->redirect('/profile'); } else { $this->Session->setFlash('An error occured!', 'flash_bad'); $this->redirect('/profile'); } } }
Вот и все. Я надеюсь, что это будет полезно для вас.
Оригинал статьи session setflash with cool jquery effects
Понравилась статья?
Комментарии (8)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Декабрь 24th, 2010 - 09:16
Серега, удобную вещицу описал! так держать!
Декабрь 24th, 2010 - 09:16
!копать
Декабрь 24th, 2010 - 09:18
!рыбалка
Декабрь 24th, 2010 - 09:32
Вы забрасываете бамбуковую удочку в ванную Вы чувствуете поклевку и начинаете быстро тащить что-то из воды..
Январь 24th, 2011 - 02:58
Возможно я в чем-то заблуждаюсь, т.к. в кейке новичек, но данный пример у меня упорно не работает.
Вот те причины, которые мне помешали:
1. В кейке я не нашел таких констант: SITE_URL.SITE_ROOT (сам кейк на них ругается)
2. Не слова о картинке по имени delete.png (какая она должна быть или хотябы где скачать???). Хотя в коде явно используется дважды.
3. В виде для подключения файла явасктипта рекомендуемый код не работает:
echo $javascript->link(‘/js/jquery-1.4.4.js’);
echo $javascript->link(‘/js/flash.js’);
надо так:
Html->script(‘jquery-1.4.4.min’);
echo $this->Html->script(‘flash’);
?>
Но самое печальное, что даже после всего этого так и не заработали Ваши анимированые флешки
Январь 24th, 2011 - 03:00
подкорректирую предыдущий свой пост (при отправке сообщения произошел глюк)
Html->script(‘jquery-1.4.4.min’);
echo $this->Html->script(‘flash’);
?>
Январь 24th, 2011 - 20:17
Да, действительно тут много ошибок как выяснилось если брать все как есть. И так, как их исправить:
1. По кейковски лучше сделать вообще так:
Html->link($this->Html->image(‘delete.png’, array(‘alt’ => ‘Close’, ‘class’ => ‘cancel’)), ‘javascript:void(0);’, array(‘escape’ => false)).$message; ?>
2. Картинку иконки для закрытия файлов можно взять ту которая больше подойдет для вашего дизайна, поискать можно так: http://www.google.com/images?q=delete&hl=ru&biw=1366&bih=545&tbs=isch:1,itp:clipart&prmd=ivns&source=lnt&sa=X&ei=Bog9Tbb7LdHqOajPkPoK&ved=0CBAQpwUoAw
3. Я сделал так:
echo $this->Html->css(‘flash’);
echo $this->Javascript->link(‘jquery.js’);
echo $this->Javascript->link(‘flash.js’);
Анимацая там слабенькая если честно, ее можно допилить эффектами на jQuery, например в flash.js сделать так:
$(document).ready(function(){
$(‘.cancel’).parent().parent().fadeOut().fadeIn().fadeOut().fadeIn();
$(‘.cancel’).click(function(){
$(this).parent().parent().fadeOut(); return false;
});
});
тогда при появление надпись мигнет два раза.
Надеюсь помог…
Январь 26th, 2011 - 02:02
sergey! Спасибо. На днях обязательно попробую