Задать вопрос
@hollanditkzn

Как сделать виджет уведомлении?

Как реализовать виджет который показывал количество записей непрочитанных уведомлений, когда кликнеш на него, то выходит записи непрочитанных уведомлений. И когда на какое то уведомление кликнеш то переходишь на заказ. Я уже примерно реализовал это сделать так что вся выборка в контроллере указывал, и в шаблоне строил внешний вид. Но слишком громоздкий код в контроллерах выходит. Но становится неудобны когда создается actionю Для примеру вот как это у вконтакте или других соц сетях реализовали, нужно практически тот самый эффект будет ae71a68423f74db0a5460478105d335d.png
Вот что я набросал, но код не работает, выходит ошибка Operator '' requires two operands.
Я загуглил что-то толкового я не нашел на решение собственной проблемы
class Notifications extends Widget
{
    public function run()
    {
        return $this->renderItems();
    }

    /**
     * Creates a window for the notification
     * @method string renderCount()
     * @return string
     */
    public function renderItems()
    {
//Берем записи не просмотренные уведомлений у определенного пользователя
        $notifModel = Notification::find();
        $notifications = $notifModel->where(['id_user' == Yii::$app->user->id, 'active' => true])->all();
//добавляем количество записей
        $this->renderCount();
//под поределенную категория уведомлений делаем свой логотип вначале
        foreach($notifications as $notification){
            $date = date('Y-m-d H:i:s', time());
            if ($notification->category == 0) {
                $notif = '<span class="glyphicon glyphicon-road"></span> '.$notification->name.'<br>';
            } elseif ($notification->category == 1) {
                $notif = '<span class="glyphicon glyphicon-ok"></span> '.$notification->name.'<br>';
            } elseif ($notification->category == 2) {
                $notif = '<span class="glyphicon glyphicon-file"></span> '.$notification->name.'<br>';
            } elseif ($notification->category == 4 && $notification->srok <= $date){
                $notif = 'Напоминание о заказе №'.$notification->id_zakaz.' '.$notification->srok;
            } elseif ($notification->category == 4 && $notification->srok >= $date){
                $notif = '';
            }
//При нажатие на запись идет редирект на заказ 
            echo Html::a($notif.'<br>', ['notification/notification', 'id' => $notification->id_zakaz], ['id' => $notification->id_zakaz, 'class' => 'zakaz', 'data-key' => $notification->id_zakaz]);
        };
//отрисовываем окно уведомлений
        $formNotif = '<div class="notification-container hidden" id="notification-container">
                    <div class="notification-content">'.$notifications.'</div>
                <div class="notification-footer">'.Html::a('Прочитать все напоминание', ['notification/index']).'</div>
            </div>';
        return $formNotif;
    }

    /**
     * Notification count row
     * @return string
     */
    public function renderCount()
    {
//Получаем количество не просмотренные уведомлений у определенного пользователя
        $notifModel = Notification::find();
        $notification = $notifModel->where(['id_user' == Yii::$app->user->id, 'active' => true])->count();если количество больше 50, то указывается 50+
        if ($notification > 50) {
            $notifications = '50+';
        } elseif ($notification < 1) {
            $notifications = '';
        } else {
            $notifications = $notification;
        }
//отрисовываем логотип и полученное число
        return '<span class="glyphicon glyphicon-bell" style="font-size:21px"></span><span class="badge pull-right">'.$notifications.'</span>';
    }
}
На github вот код
https://github.com/hollandit/crm/blob/development/...
  • Вопрос задан
  • 231 просмотр
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы