Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!

Реакции для материалов

Реакции для материалов
Материал добавлен: 09 Апреля 2025
Материал обновлен: 09 Апреля 2025
  1. Пошаговая инструкция по установке скрипта
  2. FAQ: Тонкая настройка скрипта

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

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

Реакции на материал

Реакции на материал

Преимущества скрипта:

  • Работа во всех ключевых модулях uCoz: Cкрипт легко масштабируется — достаточно прописать нужные модули в массиве $modules, и скрипт создаст для них отдельные таблицы в базе.
  • Поддержка авторизованных пользователей и гостей: Скрипт учитывает реакции как от зарегистрированных пользователей, так и от гостей.
  • Один клик — одна реакция: Пользователь может выбрать только одну реакцию за материал. При повторном клике по той же — голос снимается. При выборе другой — реакция заменяется. Это интуитивно и предотвращает накрутки.
  • Гибкость в настройке интерфейса: Количество, порядок и тип реакций можно менять в HTML — скрипт не жёстко привязан к конкретным эмодзи. Также можно полностью адаптировать стили под дизайн сайта.

Демо-сайт

Пошаговая инструкция по установке скрипта

1. Настройка доступа к PHP

Перейдите на главную страницу панели управления сайтом и откройте раздел «PHP-скрипты». Здесь будут указаны данные для подключения. Если пароль ещё не задан — установите его.

Скачайте FTP-клиент. Мы рекомендуем FileZilla. После установки откройте программу и введите параметры подключения:

  • Сервер: s2001.ucoz.net
  • Логин: ваш логин из раздела «PHP детали»
  • Пароль: заданный вами ранее

Подключение через FTP-клиент FileZilla

Нажмите кнопку «Быстрое соединение» для подключения к серверу.

2. Загрузка PHP-скрипта на сервер

После подключения перейдите в каталог scripts — дважды кликните по папке в правой панели FileZilla. Затем загрузите в неё папку emotions из скачанного архива.

Загрузка папки emotions на сервер

Проще всего загрузить папку, просто перетащив её в правую часть окна FileZilla.

Скачать PHP-скрипт

3. Загрузка JS-скрипта в файловый менеджер

Загрузите JavaScript-файл reactions.js в папку js через Файловый менеджер. Этот скрипт отвечает за логику работы реакций.

Скачать JS-скрипт

4. Установка кода на страницу материала

Перейдите в шаблон «Страница материала и комментариев к нему» нужного модуля и вставьте код из файла для отображения блока с реакциями.

Скачать HTML-код

Для работы скрипта не забудьте подключить JS-скрипт перед закрывающим тегом </body> в шаблоне:

<script src="/js/reactions.js"></script>

5. Установка кода в вид материалов (опицонально)

Если вы хотите отображать количество реакций в каждом материале на страницах архива или главной странице модуля, скачайте и добавьте соответствующий код в шаблон «Вид материалов».

Скачать HTML-код (Вид материалов)

В коде добавленного блока:

<div class="catalog-emotion-block" data-module="news" data-id="$ID$"> 

замените значение data-module="news" на соответствующий модуль, в котором используется скрипт.

Дополнительно, в шаблоне «Страница архива материалов» или «Главная страница модуля» (в зависимости от используемого модуля) оберните переменную $BODY$ в следующий контейнер:

<div id="materials-list">
 $BODY$
</div>

После, аналогично в шаблоне подключите JS-скрипт перед закрывающим тегом </body>:

<script src="/js/reactions.js"></script>

6. Добавление CSS-стилей

Добавьте стили в шаблон «Таблица стилей (CSS)», чтобы блок с реакциями корректно отображался:

/* Контейнер блока отзывов */
#emotion-block {
 margin: 20px auto;
 padding: 20px;
 text-align: center;
 font-family: Arial, sans-serif;
 border-radius: 16px;
 background: #FAFAFA;
}

/* Заголовок и общий счётчик */
#emotion-block h3 {
 margin-bottom: 5px;
 font-size: 24px;
}

#emotion-block > div:first-of-type {
 margin-bottom: 10px;
 font-size: 16px;
 color: #555;
}

/* Контейнер для списка эмоций */
.emoji-list {
 display: flex;
 flex-wrap: wrap;
 justify-content: center;
 gap: 10px;
}

/* Каждый блок эмоции */
.emoji-item {
 flex: 1 1 100px; 
 max-width: 120px;
 display: flex;
 flex-direction: column;
 align-items: center;
 cursor: pointer;
 border: 1px solid #ccc;
 border-radius: 16px;
 transition: border 0.3s, background-color 0.3s;
 padding: 10px; 
 transition: transform 0.3s ease-in-out, border 0.3s ease, background-color 0.3s ease;
}

