Как создать свой чат. Общение между сотрудниками в офисе. MyChat — лучший чат для офиса. Отображение формы входа

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

Инструкция
  • Для создания чата для начала выберите сайт, который предоставляет услуги бесплатной регистрации чата. В интернете сейчас есть масса таких ресурсов, например, http://cbox.ws/getone.php. Перед тем как создать свой чат, придумайте для него название, которое бы заинтересовало пользователей и было бы не занятым на ресурсе, который вы выбрали.
  • Пройдите процедуру регистрации на ресурсе. Для этого нужно выбрать команду «создать свой чат» или «регистрация» (sign up) и заполнить поля формы. В первую очередь, это название для вашего чата - оно будет подставлено перед именем ресурса, предоставляющего услугу регистрации.
  • Заполните поле «адрес электронной почты» (Email address). Адрес электронной почты нужен для активации вашего чата. На него придет специальное письмо, в котором вам будет предложено перейти по ссылке, чтобы подтвердить создание чата.
  • Далее внесите в поле пароль для вашего чата. С его помощью вы будете заходить как его администратор и управлять им. Поле «пароль» (Password) заполняется дважды для того, чтобы избежать ошибок.
  • Выберите язык вашего чата и стиль. Разные ресурсы предлагают различные стили оформления. Так что вы можете сделать свой чат и оформить его по своему вкусу. Обязательно поставьте галочку в поле «Ознакомлен с правилами». Далее, когда все поля заполнены, нажмите кнопку «зарегистрироваться» или «создать чат» (create my chat).
  • После регистрации зайдите в систему под своим логином и паролем и выберите панель управления чатом. Она содержит множество инструментов управления, например, выбор шаблона чата, управление дизайном, модерацией и пользователями (удаление и добавление, переименование). Чтобы сделать свой чат, мало его зарегистрировать. Вам понадобится базовое знание языка Html, чтобы настроить внешний вид чата по своему усмотрению.
  • Прежде чем создать чат для сайта, нужно понимать, что голосовые и текстовые вебчаты – важная особенность для интернет-проектов. Такой способ обеспечивает общение посетителей через интернет при помощи браузера. Этот способ реализован на веб-архитектуре клиента и Клиентский браузер является программой, которая запрашивает и принимает обратную информацию от сервера. Сервер работает на отдельном адресе, он принимает, хранит и отсылает информацию по запросу. Связь клиента с хостом сервера происходит по сетевому протоколу.

    Стандартные чаты устанавливаются пользователю на компьютер в виде программ. Второй вариант — интернет-чаты (общение в онлайн-интерфейсе).

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

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

    Делаем чат с помощью кода

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

    Собственноручный, с помощью HTML. Это обычный документ, включающий библиотеки, таблицы стилей и скрипты JavaScript. Ниже представлен готовый код мини-чата:

    Используя JavaScript определим данный код внутри ul-элемента . Если нажать на “Write a message”, то выскакивает форма для сообщения. Вставляем код на станицу сайта.

    Специальные программы
  • Для примера можно взять ресурс, специализирующийся на создании чатов — Chatadelic.net (является частично платным). Проходим регистрацию и жмем на «Создать чат». После чего, придумываем название для чата, вписываем адрес блога, куда собираемся установить. Далее будет сгенерирован HTML-код, который и нужно поставить на страницы сайта.
  • Ознакомьтесь с сервисом, внимательно разберитесь с функциями в данном окне. Изучите инструкцию и оцените масштабы работы этим инструментом. Далее, настройте чат по Вашему желанию, поскольку здесь большое количество разных опций и каждый сможет персонализировать свой чат именно под себя.
  • Преимущества:
    • Можно администрировать и модерировать.
    • Звуковое сопровождение событий чата.
    • Подключение языка JavaScript.
    • Свои фоны и CSS-стили.
    • Обмен видео, ссылками, картинками.
    • Фильтрация нецензурной лексики.
    • Возможность ограничить скорость отправки сообщений.
    • Блокировка неугодных пользователей.
    • Статистика работы.
    • Интеграция в сайт.
    Сторонний софт

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

    • Redhelper — мощная система онлайн-консультирования и отличная бесплатная альтернатива на тарифе для некоммерческого использования. Установка простая и понятная — готовый код нужно загрузить на сайт аналогично счетчикам посещаемости и метрики. Зарегистрироваться и посмотреть функции можно на официальном сайте .
    • Siteheart (SiteHeart.com/ru/price)— современный и удобный инструмент, предлагает массу полезных решений, в том числе и установку приложений для работы через смартфон, а так же виджеты и расширения, ознакомиться можно на официальном сайте или скачать на других ресурсах.
    Где разумнее установить чат?

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

    Important!

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

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

    Для реализации функционала видео-чата в браузере существует две наиболее подходящие из технологии - WebRTC и Flash. Каждая из технологий обладает рядом своих особенностей, например, во Flash можно использовать видео кодеки H.264 или Sorenson, а в WebRTC на текущий момент доступен VP8, что делает два этих подхода плохо совместимыми друг с другом (перекодирование видео на лету - это очень затратная операция), к тому же видео-чат лучше делать peer-to-peer по возможности, стоит ли говорить, что соединить Flash и WebRTC напрямую не выйдет. В нашем примере мы рассмотрим вариант видео-звонка звонка из WebRTC в WebRTC, с помощью платформы VoxImplant . В целом, можно сделать выбор конкретного варианта, вплоть до динамического выбора технологии в зависимости от того кому звоним. Подробности, как обычно, под катом.

    Создание приложения, пользователей, сценария и настройка Для начала нам потребуется аккаунт разработчика VoxImplant (), после входа в панель управления VoxImplant в разделе Applications создаем новое приложение и называем его videochat. Чтобы организовать простой видео-чат нам потребуется хотя бы 2 пользователя - testuser1 и testuser2, создаем их в разделе Users и привязываем к приложению, используя кнопку Assign applications (аналогично можно уже созданных юзеров привязать к приложению во время редактирования приложения). При звонке от пользователя к пользователю все равно вызывается сценарий обработки звонка, который пишутся на Javascript и выполняется движком VoxEngine . Создаем в разделе Scenarios новый сценарий, назовем его User2User, при использовании режима peer-to-peer сценарий будет выглядеть следующим образом:
    VoxEngine.forwardCallToUserDirect();
    Если в будущем захочется гонять видео через сервер (принудительно), то можно использовать VoxEngine.forwardCallToUser(null, true); , но в этом случае звонки будут стоить денег.

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

    Var call1, call2; VoxEngine.addEventListener(AppEvents.CallAlerting, function(e) { call1 = e.call; call2 = VoxEngine.callUserDirect(e.call, e.destination, e.displayName, e.headers); call2.addEventListener(CallEvents.Connected, handleCallConnected); }); function handleCallConnected(e) { call1.answerDirect(call2); // Тут можно, например, разъединить звонок через какое-то время setTimeout(VoxEngine.terminate, 5000); }

    После создания сценария нам нужно привязать его к приложению через правило (Rule) - идем в раздел Applications и редактируем наше приложение, в табе Rules создаем новое правило (Add rule). Назвать можно как угодно, например, Intercom, в Pattern указывается регулярное выражение - правило срабатывает если номер соот-вует этому выражению, оставляем.* и перетаскиваем наш сценарий User2User из Available в Assigned и сохраняем правило. Сохраняем приложение, остается только сделать клиент с помощью VoxImplant Web SDK .

    Создание веб-клиента Для клиента потребуется только файл voximplant.min.js, который лежит на cdn, а также базовое понимание как устроено Web SDK. Чтобы все выглядело все более-менее прилично можно использовать Bootstrap. Не вижу смысла вываливать сюда весь код из HTML-файла, разберем только основные моменты, а более глубоко разобраться всегда можно, скачав файлы с нашей странички на GitHub .

    // Подключаем SDK //функция для выведения лога сразу в HTML function log(str) { document.getElementById("log").innerHTML += str+"
    "; } // Создаем инстанс VoxImplant var voxAPI = VoxImplant.getInstance(); // Вешаем обработчики событий voxAPI.on(VoxImplant.Events.SDKReady, onSdkReady); voxAPI.on(VoxImplant.Events.ConnectionEstablished, onConnectionEstablished); voxAPI.on(VoxImplant.Events.ConnectionFailed, onConnectionFailed); voxAPI.on(VoxImplant.Events.ConnectionClosed, onConnectionClosed); voxAPI.on(VoxImplant.Events.AuthResult, onAuthResult); voxAPI.v(VoxImplant.Events.IncomingCall, onIncomingCall); voxAPI.on(VoxImplant.Events.MicAccessResult, onMicAccessResult); // Инициализуем SDK try { voxAPI.init({ micRequired: true, // запрос доступа к микрофону/камере до подключения к VoxImplant videoSupport: true // включить поддержку видео }); } catch(e) { // если произошла ошибка инициализации, то выводим ее log(e.message); } // Теперь можно пользоваться SDK - подключаемся function onSdkReady(){ voxAPI.connect(); // после вызова появится диалог доступа к камере/микрофону } // Обрабатываем function onMicAccessResult(e) { if (e.result) { // разрешили доступ к камере/микрофону } else { // запретили доступ к камере/микрофону } } // Установили соединение с VoxImplant function onConnectionEstablished() { // Можно авторизоваться - тут надо показать диалог для ввода данных, а потом вызвать следующую функцию // Замените application_user, application_name, account_name и application_user_password на ваши данные для тестирования voxAPI.login(application_user+"@"+application_name+"."+account_name+".voximplant.com", application_user_password); } // Не смогли подключиться к VoxImplant function onConnectionFailed() { // Или веб-сокеты не подключились или UDP закрыто } // Закрылось соединение function onConnectionClosed() { // Можно вызвать connect по новой для переподключения } function onAuthResult(e) { if (e.result) { // авторизовались - теперь можно звонить или принимать звонки } else { // ошибка авторизации, можно посмотреть e.code, чтобы понять что не так } } var currentCall = null; // текущий звонок // Входящий звонок function onIncomingCall(e) { currentCall = e.call; // Вешаем обработчики currentCall.on(VoxImplant.CallEvents.Connected, onCallConnected); currentCall.on(VoxImplant.CallEvents.Disconnected, onCallDisconnected); currentCall.on(VoxImplant.CallEvents.Failed, onCallFailed); // Отвечаем на звонок автоматически. В нормальном приложении лучше показать инфо о входящем звонке и дать возможность принять или отбить. currentCall.answer(null, {}, { receiveVideo: true, sendVideo: true }); } // Функция для исходящего звонка function createCall() { // application_username - имя юзера, которому звонит (по видео) currentCall = voxAPI.call(application_username, { receiveVideo: true, sendVideo: true }, "TEST CUSTOM DATA", {"X-DirectCall": "true"}); // Вешаем обработчики currentCall.on(VoxImplant.CallEvents.Connected, onCallConnected); currentCall.on(VoxImplant.CallEvents.Disconnected, onCallDisconnected); currentCall.on(VoxImplant.CallEvents.Failed, onCallFailed); } // Звонок соединился function onCallConnected(e) { // Включаем отправку видео и показываем входящее видео voxAPI.sendVideo(true); currentCall.showRemoteVideo(true); } // Звонок завершился function onCallDisconnected(e) { currentCall = null; } // Ошибка при звонке function onCallFailed(e) { // Код ошибки e.code, описание ошибки e.reason }

    Вот собственно все основные функции и эвенты, которые нам нужны. Естественно, это голый JS, к этому нужно прикрутить стили и верстку. Вариант, который мы выложили на GitHub выглядит так:

    В случае если нужна поддержка и Flash и WebRTC придется переключать клиентское приложение в соответствующий режим, потому что видео-звонки WebRTCFlash мы реализовывать не стали. Надеемся, что в ближайшем будущем поддержка WebRTC появится в IE12, а за ним и в Safari. Если у вам нужен вариант «звонок с сайта оператору», то можно сделать 2 операторских приложения, одно с использованием WebRTC, другое с использованием Flash, и направлять звонки с сайта в зависимости от того какой режим SDK включится у посетителя сайта или на одного или на другого оператора.

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

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

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

    Создаем чат

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

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

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

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

    Настраиваем чат

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

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

    Как вы могли заметить, напоследок осталась всего лишь одна ссылка «Настройки» . Кликнув на нее, вы перейдете к окну активации диалога с единственной говорящей за себя кнопкой.

    После активации чата произойдет автоматическое перенаправление в данное приложение.

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

  • С правой стороны от основной области находится список участников и две кнопки для управления приложением.
  • Кликнув по кнопке «Уголок админа» , вам будет представлена максимально детальная инструкция по управлению чатом.
  • Открыв «Настройки чата» , вам будут представлены дополнительные четыре вкладки настроек.
  • Пункт «Общие настройки» полностью оправдывает свое наименование, так как в этом разделе располагаются исключительно основные параметры, например, видимость. Кроме того, именно тут вам предоставляет возможность добавить ссылку на видеотрансляцию, а также специализированный текст, коим может выступать краткий свод правил поведения в данном чате.
  • Следующий раздел «Руководители» позволяет вам предоставить какому-либо участнику права руководителя, путем введения ссылки на его страницу.
  • Пункт настроек «Черный список» позволяет сделать тоже самое, что и одноименная функция социальной сети, то есть, занести какого-либо пользователя, даже если этот человек соответствует требованиям посещения чата или является руководителем, в список исключений.
  • Завершающий, четвертый раздел параметров мультидиалога является наиболее примечательным, так как именно здесь вы можете активировать уникальную возможность приложения – автоматический фильтр нецензурных выражений. Также вам предоставляется возможность установить параметры обработки ссылок, отправленных через форму сообщения.
  • Помимо всего названного, обратите внимание на центральную надпись в пустом центральном окне. Кликните по ссылке «Рассказать о чате в сообществе» , чтобы оставить прямой адрес вашего мультидиалога на стене группы.
  • На этом моменте ознакомление с настройками и процесс выставления комфортабельных параметров, можно считать законченными. При использовании данного приложения не забывайте, что исключительно руководитель сообщества имеет доступ ко всем возможностям.

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

    Введение

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

    Шаг 1: HTML разметка

    Мы начнем этот урок с создания нашего первого файла index.php.

    Chat - Customer Module

    Welcome,

    Exit Chat

    • Мы начнем наш html с обычных DOCTYPE, html, head, и body тагов. В таг head мы добавим наш заголовок и ссылку на нашу таблицу стилей css (style.css).
    • Внутри тага body, мы структурируем наш макет внутри блока - обертки #wrapper div. У нас будет три главных блока: простое меню, окно чата и поле ввода нашего сообщения; каждый со своим соответствующим div и id.
      • Блок меню #menu div будет состоять из двух абзацев. Первый будет приветствием пользователю и поплывет налево, а второй будет ссылкой на выход и поплывет направо. Мы также включим блок div для очистки элементов.
      • Блок чата #chatbox div будет содержать лог нашего чата. Мы будем загружать наш лог из внешнего файла с использованием ajax-запроса jQuery.
      • Последним пунктом в нашем блоке-обертке #wrapper div будет наша форма, которая будет включать в себя текстовое поле ввода для сообщения пользователя и кнопку отправки.
    • Мы добавляем наши скрипты последними, чтобы грузить страницу быстрее. Сначала мы вставим ссылку Google jQuery CDN, так как в этом уроке мы будем использовать библиотеку jQuery. Наш второй таг скрипта будет там, где мы будем работать. Мы загрузим весь наш код после того, как документ будет готов.
    Шаг 2: Создание стиля CSS

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

    /* CSS Document */ body { font:12px arial; color: #222; text-align:center; padding:35px; } form, p, span { margin:0; padding:0; } input { font:12px arial; } a { color:#0000FF; text-decoration:none; } a:hover { text-decoration:underline; } #wrapper, #loginform { margin:0 auto; padding-bottom:25px; background:#EBF4FB; width:504px; border:1px solid #ACD8F0; } #loginform { padding-top:18px; } #loginform p { margin: 5px; } #chatbox { text-align:left; margin:0 auto; margin-bottom:25px; padding:10px; background:#fff; height:270px; width:430px; border:1px solid #ACD8F0; overflow:auto; } #usermsg { width:395px; border:1px solid #ACD8F0; } #submit { width: 60px; } .error { color: #ff0000; } #menu { padding:12.5px 25px 12.5px 25px; } .welcome { float:left; } .logout { float:right; } .msgln { margin:0 0 2px 0; }

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

    Как вы можете видеть выше, мы закончили строить пользовательский интерфейс чата.

    Шаг 3: Используем PHP, чтобы создать форму входа.

    Теперь мы реализуем простую форму, которая будет спрашивать у пользователя его имя, перед тем, как пустить его дальше.

    Функция loginForm(), которую мы создали, состоит из простой формы входа, которая спрашивает у пользователя его/ее имя. Затем мы используем конструкцию if else, чтобы проверить, ввел ли пользователь имя. Если человек ввел имя, мы устанавливаем его, как $_SESSION["имя"]. Так как мы используем сессию, основанную на cookie, чтобы хранить имя, мы должны вызвать session_start() перед тем, как что-нибудь выводить в браузер.

    Есть одна вещь, на которую вы возможно захотите обратить особое внимание - то, что мы использовали функцию htmlspecialchars(), которая конвертирует специальные символы в HTML сущности, тем самым защищая имя переменной, чтобы оно не стало жертвой межсайтового скриптинга (XSS). Мы также добавим эту функцию позже к текстовой переменной, которая будет опубликована в логе чата.

    Отображение формы входа

    Для того, чтобы показать форму логина в случае, если пользователь не вошел в систему, и следовательно, не сессия не создалась, мы используем другую инструкцию if else вокруг блока-обертки #wrapper div и тагов скрипта в нашем исходном коде. В противоположном случае, если пользователь вошел в систему и создал сессию, этот код спрячет форму входа и покажет окно чата.

    Welcome,

    Exit Chat

    // jQuery Document $(document).ready(function(){ });

    Приветствие и меню выхода из системы

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

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

    Welcome,

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

    // jQuery Document $(document).ready(function(){ //If user wants to end session $("#exit").click(function(){ var exit = confirm("Are you sure you want to end the session?"); if(exit==true){window.location = "index.php?logout=true";} }); });

    Код jquery, приведенный выше просто показывает диалог подтверждения, если пользователь кликнет по ссылке выхода #exit. Если пользователь подтвердит выход, тем самым решив закончить сессию, мы отправим его в index.php?logout=true. Это просто создаст переменную с именем logout со значением true. Мы должны перехватить эту переменную с помощью PHP:

    If(isset($_GET["logout"])){ //Simple exit message $fp = fopen("log.html", "a"); fwrite($fp, "User ". $_SESSION["name"] ." has left the chat session.
    "); fclose($fp); session_destroy(); header("Location: index.php"); //Redirect the user }

    Теперь мы увидим, существует ли get переменная "logout", используя функцию isset(). Если переменная была передана через url, такой, как ссылка, упомянутая выше, мы переходим к завершению сессии пользователя с текущим именем.

    Перед уничтожением сессии пользователя с текущим именем с помощью функции session_destroy() мы хотим выводить простое сообщение о выходе в лог чата. В нем будет сказано, что пользователь покинул сессию чата. Мы сделаем это, используя функции fopen(), fwrite() и fclose(), чтобы манипулировать нашим файлом log.html, который, как мы увидим позднее, будет создан в качестве лога нашего чата. Пожалуйста, обратите внимание, что мы добавили класс "msgln" в блок div. Мы уж определили стиль css для этого блока.

    Проделав это, мы уничтожаем сессию и перенаправляем пользователя на ту же страницу, где появится форма входа в систему.

    Шаг 4: Поддержка пользовательского ввода данных

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

    jQuery

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

    //If user submits the form $("#submitmsg").click(function(){ var clientmsg = $("#usermsg").val(); $.post("post.php", {text: clientmsg}); $("#usermsg").attr("value", ""); return false; });

  • Перед тем, как мы что-то начнем делать, мы должны захватить пользовательский ввод, или то, что он напечатал в поток ввода #submitmsg. Этого можно достигнуть функцией val(), которая берет значение, установленное в поле формы. Теперь мы сохраняем это значение в переменную clientmsg.
  • Вот и наступает самая важная часть: запрос jQuery post. Она отправляет запрос POST в файл post.php, который мы создадим через мгновение. Он отправляет ввод клиента, или то, что было сохранено в переменную clientmsg.
  • В конце мы очищаем ввод #usermsg, очищая атрибут значения.
  • Пожалуйста обратите внимание, что код, указанный выше, пойдет в наш таг скрипта, где мы поместили jQuery код выхода из системы.

    PHP - post.php

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

  • Прежде чем мы что-либо сделаем, мы должны начать файл post.php с помощью функции session_start(), так как мы будем использовать сессию по имени пользователя в этом файле.
  • Используя логическую isset, мы проверим, существует ли сессия для "name", перед тем, как что-то делать дальше.
  • Теперь мы захватим данные POST, которые jQuery послал в этот файл. Мы сохраним эти данные в переменную $text.
  • Эти данные, так же, как и вообще все данные, вводимые пользователем, будут храниться в файле log.html. Чтобы сделать это, мы откроем файл в режиме "a" функции fopen, который согласно php.net открывает файл только для записи; помещает указатель файла на конец файла. Если файл не существует, попытаемся создать его. Затем мы запишем наше сообщение в файл, используя функцию fwrite().
    • Сообщение, которое мы будем записывать, будет заключено внутри блока.msgln div. Он будет содержать дату и время, сгенерированную функцией date(), сессию имени пользователя и текст, которые также будет окружен функцией htmlspecialchars(), чтобы избежать XSS.

    И наконец, мы закрываем наш файл с помощью fclose().

  • Шаг 5: Отображение содержимого лога чата (log.html)

    Все, что пользователь разместил, обработано и опубликовано с помощью jQuery; оно записано в лог чата с помощью PHP. Единственное, что осталось сделать - это показать обновленный лог чата пользователю.

    Чтобы сэкономить нам немного времени, мы предварительно загрузим лог чата в блок #chatbox div, как если бы он что-то содержал.

    Мы используем процедуру, похожую на ту, что мы использовали в файле post.php, но на этот раз мы только читаем и выводим содержимое файла.

    Запрос jQuery.ajax

    Запрос ajax - это ядро всего, что мы делаем. Этот запрос не только позволяет нам посылать и принимать данные через форму без обновления страницы, но также и позволяет нам обрабатывать запрошенные данные.

    //Load the file containing the chat log function loadLog(){ $.ajax({ url: "log.html", cache: false, success: function(html){ $("#chatbox").html(html); //Insert chat log into the #chatbox div }, }); }

    Мы завернем наш ajax запрос в функцию. Вы увидите, зачем, прямо сейчас. Как вы можете видеть выше, мы использовали только три из объектов запроса jQuery ajax.

    • url : Строка URL для запроса. Мы используем имя файла лога нашего чата log.html.
    • cache : Это предотвратит кэширование нашего файла. Это обеспечит нам то, что всегда, когда мы посылаем запрос, мы будем иметь обновленный лог чата.
    • sucess : Это позволит нам прикрепить функцию, которая передаст запрошенные нами данные.

    Как вы видите, затем мы перемещаем запрошенные нами данные (html) в блок #chatbox div.

    Автопрокрутка

    Как мы, возможно, видели в других приложениях чатов, содержимое автоматически прокручивается вниз, если контейнер лога чата (#chatbox) переполняется. Мы воплотим простую и похожую возможность, которая будет сравнивать высоту полосы прокрутки контейнера до и после того, как мы выполним ajax запрос. Если высота полосы прокрутки стала больше после запроса, мы используем эффект анимации jQuery, чтобы прокрутить блок #chatbox div.

    //Load the file containing the chat log function loadLog(){ var oldscrollHeight = $("#chatbox").attr("scrollHeight") - 20; //Scroll height before the request $.ajax({ url: "log.html", cache: false, success: function(html){ $("#chatbox").html(html); //Insert chat log into the #chatbox div //Auto-scroll var newscrollHeight = $("#chatbox").attr("scrollHeight") - 20; //Scroll height after the request if(newscrollHeight > oldscrollHeight){ $("#chatbox").animate({ scrollTop: newscrollHeight }, "normal"); //Autoscroll to bottom of div } }, }); }

    • Сначала мы сохраним высоту полосы прокрутки блока #chatbox div в переменную oldscrollHeight перед выполнением запроса.
    • После того, как наш запрос вернет успех, мы сохраним высоту полосы прокрутки блока #chatbox div в переменную newscrollHeight.
    • Затем мы сравним высоту полосы прокрутки в обеих переменных, используя конструкцию if. Если newscrollHeight больше, чем oldscrollHeight, мы используем эффект анимации, чтобы прокрутить блок #chatbox div.
    Постоянное обновление лога чата

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

    SetInterval (loadLog, 2500); //Reload file every 2500 ms or x ms if you wish to change the second parameter

    Ответ на наш вопрос находится в функции setInterval. Эта функция будет запускать нашу функцию loadLog() каждые 2,5 секунды, которая будет запрашивать обновленный файл и делать автопрокрутку блока.

    Закончили

    Мы закончили! Я надеюсь, что вы изучили, как работает базовая система чата, и, если у вас есть какие-либо пожелания, я с радостью их приветствую. Это максимально простая система чата, которую вы можете создать как приложение чата. Вы можете оттолкнуться от нее и построить множественные чат комнаты, добавить админку, эмотиконы и т.д. Здесь ваш предел - это небо.

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

    • Защитите ваши формы ключами форм - избегайте XSS (межсайтового скриптинга) и подделок межсайтовых запросов.
    • Отправка формы без обновления страницы с использованием jQuery - расширьте наш ajax запрос
    • Как делать AJAX запросы на чистом Javascript - изучите, как работает кухня запросов на чистом javascript.
    • Следите за нами на