У меня возникли проблемы с пониманием лучшего способа внедрения системы уведомлений в Cake. Я использую Pines Notify Framework для визуальных эффектов.
Я хотел бы, чтобы эти уведомления появлялись на каждой странице, поэтому я думал, что компонент, который будет использоваться в контроллере приложения, выполнит эту работу, но я не уверен, как я буду взаимодействовать с представлениями из этого компонента.
В принципе, когда выполняются определенные условия, мне нужно, чтобы компонент вызывал сценарий Jquery в представлении текущего контроллера.
То, что я закончил, было просто с помощью setFlash() вызвать специальное уведомление, которое запустило событие pnotify.
Т.е. в контроллере
$this->Session->setFlash('Something occurred.', 'notify');
А затем в notify.ctp
<script>var stack_topleft = {"dir1": "down", "dir2": "right", "push": "top"};
$(document).ready(function() {
$.pnotify.defaults.styling = "bootstrap3";
$.pnotify.defaults.history = false;
$.pnotify({
title: 'Regular Success',
text: '<?php echo $message; ?>'
});
});</script>
Это может быть отрывочный ответ, поскольку я немного cakePHP noob, но он работает.
В принципе, когда выполняются определенные условия, мне нужно, чтобы компонент вызывал сценарий Jquery в представлении текущего контроллера.
Вы знаете разницу между серверной и клиентской языками? Это не сработает. php не может разговаривать с JS в браузере.
Вам придется использовать Websockets или AJAX с длинным опросом, комета, чтобы заставить JS-скрипт обмениваться данными с сервером через JSON, чтобы получать уведомления оттуда.
Переустановленное:
1) Включите скрипт turbo-tribble.js в свой основной шаблон:
echo $this->Html->script([
'jquery.min', // JQuery is required
'turbo-tribble'
]);
2) Включите таблицу стилей turbo-tribble.css в свой основной шаблон:
echo $this->Html->css([
'turbo-tribble'
]);
3) Добавьте нижеприведенный фрагмент к основному шаблону:
<div id="turbo-tribble">
<?php echo $this->Flash->render('tribble'); ?>
</div>
4) Добавьте turbo_tribble.ctp
в turbo_tribble.ctp
src/Template/Element/Flash
;
5) Добавьте код из AppController.php
в свой AppController.php
;
Более того, вы можете легко использовать этот модуль уведомлений из своего jQuery, а также из своих контроллеров:
// from jQuery
$('.selector').on('click', function() {
// your logic here
$tt.setFlash('Some good news!', 'success');
})
// from php
public function index()
{
// your logic here
$this->setFlash('Some notification', self::NOTICE);
}
Дополнительная информация находится здесь http://turbo-tribble.ml/