Как сделать уведомления на сайте php

Обновлено: 05.07.2024

1.1 Создание MySQL таблиц

Начнем мы с создания необходимых таблиц в БД для новостей. Каждая новость будет включать в себя заголовок, описание, имя автора, e-mail автора, дату и время, а так же уникальный идентификационный номер, чтобы идентифицировать каждую новость. Теперь мы готовы создать таблицы, используя следующий код:


Таблицы созданы, теперь мы можем перейти к реальному кодингу.


Теперь сохраните это как add.php и загрузите его в вашем браузере. Вы должны увидеть все поля, но если вы нажмете добавить, ничего не происходит. Это потому, что не какой код не выполняет сценарий, чтобы использовать информацию, так что это просто перезагрузка формы. Скрытое поле в форме очень важно, и мы будем рассматривать это в следующем шаге. Вы, возможно, заметили, что переменная $PHP_SELF, все это делает, что-бы, когда вы нажмете добавить, будет перезагрузка страницы с текущей информацией. Теперь давайте начнем кодирование.

Теперь мы можем на самом деле начать кодить. Во-первых, мы должны создать сценарий который что-то делает, когда форма была отправлена. Помните, скрытое поле? Это где он вступает в игру. Мы можем использовать функцию isset(), чтобы проверить, было ли для скрытой переменной поле установлено или нет, и если да, то запустить скрипт. Таким образом, мы напишем следующее:


Теперь для фактического сценария, мы создадим подключение к базе данных:


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

Вот так, должен выглядеть ваш add.php:

3.1 Редактирование/Удаление новостей: Вывод элементов новостей на странице

Мы должны начать с получения всех новостей из базы данных, а затем создать ссылку редактировать и удалить рядом с каждым пунктом для того, чтобы выполнить требуемое действие. Во-первых, мы должны объявить переменную, чтобы сообщить нам о выполняемым действие. Мы должны сделать основной контур вроде такого:


Давайте начнем с вывода всех новостей. Мы должны сделать подключение к базе данных (например, как в add.php) и выбрать все строки. Код будет выглядеть примерно так:

Давайте начнем с вывода всех новостей. Мы должны сделать подключение к базе данных (например, как в add.php) и выбрать все строки. Код будет выглядеть примерно так:

3.2 Редактирование/Удаление новостей: Редактирование новостей

Эта часть сценария будет появляться, когда $a равна 'Edit'. За $ID были отправлены со ссылкой, так что все мы должны сделать сейчас, это принесет другие данные, которые связанные с этим ID. Вот как это выглядит:


Это выглядит очень похоже со страницей add.php, на этот раз, хотя, мы ставим значения, сохраненные в базе данных в поля для редактирования. Вы также можете заметить, что мы добавили переменную обновления к классу редактирования, это так, мы можем сказать, скрипт, который мы фактически обновляем вместо повторной печати формы. Обновление будет выглядеть следующим образом:

3.3 Редактирование/Удаление новостей: Финал

Верьте или нет, но вы уже написали этот модуль, когда вы написали редактирование/edit.php. Код в основном такой же без «редактировать | удалить „ссылки. Здесь в полном виде:

5.1 Итоги

Теперь вы узнали, как создать модуль новостей, то есть: добавление, редактирование, удаление, а так же извличение из базы данных и их вывод. Этот модуль так-же может быть реализован во многих других приложениях, например: полноценная система управления сайтом.

Собираем всю конструкцию кода "Alert в php" или "php Alert"

Аlert php живой пример.

Если мы вставим выше приведенный код на страницу, то он сработает при загрузке. Это слишком неинтересно!

Хочу живой пример, когда пользователь сам активирует пример использования "alertphp"

Нарисуем простую form-у.

В неё поместим кнопку button.

После того, как вы нажмете кнопку и отправите пост запрос -его нужно обработать. сделаем простое условие на if и внутрь поместим выше приведенный код алерт в php

Вот теперь код примера "alertphp" готов:

Живой пример иллюстрации работы phpalert

Для того, чтобы сработал "Alert в php" нажмите кнопку "Alert в php".

Вы можете обращаться ко всем функциям концентраторов уведомлений из серверной части Java/PHP/Ruby, используя интерфейс REST Центра уведомлений в соответствии с описанием в статье MSDN Интерфейсы API REST концентраторов уведомлений.

В этом разделе описывается:

  • построение клиента REST для функций концентраторов уведомлений на PHP;
  • Следуйте инструкциям по отправке push-уведомлений в приложения iOS с помощью Центров уведомлений Azure для вашей мобильной платформы, реализуя серверную часть на PHP.

