Система лайков на PHP и Ajax
Наверняка, почти каждый из Вас знает, что такое лайки. Однако, помимо лайков в социальных сетях, можно сделать свою собственную систему лайков на PHP и Ajax. В этой статье мы это подробно разберём.
Безусловно, на практике настоятельно рекомендую хранить лайки в базе данных. Однако, в рамках данной статьи, чтобы код легко было проверить, я решил сделать хранение лайков в ini-файле. Итак, вот собственно файл likes.ini:
1=12
2=0
3=6
Формат следующий: "id_статьи=количество_лайков". Теперь займёмся подготовкой данных для вывода на страницу:
<?php
$id = 1; // ID статьи
$data = parse_ini_file("likes.ini"); // Парсим INI-файл
$likes = $data[$id]; // Получаем количество лайков у статьи
?>
Код прокомментирован, поэтому проблем с его пониманием возникнуть не должно. Теперь приступим к HTML-коду:
<div id="like" data-id="<?=$id?>"><?=$likes?></div>
Здесь мы просто выводим данные на страницу. Самому блоку можно задать, безусловно, различные стили (например, хотя бы cursor: pointer;) для красоты.
Переходим к JavaScript: наша задача при клике отправить запрос на сервер, передав ID статьи:
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#like").bind("click", function(event) {
$.ajax({
url: "like.php",
type: "POST",
data: ("id=" + $("#like").attr("data-id")),
dataType: "text",
success: function(result) {
if (result) {
$("#like").text(Number($("#like").text()) + 1);
}
else alert("Error");
}
});
});
});
</script>
Здесь мы перехватываем клик по контейнеру #like. Далее отправляем запрос, передав соответствующий ID. Получив положительный ответ от сервера, увеличиваем количество лайков на 1 в блоке. Если пришёл ответ false от сервера, то сообщаем об ошибке.
И, наконец, пришло время написать скрипт like.php, который и занимается увеличением числа лайков:
<?php
$text = file_get_contents("likes.ini"); // Получаем содержимое файла
$likes = explode("\n", $text); // Разбиваем строку на массив по разделителю в виде перехода на новую строку
$new_likes = array(); // Массив лайков с новыми данными
for ($i = 0; $i < count($likes); $i++) {
$parts = explode("=", $likes[$i]); // Разбиваем строку вида "id_статьи=количество_лайков" по знаку равно
if ($parts[0] == $_POST["id"]) $parts[1] += 1; // Увеличиваем число лайков на 1 у статьи с переданным ID
$new_likes[] = implode("=", $parts); // Формируем новую строку вида "id_статьи=количество_лайков" и добавляем в массив
}
$text = implode("\n", $new_likes); // Преобразуем массив с новыми данными в строку с разделителем в виде перехода на новую строку
echo file_put_contents("likes.ini", $text); // Записываем строку в файл и выводим false в случае неудачи
?>
Вот и всё. Однако, безусловно, данный скрипт крайне далёк от того, что должно быть. Дальше эту структуру уже надо наращивать в зависимости от Ваших целей. Что, скорее всего, потребуется?. Во-первых, защита от накруток, хотя бы записывать в cookie информацию о том, что пользователь уже у этой статьи поставил лайк. Либо можно позволить ставить лайки только зарегистрированным пользователям (как это делается в социальных сетях).
Также обратите внимание, что в данном скрипте при попытке добавить лайк к статье, которой нет в INI-файле, ничего не выйдет. Эта проблема решается добавлением новой строки в INI-файл, если в процессе цикла так и не было обнаружено искомой статьи. Но, учитывая, что всё равно лайки надо хранить в базе данных, я убрал эту дополнительную функциональность из кода.
Вот таким образом делается система лайков на PHP и Ajax.
-
- Михаил Русаков
Комментарии (5):
какой у вас плагин для подсветки кода?
Ответить
Насколько я понял по коду страниц, плагин этот: https://code.google.com/p/google-code-prettify/ Что же касается самой статьи, нужно понимать, что отдельно взятый "лайк" на практике соответствует не только статье, но и конкретному пользователю. Поэтому для реализации с БД логично было бы сделать отдельную таблицу с лайками, которая будет иметь поля с id лайка, id связанной статьи и id связанного пользователя. На мой взгляд проблема состоит именно в этом, чтобы правильно организовать связи, а отправка ajax - это уже дело техники. И если уж совсем "разложить по косточкам" - получать данные в json было бы даже несколько удобнее...
Ответить
а после отправки запроса на like.php какой переменной будет обозначаться id статьи?
Ответить
Хорошая статья Михаил, но, как мне кажется, пора уже отказываться полностью от шорт тегов в PHP...
Ответить
ты знаеш как добавить код и куда поставить хммммммм
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.