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

Строительство своего стартапа: Настройка вида совещания

by
Difficulty:IntermediateLength:LongLanguages:

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

Final product image
What You'll Be Creating

Вступление

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

Почему разрыв в этой серии?

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

Из чего будет состоять эта часть?

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

Весь код для планировщика собраний записывается в рамках Yii2 для PHP, который имеет встроенную поддержку для I18n. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2 в Envato Tuts+.

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

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

Требования к просмотру совещаний

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

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

Краткая информация о пользовательском опыте

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

Просмотр текущего совещания

Вот посмотрите на существующее совещание, которое видит создатель (или владелец):

Customizing Meeting View - The Existing Codes Meeting View

Кнопка Send отправляет приглашение на совещание с текущими открытыми вариантами для участников, чтобы они имели возможность для обратной связи. Флажки ниже You и Them  позволяют зрителю выражать свое мнение о месте (местах) и времени. Выбор флажков позволяет зрителю определить окончательное место и точное время. Finalize кнопка ставит совещание по расписанию с выбранным местом и временем.

Разумеется, по мере созревания продукта мы хотим улучшить работу пользователя несколькими способами и много проделывать улучшений, но вот несколько функциональных элементов, которые мы хотели бы изменить для участников:

  • Кнопка Send не понадобится после того, как владелец отправит приглашение.
  • Участникам может быть разрешено или не разрешено дорабатывать окончательные варианты встречи.
  • Участники не смогут редактировать (значок карандаша) текст деталей встречи.
  • Участники не смогут добавлять людей в это время (для нашего MVP).
  • Участникам разрешается или не разрешается добавлять Места (плюс значок).
  • Участникам разрешается или не разрешается добавлять Dates & Times (плюс значок).
  • На панели Places и Dates & Times мы хотим показать текущие варианты просмотра в столбце You и данные другого человека в Them.
  • На панели Places и Dates & Times участники могут или не могут выбрать конечное местоположение и время.

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

Что нужно для реализации

Если вы следуете вместе с кодом, обновления, описанным здесь, то они включены в этот выпуск на GitHub.

Кто сейчас в курсе?

Yii Framework предоставляет текущую user_id для зрителя здесь:

Модель встречи имеет свойство $owner_id и функцию isOwner, чтобы определить, действительно ли текущий зритель является создателем собрания. Если нет, зритель будет условно меньше контролировать встречу.

Я создал пару вспомогательных функций в модели встречи, чтобы сделать это быстрее:

Они настраивают свойства $owner_id и $viewer в модели встречи.

Создание настроек встречи

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

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

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

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

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

  • Разрешить участникам добавлять места.
  • Разрешить участникам добавление даты и времени.
  • Разрешить участникам выбирать места.
  • Разрешить участникам выбрать даты и время.
  • Разрешить участникам завершить подготовку совещания.

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

Сначала мы создадим миграцию настроек встречи:

Это создает файл миграции, который нам нужен для написания кода, который строит таблицу базы данных в соответствии с нашей схемой:

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

Затем мы рекомендуем Yii выполнить миграцию и создать таблицу:

Наш внешний ключ создает связь между таблицей собрания и таблицей MeetingSetting.

Затем мы будем использовать Gii Yii для автоматического создания кода для просмотра и обновления настроек. Чтобы начать, я возвращаюсь к http://localhost:8888/mp/index.php/gii/. Мы начнем с создания модели:

Customizing Meeting View - Yiis Gii Model Generator for Meeting Setting

Затем мы создадим код Create, Read, Update, Delete (CRUD):

Customizing Meeting View - The Gii CRUD Generator

Поскольку нам не нужен весь этот код прямо сейчас, Gii позволяет нам выбирать только те функции, которые нам нужны: controllerview, _form и update:

Customizing Meeting View - Manually limiting files to overwrite

Gii показывает вам список файлов, которые он создает с каждым шагом:

Customizing Meeting View - List of generated files by Gii

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

Расширение пользовательских настроек

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

Вот колонки, которые нам нужно добавить:

Затем мы будем запускать миграции:

Вместо того, чтобы принудительно перезаписать нашу модель UserSetting.php с помощью Gii, мы будем использовать опцию Gii diff:

Customizing Meeting View - Using Giis diff rather than overwriting