Интерфейс клиента

Весь доступный код находится в Примере оболочки PHP REST.

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

Отправка собственного уведомления iOS.

Реализация

Если вы еще это не сделали, выполните шаги, описанные в [руководстве по началу работы], до последнего раздела, в котором описано, как реализовать серверную часть. Кроме того, при необходимости можно воспользоваться кодом из Примере оболочки PHP REST и перейти непосредственно к разделу Завершение работы с руководством.

Подробные сведения о реализации полноценной оболочки REST можно найти в MSDN. В этом разделе описывается реализация основных действий на PHP, необходимых для доступа к конечным точкам REST службы "Центры уведомлений".

Проанализируйте строку подключения

Ниже показан основной класс, реализующий клиента, конструктор которого выполняет анализ строки подключения:

Создание маркера безопасности

В документации Azure содержатся сведения о том, как создавать маркер безопасности SAS.

Для создания маркера на основе универсального кода ресурса (URI) текущего запроса и учетных данных, извлеченных из строки подключения, добавьте метод generateSasToken в класс NotificationHub .

Этот класс представляет собой контейнер для текста собственного уведомления либо набор свойств, в случае с шаблонным уведомлением, а также набор заголовков, содержащих свойства формата (собственная платформа или шаблон) и специальные свойства платформы (например, свойство срока действия Apple и заголовки WNS).

Обратитесь к документации по REST API для службы "Центры уведомлений" и изучите форматы специализированных платформ уведомлений, чтобы узнать обо всех доступных параметрах.

Имея этот класс, мы можем создавать методы отправки уведомлений внутри класса NotificationHub .

Завершение работы с учебником

Теперь вы можете завершить работу с учебником по началу работы, отправив уведомление из серверной части PHP.

Инициализируйте клиент Центров уведомлений (замените строку подключения и имя концентратора в соответствии с инструкциями в [руководстве по началу работы]):

Затем добавьте код отправки, определяемый целевой мобильной платформой.

Магазин Windows и Windows Phone 8.1 (без Silverlight)

Android

Windows Phone 8.0 и 8.1 Silverlight

Kindle Fire

После выполнения кода PHP на целевом устройстве должно отобразиться уведомление.

Next Steps

В этом разделе было показано, как создать простой клиент PHP REST для службы "Центры уведомлений". Здесь можно выполнять следующие действия:

Без валидного SSL сертификата запустить не получится. То есть сначала надо купить домен, на котором будет размещаться сайт, потом подключить к нему SSL сертификат (у многих хостеров эта услуга предоставляется бесплатно) и тольк потом надо начинать повторять наш гайд 🙂

Все файлы и папки, которые я упоминаю в гайде прикреплены в архивах к посту.

Создание проекта в Firebase

  • Заходим на сайт ;
  • Регистрируемся;
  • Жмём кнопку Create new project или Import Google project, если у вас уже есть проект;
  • При создании указываем название проекта и страну;
  • После создания проекта попадаем на его dashboard;
  • В меню наводим на колесико рядом с Overview и выбираем Project settings;

2. На открывшейся странице переходим во вкладку Cloud Messaging;

Как добавить Push-уведомления на свой сайт. Пошаговая инструкция

3. Затем на вкладке Общие нажимаем Добавить Firebase в свое веб-приложение.

Как добавить Push-уведомления на свой сайт. Пошаговая инструкция

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

Как добавить Push-уведомления на свой сайт. Пошаговая инструкция

Приступаем к настройке лендинга

Копируем содержимое папки land в корень сайта — то есть в ту папку, где у вас лежит index.html

1. Заменяем содержимое файла firebase/init.js кодом инициализации, полученным в ЛК firebase

Как добавить Push-уведомления на свой сайт. Пошаговая инструкция

2. В 3 строке файла firebase/firebase_subscribe.js добавляем ключ сертификата, полученный в ЛК.

Как добавить Push-уведомления на свой сайт. Пошаговая инструкция

3. Открываем файл send_subscribe.php и прописываем URL, по которому будет находиться наш скрипт, сохраняющий подписки.

4. Подключаем все скрипты к лендингу. Перед закрывающим тэгом body добавляем след. код:

Настройка сохранения подписок

В данном примере мы будем сохранять идентификаторы устройств подписавшихся пользователей в файл.

Для реального проекта желательно использовать базу данных для хранения подписок.

В этом примере скрипт для сохранения подписок будет находиться на том же сервере, где и лендинг, но если есть необходимость централизованного сбора подписок с разных сайтов, то можно разместить его на отдельном сервере, отведенном для обработки подписок.

