Шаг 1 – Построение дизайна HTML + CSS
Мы создадим простую страницу, на которой перечислены два материала, которые мы будем оценивать. Это значит, что нам необходимо найти картинки пяти звезд, чтобы иметь возможность оценки по 5 бальной шкале. Также нам необходимо вывести область максимально возможной оценки, ну и сам рейтинг материала с точностью до одного знака после запятой.
Давайте посмотрим на HTML и CSS кода системы оценок:
Следует отметить, что графики в HTML нет. Она присутствует в CSS коде. Мы используем HTML, только для примера, для создания рабочей среды, чтобы протестировать систему оценок. Давайте посмотрим CSS код:
Этот код CSS служит для нескольких вещей:
- Определяет место по умолчанию для каждой пустой звезды
- Устанавливает классы для заполненных (активных) звезд и классы для постоянных активных звезд. Далее поймете о чем я.
- Определяет стиль контейнера звезд.
Вы можете воспользоваться нашими исходниками или создать собственные. Только должны присутствовать изображения трех типов: пустая оценка, выполнена, подсвечивающая.
Далее мы добавим еще немного CSS кода, для позиционирования общего количества голосов и центрирования общего блока системы комментариев, но эта часть кода у каждого будет своей, так как вы будете монтировать систему в свой дизайн сайта.
Шаг 2 – Создаем интерактивность в интерфейсе
На данный момент, мы имеем просто набор звезд, которые при наведении в конкретную точку оценивания не реагируют ни на что. Это мы поправим с помощью jQuery.
Нашим первым делом будет создание обработчиков событий mouseoverи mouseout. Но, нужно чтобы выделялись текущая звезда и все предыдущие звезды.
Пользуясь методами prevAll() и NextAll(), получаем предыдущие и последующие звезды в реальном времени при наведении мыши на них. Выше предоставленный код добавляет и удаляет классы при наведении и отведении мыши от звезд, таким образом, подсвечивая их.
Что делает set_votes()?
Это функция, которая определяет, какие звезды должны быть залитыми до определенного уровня, а какие после этого пустые. Она получает данные с удаленного сервера.
Шаг 3 – Получение данных из сервера
Сейчас мы реализуем выделение текущего рейтинга оценок, а точнее сделаем красными звезды показывающие текущую позицию в рейтинге оценок. Чтобы это удалось нам необходимо получить данные из сервера и обработать их несколькими javascript функциями.
Это javascript код, который пишется в теле документа. Он выполняется сразу: посылает запрос к серверу и получает информацию для каждого из блоков рейтинга оценок.
В начале кода мы создаем объект out_data, который содержит информацию, которую мы посылаем на сервер. Также указываем наш PHP скрипт, который будет, исполнятся при запросе получения данных из сервера. Также указываем ID конкретного контейнера оценок, который позволяет серверной стороне знать какие данные необходимо выслать. Когда выполнится ответная функция на сервере, javascript получает объект, который выглядит таким образом:
Если внимательно посмотрите на код, то увидите, что мы берем этот объект (он хранится в переменной INFO) и что-то делаем с ним через метод data(). Этот метод позволяет связать произвольные данные с DOM объектом. В этом случае мы храним данные в div блоке каждого контейнера рейтинга оценок. Позже мы можем получить данные к ним таким образом:
После получения данных с сервера, передаем их у функцию set_votes(), о которой уже упоминалось ранее. Ниже код этой функции:
Первые три строчки, для компактности кода, они пишут данные в переменные.
7 строка: avg это целое число от 1 до 5, которое используется для заполнения звезд отображающих среднестатистическую оценку.
8 строка: по синтаксису схожа с 7 строкой, только в этом случае, мы заполняем остальные звезды графика.
9 строка: Обновляет информацию в сером блоке под рейтингом оценок, показывает общее количество голосов и более точную оценку конкретного материала.
Шаг 4 – Оцениваем материал
Последним шагом создания пользовательского интерфейса является предоставление возможности оценивания. Мы создадим обработчик событий нажатия на каждую из звезд. Этот обработчик щелчка, будет отвечать за отправку данных на сервер. Ниже код этого обработчика:
Этот код мы начинаем писать из создания некоторых переменных, не только для чистоты кода, но в этом случае, они используются внутри .post. Также в этих переменных, указывается какая звезда и из какого блока рейтинга оценок нажата. Далее, мы определяем данные для отправки на сервер (clicked_data): определяем какой класс стиля у звезды, он содержит порядковый номер звезды и само собой оценку пользователя, также получаем ID блока рейтинга оценок.
В конце обработчика, мы отсылаем данные на сервер. Серверная сторона приложения добавляет голос (оценку), и возвращает информацию в браузер, которая имеет обновленные данные. Эти данные выводятся с помощью функции set_votes().
Шаг 5 – PHP: создаем класс системы оценок
Мы создадим очень простой класс в PHP, который называется “Ratings”. Как вы уже догадались, он будет обрабатывать запросы в нашей системе скрипта оценок. Использование нашего класса будет примерно таким:
Далее мы создадим класс и конструктор:
В этом небольшом куске PHP кода, очень многое происходит, а точнее:
Строка 3: Устанавливаем путь к нашему txt файлу, в котором вы хотите хранить рейтинг оценок. Как уже упоминалось, мы не будем использовать базу данных. Если вам это необходима, вы с легкостью можете переписать код.
Строка 7: Конструктор. Создаем объект и сохраняем идентификатор конкретного блока рейтинга оценок.
Строка 11: Пробуем загрузить текстовый файл. Если файла не существует, это плохо, его необходимо создать и установить права доступа к нему, чтобы PHP мог считывать и записывать в него.
Строка 14: На этом участке получаем данные из файла и с помощью unserialize() мы преобразуем сложный PHP набор в текстовое представление. Также функция serialize(), которая преобразует данные для хранения в файле. Эти функции позволяют хранить данные в текстовом файле в виде массивов.
Шаг 6 – Создаем метод get_ratings()
Этот метод вызывается сам по себе, или от vote() метода. Он находит данные для конкретного блока рейтинга оценок по идентификатору и возвращает на запрашиваемую страницу в JSON формате.
Шаг 7 – Создаем vote() метод
Далее нам необходимо создать метод обработки входящих голосов. Когда метод закончит свою роботу, он вызывает get_ratings(), для отправки обновленных данных обратно в браузер.
В начале кода мы получаем значение оценки используя регулярное выражение. Далее устанавливаем идентификатор блока рейтинга оценок, и обновляем записи оценок или же в случае отсутствия создаем новый массив для оценок конкретного блока. Далее вычисляем общее количество оценок и среднее значение оценок. Кладем все это обратно в файл, используя ранее упомянутую функцию serialize().
В заключение о скрипте оценок
Как вы понимаете, это не является 100% решением реализации скрипта оценок. Для расширения этого проекта, мы должны использовать куки, чтобы один человек, голосовал один раз. Для этого достаточно записать в куки IP адрес и при выводе блока оценок сравнивать с текущим IP. Спасибо за ваше внимание и терпение!
Источник: sitear.ru