/* Эффект масштабирования для всего блока при наведении */
.emoji-item:hover {
 transform: scale(1.05);
}

/* Активное состояние блока */
.emoji-item.active {
 border: 1px solid #507fff;
 background-color: #f0f8ff;
}

/* При активном состоянии меняем цвет счетчика и подписи */
.emoji-item.active .count,
.emoji-item.active p {
 color: #507fff;
}

/* При наведении на блок (если не активен) меняем цвет счетчика и подписи */
.emoji-item:hover:not(.active) .count,
.emoji-item:hover:not(.active) p {
 color: #507fff;
}

/* Эмодзи */
.emoji {
 font-size: 32px;
 transition: opacity 0.3s, transform 0.3s;
}

/* Счётчик голосов под эмодзи */
.count {
 font-weight: bold;
 font-size: 18px;
 color: #333;
}

/* Подпись к эмодзи */
.emoji-item p {
 margin-top: 2px;
 font-size: 14px;
 color: #666;
}

/* Адаптивность: при маленьких экранах элементы растягиваются */
@media (max-width: 480px) {
 .emoji-item {
 flex: 1 1 80px;
 max-width: 90px;
 }
 .emoji {
 font-size: 35px;
 }
}

/* Скрываем блок до загрузки, анимация появления */
.catalog-emotion-block {
 opacity: 0;
 transition: opacity 0.5s;
}

/* Располагаем эмодзи в ряд или как нужно */
.catalog-emoji-list {
 display: flex;
 flex-direction: row;
 align-items: center;
 gap: 5px;
 position: relative;
 top: -2px;
}

/* Каждый эмодзи-блок */
.catalog-emoji-item {
 display: flex;
 align-items: center;
 gap: 2px; /* расстояние между эмодзи и числом */
 font-size: 1.2em;
}

/* Счётчик */
.catalog-count {
 display: block;
 margin-top: 4px;
 font-size: 0.9em;
 color: #6a6e7b;
}

/* Выделяем активный элемент, увеличивая эмодзи */
.catalog-emoji-item.active .catalog-emoji {
 transform: scale(1.1);
}
 

FAQ: Тонкая настройка скрипта

1. В каких модулях поддерживается работа скрипта?

Файл config.php используется для указания тех модулей, в которых будет работать скрипт реакций. В нём содержится массив $modules, в который вы можете добавить нужные вам модули системы:

$modules = array("news", "stuff", "load", "board", "blog", "photo", "dir", "publ");

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

2. Как изменить количество эмодзи в блоке реакций?

Чтобы изменить количество эмодзи в блоке реакций (например, сделать 4 вместо 6), нужно внести небольшие изменения в три части скрипта: HTML, JavaScript и PHP.

Изменяем HTML-шаблон

В блоке .emoji-list оставляем нужное количество  <div class="emoji-item">. Например, если нужно оставить только 4 реакции - удаляем лишние блоки.

Обновляем JavaScript

В файле script.js найдите участок с обновлением количества реакций:

for (let i = 1; i <= 6; i++) {
 const countEl = document.getElementById(`count-${i}`);
 if (countEl) {
 countEl.textContent = (data.emotions && data.emotions[i]) ? data.emotions[i] : 0;
 }
}

Замените число 6 на актуальное количество эмодзи, например 4:

for (let i = 1; i <= 4; i++) {
 const countEl = document.getElementById(`count-${i}`);
 if (countEl) {
 countEl.textContent = (data.emotions && data.emotions[i]) ? data.emotions[i] : 0;
 }
}

Правим PHP-обработчик

В handler.php также нужно изменить количество эмоций:

а) При создании новой записи:

$emotions = array();
for ($i = 1; $i <= 6; $i++) {
 $emotions[$i] = 0;
}

Замените 6 на нужное число, например:

$emotions = array();
for ($i = 1; $i <= 4; $i++) {
 $emotions[$i] = 0;
}

б) Проверьте, чтобы значение эмоции было в допустимом диапазоне:

if ($emotion < 1 || $emotion > 6)
 die(json_encode(array("error" => "Invalid emotion")));

Замените 6 на 4:

if ($emotion < 1 || $emotion > 4)
 die(json_encode(array("error" => "Invalid emotion")));

3. Как запретить реакции для гостей и разрешить только авторизованным пользователям?

Чтобы разрешить ставить реакции только авторизованным пользователям, нужно обернуть HTML-блок реакций в шаблоне "Страница материала и комментариев к нему" в следующее условие:

<?if($USER_LOGGED_IN$)?>
код вашего блока
<?endif?>
Реакции для материалов