Итак, для продолжения настройки необходимо скопировать содержимое папки server на хостинг, где будет располагаться система сохранения и обработки подписок. В данном случае просто скопируем в папку с лендингом.

В файле save_push.php находится скрипт, который сохраняет id устройств, подписавшихся пользователей в текстовый файл push.txt

В файле send_push.php представлен скрипт для отправки 1 push-уведомления.

Для его работы необходимо добавить ключ сервера, который нужно взять из ЛК firebase. (3 строка файла)

Как добавить Push-уведомления на свой сайт. Пошаговая инструкция

После того, как все настроено, необходимо совершить пробную подписку. Для этого надо просто зайти на свой сайт, куда был установлен скрипт и подписаться 🙂

После этого в файле push.txt должна появиться скрока вида

Это идентификатор устройства. Он необходим для отправки уведомлений.

Отправка уведомлений

Например:

1. Мой первоначальный подход заключался в использовании триггеров MYSQL:

Я использовал Mysql AFTER INSERT trigger для добавления записей в таблицу с именем notifications . Что-то вроде.

Уведомления извлекаются с чем-то вроде

Теперь мои следующие задачи.

  1. как отслеживать новые и старые уведомления для каждого пользователя?
  2. как я могу объединить уведомления, похожие на пользовательские, в одну строку?

редактировать

В соответствии с ответом ниже, чтобы установить флаг чтения / непрочитанности в строке, мне нужно будет иметь строку для каждого ученика, а не только строку для всего класса .. что означает редактирование триггера на что-то вроде

  • У вас есть какие-нибудь обновления или собственный ответ на этот вопрос? Что вы пробовали 9 месяцев назад?
  • Чтобы кто-то мог дать твердый ответ, вы должны включить столы для классов и студентов.
  • Вы нашли то, что искали @Zalaboza, или вам нужно другое решение? Я не совсем уверен, что вы хотите, если приведенный ниже ответ вам не помог. Пожалуйста, просветите меня, чтобы я мог вам помочь.

В этом посте я попытаюсь привести простой объясненный пример того, как начать создавать систему уведомлений.

Редактировать: Хорошо, хорошо, это оказалось намного дольше, чем я ожидал. Я очень устал в конце концов, извините.

WTLDR;

Вопрос 1: иметь флаг на каждом уведомлении.

Вопрос 2: По-прежнему храните каждое уведомление как отдельную запись в своей базе данных и группируйте их по запросу.

Структура

Предполагаю, что уведомления будут выглядеть примерно так:

За шторами это могло выглядеть примерно так:

Заметка: Я не рекомендую группировать уведомления внутри базы данных, делайте это во время выполнения, это делает вещи более гибкими.

Каждая система, над которой я работал, имела простой 1 к 1 ссылочные отношения в уведомлении, у вас может быть 1 к n имейте в виду, что я продолжу свой пример с соотношением 1: 1. Это также означает, что мне не нужно поле, определяющее, на какой тип объекта ссылаются, потому что это определяется типом уведомления.

Таблица SQL

Теперь, определяя реальную структуру таблицы для SQL, мы приходим к нескольким решениям с точки зрения дизайна базы данных. Я выберу простейшее решение, которое будет выглядеть примерно так:

Или для ленивых Команда создания таблицы SQL для этого примера:

Сервис PHP

Эта реализация полностью зависит от потребностей вашего приложения, Заметка: Это пример не золотой стандарт создания системы уведомлений на PHP.

Модель уведомления

Это пример базовой модели самого уведомления, ничего особенного, только необходимые свойства и абстрактные методы. messageForNotification и messageForNotifications мы ожидали реализации в различных типах уведомлений.

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

Типы уведомлений

Теперь вы можете создать новый Notification подкласс для каждого типа. Следующий пример будет обрабатывать как действие комментария:

  • Рэю понравился ваш комментарий. (1 уведомление)
  • Джону и Джейн понравился ваш комментарий. (2 уведомления)
  • Джейн, Джонни, Джеймсу и Дженни понравился ваш комментарий. (4 уведомления)
  • Джонни, Джеймсу и еще 12 понравился ваш комментарий. (14 уведомлений)

Менеджер уведомлений

Для работы с уведомлениями внутри приложения создайте что-то вроде диспетчера уведомлений:

В notificationAdapter Свойство должно содержать логику прямого взаимодействия с серверной частью данных в случае этого примера mysql.

Создание уведомлений

