Polls¶
Важно
Продукты Premium требуют бесплатного плагина License Manager. Установите его и добавьте лицензию продукта перед установкой этого продукта.
Установка¶
Установить плагин Polls можно одним из трёх способов: метод установки через GPM (менеджер пакетов Grav) позволяет быстро установить плагин простой командой в терминале, ручной метод — из zip-архива, а метод через админку — с помощью плагина Admin.
Зависимости¶
Для работы плагину требуются следующие установленные и включённые плагины:
- Admin Plugin >= 1.10.0 — для интерфейса управления опросами
- Flex Objects >= 1.0.0 — для управления данными
- Database Plugin >= 1.0.0 — для хранения голосов (используется SQLite)
- Shortcode Core >= 5.0.0 — для встраивания опросов в контент
Совет
Примечание: плагин Database использует SQLite для хранения данных голосования. Убедитесь, что в вашей установке PHP включена поддержка SQLite (обычно она включена по умолчанию в большинстве установок PHP).
Установка через GPM (предпочтительно)¶
Чтобы установить плагин через GPM, откройте терминал системы (также называемый командной строкой), перейдите в корень установки Grav и введите:
Плагин Polls будет установлен в папку /user/plugins внутри Grav. Его файлы можно найти в /your/site/grav/user/plugins/polls.
Установка вручную¶
Чтобы установить плагин вручную, скачайте zip-версию этого репозитория и распакуйте её в /your/site/grav/user/plugins. Затем переименуйте папку в polls. Эти файлы можно найти на GitHub.
Теперь все файлы плагина должны находиться в
Плагин Admin¶
Если вы используете плагин Admin, плагин можно установить напрямую: откройте меню Plugins и нажмите кнопку Add.
Конфигурация¶
Перед настройкой плагина скопируйте user/plugins/polls/polls.yaml в user/config/plugins/polls.yaml и редактируйте только эту копию.
Ниже приведена конфигурация по умолчанию и описание доступных параметров:
enabled: true # Включить плагин
built_in_css: true # Использовать встроенные стили CSS
theme: default # Тема: 'default' или 'modern'
unique_ip_check: true # Один голос на IP-адрес
session_vote_check: true # Один голос на сессию
readonly: false # Показывать только результаты (без голосования)
callback: /polls # AJAX-эндпоинт для голосования
poll_template: partials/poll.html.twig # Шаблон опроса
results_template: partials/results.html.twig # Шаблон результатов
colors: | # Пользовательские переменные CSS
--poll-primary: #1a73e8;
--poll-secondary: #f8f9fa;
--poll-border: #dadce0;
--poll-text: #202124;
--poll-hover: #e8f0fe;
Учтите: если вы используете плагин Admin, после сохранения конфигурации в админке файл с вашей конфигурацией polls.yaml будет сохранён в папке user/config/plugins/.
Создание опросов¶
- Перейдите в Admin > Polls в админке Grav
- Нажмите Добавить, чтобы создать новый опрос
- Заполните обязательные поля:
- Заголовок: внутренний идентификатор опроса (используется в шорткодах)
- Вопрос: вопрос, отображаемый пользователям
- Ответы: добавьте несколько вариантов ответа (нажимайте «Add item» для каждого ответа)
- Опубликовано: переключатель для включения и отключения опроса
Расширенные параметры¶
- Минимум ответов: минимальное количество обязательных выборов (по умолчанию: 1)
- Максимум ответов: максимальное количество допустимых выборов (по умолчанию: 1)
- Показывать подсказки: показывать пользователям требования к выбору
Использование¶
Предупреждение
Когда вы встраиваете шорткод опроса на страницу, необходимо отключить кэширование на этой странице. Плагин использует AJAX для обработки голосования, а для этого требуются динамические обновления контента, которым мешает кэширование. Сделать это можно в админке или непосредственно на странице, задав cache_enable: false
Базовое встраивание опроса¶
Используйте шорткод [poll], чтобы встроить опрос в контент:
Параметры шорткода¶
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
id |
string | Идентификатор опроса (обязательно) | - |
theme |
string | Визуальная тема: 'default' или 'modern' | Значение из конфигурации |
callback |
string | Пользовательский AJAX-эндпоинт | /polls |
unique_ip_check |
boolean | Один голос на IP-адрес | Значение из конфигурации |
session_vote_check |
boolean | Один голос на сессию | Значение из конфигурации |
poll_template |
string | Путь к пользовательскому шаблону опроса | partials/poll.html.twig |
results_template |
string | Путь к пользовательскому шаблону результатов | partials/results.html.twig |
readonly |
boolean | Показывать только результаты (отключить голосование) | false |
Примеры¶
Опрос с одним выбором¶
Опрос с несколькими вариантами¶
Настройте опрос так, чтобы разрешить несколько выборов в админке, затем встройте его:
Только показ результатов¶
Пользовательская конфигурация¶
Настройка шаблонов¶
Переопределение шаблонов¶
Чтобы настроить внешний вид опроса, скопируйте файлы шаблонов в свою тему:
- Скопируйте из:
user/plugins/polls/templates/partials/ - Вставьте в:
user/themes/YOUR_THEME/templates/partials/
Доступные шаблоны:
- poll.html.twig — основной шаблон отображения опроса
- results.html.twig — шаблон отображения результатов
Переменные шаблона¶
poll.html.twig
- poll — объект опроса (id, question, answers)
- options — параметры конфигурации
- polls — экземпляр PollsManager
- uri — URL AJAX-колбэка с nonce
results.html.twig
- poll — объект опроса
- results — результаты голосования по ответам
- total_votes — общее количество голосов
- options — параметры конфигурации
Пример пользовательского шаблона¶
{# user/themes/YOUR_THEME/templates/partials/poll.html.twig #}
<div class="custom-poll" data-poll-id="{{ poll.id }}">
<h3>{{ poll.question|markdown(false) }}</h3>
<form class="pollform">
<input type="hidden" name="id" value="{{ poll.id }}" />
{% for answer in poll.answers %}
<label>
<input type="checkbox" value="{{ answer }}" />
<span>{{ answer|markdown(false) }}</span>
</label>
{% endfor %}
<button type="submit">{{ "PLUGIN_POLLS.VOTE"|t }}</button>
</form>
</div>
Настройка CSS¶
Переменные CSS¶
Настройте внешний вид с помощью переменных CSS в теме или в конфигурации плагина:
:root {
--poll-primary: #1a73e8; /* Основной цвет */
--poll-secondary: #f8f9fa; /* Цвет фона */
--poll-border: #dadce0; /* Цвет границы */
--poll-text: #202124; /* Цвет текста */
--poll-hover: #e8f0fe; /* Цвет при наведении */
--poll-success: #34a853; /* Цвет сообщения об успехе */
--poll-error: #ea4335; /* Цвет сообщения об ошибке */
--poll-radius: 8px; /* Радиус границы */
--poll-transition: 0.3s; /* Длительность анимации */
}
Отключение встроенного CSS¶
Чтобы использовать полностью собственное оформление:
Интеграция с JavaScript¶
Плагин вызывает пользовательские события для расширенной интеграции:
// Перед отправкой голоса
document.addEventListener('polls:beforeVote', function(e) {
console.log('Voting on poll:', e.detail.pollId);
});
// После успешного голосования
document.addEventListener('polls:voteSuccess', function(e) {
console.log('Vote recorded:', e.detail);
});
// При ошибке голосования
document.addEventListener('polls:voteError', function(e) {
console.log('Vote failed:', e.detail.error);
});
Справочник API¶
Для продвинутого использования в PHP:
// Получить конкретный опрос
$poll = $grav['polls']->getPoll('poll-id');
// Получить все опросы
$polls = $grav['polls']->getPolls();
// Получить только опубликованные опросы
$polls = $grav['polls']->getPolls(['published' => true]);
// Получить результаты голосования
$results = $grav['polls']->getResults('poll-id');
// Проверить, голосовал ли пользователь
$hasVoted = $grav['polls']->hasAlreadyVoted('poll-id');
Решение проблем¶
Ошибка «опрос не найден»¶
- Убедитесь, что идентификатор опроса в шорткоде точно совпадает с ID опроса
- Проверьте, что опрос опубликован в админке
- Очистите кэш Grav:
bin/grav clear-cache
Голосование не работает¶
- Убедитесь, что все зависимости плагина установлены и включены
- Проверьте консоль браузера на ошибки JavaScript
- Убедитесь, что AJAX-эндпоинт (
/polls) доступен - Проверьте права доступа к файлам
user-data://polls/polls.db
Результаты не обновляются¶
- Очистите кэш Grav:
bin/grav clear-cache - Проверьте, что плагин Database настроен правильно
- Убедитесь, что SQLite включён в вашей установке PHP
- Проверьте журналы Grav на ошибки базы данных
Проблемы с оформлением¶
- Убедитесь, что
built_in_cssвключён, или предоставьте собственный CSS - Проверьте конфликты CSS с вашей темой
- Используйте инструменты разработчика браузера, чтобы изучить переменные CSS
Ошибки прав доступа¶
- Убедитесь, что папка
user/dataдоступна для записи - Проверьте, что веб-сервер может создавать и изменять базу данных SQLite
- Проверьте правильность владельца файлов установки Grav
Режим отладки¶
Включите режим отладки для подробных сообщений об ошибках: