Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Пишем свой стартап: уведомление пользователей об изменениях в стречах

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Этот учебник является частью серии статей Пишем свой стартап на PHP на Envato Tuts +. В этой серии я направляю вас через запуск приложения от концепции до готового продукта, используя приложение Планировщик встреч в качестве реального приложения. На каждом шаге я делаю релиз кода планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете узнать что-то новое. Я также рассмотрю связанные с запуском бизнес-вопросы по мере их возникновения.

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

Если вы еще не опробовали Планировщик собраний, то обязательно запланируйте свою первую встречу. Я участвую в комментариях ниже, так что скажите мне, что вы думаете! Меня особенно интересует, если вы хотите предложить новые функции или темы для будущих учебников.

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

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

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

Meeting Planner Notifications - Meeting Planning Form

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

  • Эти дата и время подходят, а эти - нет.
  • Это место подходит, а другое - нет, давайте также рассмотрим это дополнительно.
  • Я выбираю это место и это время.
  • Добавьте примечание: «Я рад, что мы наконец собрались вместе».

После внесения изменений нам необходимо сообщить организатору.

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

Еще одна идея, о которой я думал, - избавиться от необходимости нажимать кнопку «Отправить», когда вы закончите внесение изменений. Во-первых, для этого потребуется некоторое обучение пользователей, чтобы заверить их, что мы отправим их изменения, когда они будут сделаны. Но нам также нужен был способ узнать, когда можно было бы отправить изменения организатору.

Как будут работать уведомления

Пересказывая и обобщая требования, вот как будут работать уведомления:

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

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

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

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

Создание журнала собрания

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

Давайте рассмотрим структуру модели MeetingLog. Вот миграция, создающая таблицу:

Основные элементы, которые мы записываем:

  • meeting_id сообщает нам, какую встречу мы отслеживаем.
  • action говорит нам, что было сделано.
  • actor_id сообщает нам, кто выполнил действие (например, user_id).
  • Перегруженный item_id может представлять собой время, место или примечание.
  • extra_id предназначен для записи другой информации в зависимости от действия.
  • created_at сообщает нам, когда действие было выполнено.

Затем я определил константы для всех действий, таких как ACTION_SUGGEST_PLACE или ACTION_ADD_NOTE и т.д.

Метод add упрощает функциональность внутри приложения для записи активности в MeetingLog:

Я также добавил два новых поля в таблицу Meeting: logged_at и cleared_at. Когда добавляются записи журнала, собрание обновляет отметку logged_at, показывающую момент последнего изменения собрания:

Например, всякий раз, когда кто-то добавляет новый параметр MeetingPlace, в журнал добавляется событие afterSave, а затем, конечно, также обновляется Meeting-> logged_at:

Время logged_at указывает нам, когда произошло последнее изменение. Время Meeting->cleared_at сообщит нам время, когда мы в последний раз делились обновлениями с участниками. Итак, если logged_at > cleared_at, мы знаем, что участники не полностью обновлены.

Создание краткого описания на английском языке

Meeting Planner Notifications - MeetingLog Planning History

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

Во-первых, я создал getMeetingLogCommand(), чтобы получить текстовое описание действия:

Затем я создал getMeetingLogItem(), который контекстно находит соответствующую метку объекта, на основе которой было выполнено действие. Здесь есть некоторые отладочные заметки:

Например, создание, редактирование, отмена, удаление собрания не требует информации о позиции, тогда как для принятия времени требуется определенный item_id, соответствующий дате и времени MeetingTimeChoice.

Предоставление визуальных подсказок

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

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

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

Meeting Planner Notifications - Refreshed Top of Page Flash Notification

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

Meeting Planner Notifications - Top of Section AJAX Flash Notification

В будущем мы не будем показывать эти уведомления опытным пользователям.

Итак, если человек вносит изменения в какое-то время или место, мы вызываем displayNotifier():

Этот код в /frontend/views/meeting/view.php гарантирует, что они не будут видеть оповещения повторно через сеанс. Он использует переменные сеанса для отслеживания того, была ли подсказка уже показана:

Что дальше?

Meeting Planner Notifications - The Initial Notification Email Template

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

Пока вы ждете, попробуйте функцию уведомлений и запланируйте первую встречу. Кроме того, я был бы признателен, если вы поделитесь своим опытом ниже в комментариях, меня всегда интересуют ваши предложения. Вы также можете связаться со мной в Twitter @reifman.

Следите за предстоящими учебными пособиями в разделе серии Пишем свой стартап на PHP. Есть еще несколько больших функций.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.