И оттуда мы отберем новые дополнения к файлу и вставим их в:

Customizing Meeting View - Diff view to copy and paste necessary changes

Функционально мы добавим вкладку настроек встречи на страницу свойств Update Your Settings:

Customizing Meeting View - User settings with the existing two tabs

Мы добавим следующий код в /frontend/views/user-setting/_form.php для поддержки наших новых свойств:

Вот последняя форма:

Customizing Meeting View - User settings with meeting preferences

Инициализация новых заседаний

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

С встреча настройки на месте, мы готовы перейти к тому, что фактически основная часть сегодняшней работы, Настройка представлений совещание для владельца и участника.

Просмотр представления создателя собрания

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

Customizing Meeting View - The Current Meeting View

Панель команд

Прежде чем Send и Finalize работу, необходимо пригласить человека и хотя бы одно место и время. Если есть более одного места и времени, необходимо выбрать место для собрания.

Кнопки Cancel (значок «X») и Edit (значок карандаша) также включены для создателей.

Люди

Для MVP мы сначала ограничиваем приглашения на встречу одному участнику. Итак, как только человек был приглашен, кнопка Add (плюс) отключена.

Места, Даты и Время

Создатель может добавлять Места, дату и время до максимума нашего сайта (например, семь на собрание), и они могут указывать их доступность и принятию. И, наконец, когда их более одного, они могут выбрать, какое место и время будут использовать.

Примечание

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

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

Вот пример встречи с двумя возможными временами. Кнопка Finalize не может быть включена до тех пор, пока не будет выбрано одно время:

Customizing Meeting View - Another Meeting View Scenario

Как только выбор сделан, мы хотели бы включить кнопку Finalize через AJAX, избавив пользователя от обновления страницы.

Обзор мнения участника

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

Customizing Meeting View - The Participant View

Участник может отменить (значок X) их участие в собрании, и они могут указать, подходят ли места и время для них, но они не могут выбрать последнее место или завершить встречу. Кроме того, данные в столбцах You и Them теперь переключаются. И панель участника скрыта, поскольку она не нужна.

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

Customizing Meeting View - The Participant View with Participant Choice

Поскольку есть только одно место, Herkimer Coffee, нет необходимости в выборе местности. Но, когда есть два возможных времени, теперь вы можете увидеть Choose настройки. Тем не менее, кнопка Finalize отсутствует.

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

Кодирование требований к собранию

Применение параметров совещания

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

Мы проверяем параметры участника и передаем их в качестве параметра в последующее представление _list.php, которое выглядит следующим образом:

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

Customizing Meeting View - The Choice Selector for Dates Times

Может ли зритель отправить и завершить встречу

Я создал функции canSend() и canFinalize(), которые поддерживают общий код и запросы AJAX для определения активного состояния кнопок «Отправить» и «Завершить».

Здесь canSend():

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

Вот canFinalize():

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

В основном, когда будут внесены изменения, вы увидите, как изменились состояния кнопок Send и Finalize:

Customizing Meeting View - The Command Bar with Send and Finalize

В собрании view.php я встроил JavaScript для поддержки AJAX-обновлений состояния кнопок Send и Finalize, когда пользователи меняют настройки для своей встречи. Когда вы выбираете место и время, вызывается refreshSend() и refreshFinalize(), и кнопки соответствующим образом изменяются:

Реверсирование селекторов состояния места и времени

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

Customizing Meeting View - The You and Them Columns for Selection Data

Чтобы поддерживать отображение разных данных в столбцах You и Them в представлении собрания для «Время и места», необходимо обновить файлы собрание-время и собрания-место _list.php для динамического определения отображаемых данных:

На данный момент я помещал эти функции в представление _panel.php, которое вызывает _list.php, поскольку они полагаются на включение виджета SwitchInput в контексте:

Предстоящие корректировки

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

Что дальше?

С настройками встречи и требованиями к представлению для организаторов и участников, я готов перейти к отправке первого приглашения. В следующем эпизоде ​​будет рассмотрен вопрос об отправке приглашения участнику и реализации внешнего вида контента, функциональных командных ссылок в электронной почте и управления разрешениями для пользователей, которые еще не зарегистрировались. Следите за предстоящими уроками в нашем Building Your Startup с помощью серии PHP - это захватывает!

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

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

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.