С помощью mysql триггеры не ошибаются, потому что нет неправильного решения. Что работает, работает .. Но я настоятельно рекомендую не позволять базе данных обрабатывать логику приложения.

Итак, внутри диспетчера уведомлений вы можете сделать что-то вроде этого:

За add метод notificationAdapter может быть необработанной командой вставки mysql. Использование этой абстракции адаптера позволяет легко переключаться с mysql на базу данных на основе документов, например mongodb что имело бы смысл для системы уведомлений.

В isDoublicate метод на notificationAdapter следует просто проверить, есть ли уже уведомление с таким же recipient , sender , type и reference .

Я не могу достаточно указать, что это только пример. (Также мне действительно нужно сократить следующие шаги, этот пост становится смехотворно длинным -.-)

Предположим, у вас есть какой-то контроллер с действием, когда учитель загружает домашнее задание:

Создает уведомление для каждого ученика учителя, когда он загружает новое домашнее задание.

Чтение уведомлений

Теперь самое сложное. Проблема с группировкой на стороне PHP заключается в том, что вам придется загрузить все уведомления текущего пользователя для их правильной группировки. Это было бы плохо, ну, если бы у вас было всего несколько пользователей, это, вероятно, все равно не было бы проблемой, но это не делает это хорошо.

Вы, вероятно, не читали текст ниже, поэтому позвольте мне продолжить отрывок:

Теперь вы знаете, какие уведомления должны быть для данного пользователя и сколько уведомлений содержит группа.

А теперь дерьмовая часть. Я все еще не мог найти лучшего способа выбрать ограниченное количество уведомлений для каждой группы без выполнения запроса для каждой группы. Все предложения здесь очень приветствуются.

Я делаю что-то вроде:

Я продолжу предполагать, что notificationAdapter s get метод реализует эту группировку и возвращает такой массив:

Потому что у нас всегда есть хотя бы одно уведомление в нашей группе, и наш заказ предпочитает Непрочитанный и Новый уведомления, мы можем просто использовать первое уведомление в качестве образца для рендеринга.

Итак, чтобы иметь возможность работать с этими сгруппированными уведомлениями, нам нужен новый объект:

И, наконец, мы можем собрать большую часть материала воедино. Вот как функция get на NotificationManager может выглядеть так:

И наконец, внутри возможного действия контроллера:

Добавьте в уведомление переменную прочитанного / непрочитанного. Затем вы можете извлекать только непрочитанные уведомления, выполнив . WHERE status = 'UNREAD' в вашем sql.

  • Столбец прочитано / непрочитано установит, что уведомление будет прочитано для всех пользователей, а не только для того, кто его видел, обратите внимание, что я установил уведомление, нацеленное на весь класс, а затем при получении я получаю уведомления, которые находятся в классе, к которому я имею отношение.
  • ах, вам нужно будет включить новый столбец для идентификации разных пользователей . student_id кажется подходящим
  • тогда норификация будет нацелена на студента, а не на весь класс, ну, я думаю, я буду hv, чтобы создать новую таблицу для связанного студента с уведомлением и установить флаг чтения . но если это так, тогда может быть даже лучше просто вставить строку для каждого ученика: /, я запутался
  • Что ж, студент - это часть класса. ваша система должна будет генерировать уведомление для каждого ученика в этом классе

Вы можете решить проблему, создав таблицу NotificationsRead, содержащую идентификатор пользователя и идентификатор уведомления, которое пользователь хотел отметить как прочитанное. (Таким образом, вы можете держать каждого ученика и учителя отдельно.) Затем вы можете присоединить эту таблицу к своей таблице уведомлений, и вы будете знать, следует ли считать ее старой или новой.

Я также предлагаю вам не хранить весь текст, который вы хотите отобразить, вместо этого хранить необходимую информацию, например: from_id, class_id, type, name и т. Д. - таким образом вы можете легче менять механизмы позже, если вам нужно, и вы нужно хранить меньше.

Для тех, кто ищет способ не использовать приложение, вы можете использовать обычный PHP и MySQL без использования приложения. Добавив домашнее задание, вы можете добавить уведомление. (да, я знаю, что это открыто для SQL-инъекций, но я использую обычный MySQL для простоты) SQL, когда кто-то добавляет домашнее задание:

Затем вы можете проверить, не прочитано ли уведомление:

Наконец, вы можете повторить уведомление, если оно правда.

Затем вы просто следуете той же схеме повторения строк следующим образом:

Затем для получения количества уведомлений:

Используя PHP, вы можете отображать две переменные, $ num_count и $ num_count_hw.

Читайте также: