WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

Опрос Democracy

Знакомьтесь с реинкарнацией некогда известного плагина: Democracy Poll. Сказать, что это на 100% мой плагин я не могу, но скажу, что это мой плагин на 90%, потому что от старого плагина осталось, пожалуй, только название и идея "Демократического опроса" - возможность добавлять пользователям свои ответы - почти ничего... Автором старого Democracy Poll является Andrew Sutherland (сайт jalenack.com перестал работать). Оригинал плагина не обновлялся уже 9 лет, последняя версия 2.0.1 была выпущена в 2006 году.

Здесь я делюсь своим плагином, с одноименным названием Democracy Poll. Своим потому что я полностью переписал плагин и добавил туда много всего.

Что касается сравнения этого плагина с аналогами, не мне говорить. Но насчет известного wp-polls все же скажу: оба плагина очень похожи, функционал во много похож, я даже удивился когда начал сравнивать... Но мой плагин лучше, потому что удобнее, пользователи могут добавлять свои ответы, работает с кэшем. Однако в моем плагине нет такой гибкой настройки шаблона опроса, а есть 3 темы оформления и возможность изменять дописывать свои css стили. Изменив стили, можно полностью изменить внешний вид опроса.

Democracy poll и плагины кэширования (WP Super Cache)

Несколько слов о том, как Democracy работает с плагинами кэширования и почему это важно.

Democracy я использую на своих сайтах, в частности на этом. И везде у меня установлен страничных кэш (WP Total Cache). После большого обновления Democracy я вздохнул спокойно, но не успел я выдохнуть, как понял, что опрос-то не работает с кэшем.

В чем проблема? Поясню на примере: зашел посетитель на страницу сайта где выводится опрос за который он уже голосовал, ему вывело результаты опроса помеченные его голосами и такая страница сохранилась в кэш. Далее на эту же страницу заходит другой посетитель, который не голосовал и видит сохраненную в кэше страницу, где выводятся результаты голосования прежнего посетителя, но ведь второй посетитель еще не голосовал. Вот и получается, что если вы используете кэширование на сайте (а в WordPress оно нужно), то опрос попросту не работает!

Посмотрел я имеющиеся в каталоге WP плагины опросов, среди которых и популярный WP-Polls и не нашел ни одного плагина, который бы работал с кэшем - это, надо признаться, уныло: плагин есть, а толку нет...

Разумеется меня это все не устроило и я активно занялся доработкой Democracy. Чтобы он умел работать с плагинами страничного кэширования! Признаться, я думал сделать это будет проще, гораздо проще, чем оказалось на поверку. Работы получилось много, в основном время ушло на тестирование, сложно тестировать кэш... Но оно того стоило.

С версии 4.5.6, Democracy работает с кэшем!

Но работать с кэшем можно по-разному. Простой и очень нехороший пример: плагин добавляет скрипт, который при загрузке кэшированной страницы, отправляет AJAX запрос и проверяет голосовал ли пользователь и заменяет данные опрос на полученные данные. С таким подходом вся работа плагина кэширования идет Сердитому коту под хвост... Это как печальный плагин wp-postviews, умеющий работать с кэшем: страница была отдана из кэша, практически без нагрузки на сервер и тут же AJAX запрос подгружает WordPress фоном и нагрузка на сервер, чуть ли не такая же как была без плагина кэширования.

Democracy poll работает не так и не "аннулирует" работу плагина кэширования.

Логика работы Democracy с кэшем: Проверяется установлен ли один из плагинов кэширования и включен ли в нем страничный кэш, если кэш работает, то под каждый опрос на странице в тегах noindex подгружаются html коды голосования и результатов. Далее, при загрузке страницы, скрипт проверяет установлены ли куки голосования для пользователя:

  • если - да, то скрипт берет html результатов и ставит их в опрос и вы видите результаты, независимо от того что там сохранилось в кэше,

  • если - нет, то скрипт заменят опрос на вид голосования и не голосовавший пользователь может голосовать. Но тут нужно еще проверить: куков может не быть в браузере, но в логах, в БД могут быть данные о том, что посетитель с таким же IP или пользователь с таким же ID уже голосовал. Получается совсем без AJAX запроса не обойтись, а на сервер нагружать не хочется - кэш все-таки...Поэтому: AJAX запрос на проверку данных в БД отправляется, не при загрузке страницы, а когда посетитель наведет мышку на опрос и удержит её там больше секунды (сигнал, что он хочет голосовать) или кликнет по блоку опроса (в любое место, для тачскринов).

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

Что умеет плагин

  • Создавать опросы;

  • Работать с плагинами страничного кэширования, не "убивая" их функциональность;

  • Пользователи могут добавлять свои ответы (Democracy) (отключается);

  • Мульти-голосование: пользователи могут выбирать несколько вариантов ответов (отключается);

  • Закрывать опрос по окончанию указанный даты;

  • Показывать случайный опрос из нескольких активных;

  • Закрывать опросы для незарегистрированных пользователей;

  • Удобное редактирование отдельного опроса: кнопка редактировать для администраторов.

  • Редактировать количество голосов.

  • Пользователь может изменить свое мнение: возможность пере-голосовать (отключается);

  • Запоминание голосовавших по: IP, Cookie, профилям в WordPress (для авторизованных пользователей). Историю можно очищать;

  • Вставлять опросы в посты: шоткод [demоcracy]. Для этого есть кнопка в визуальном редакторе;

  • Виджет (отключается).

  • Удобное редактирование опросов: панель плагина вынесена в Панель инструментов WordPress (toolbar) (отключается);

  • Отключение .css или .js файлов. Или их встраивание прямо в HTML.

  • Выводить заметку под опросом: короткий текст пояснение к опросу и т.п.

  • Изменение внешнего вида опроса: css темы.

  • Русский интерфейс. В коде все на русском, но кому нужно, есть перевод на English.

Но как говорил Идиот (Достоевского), - «Говорить нехорошо, лучше пример»:

Если вам нужны какие либо дополнительные возможности, голосуйте/добавляйте их в конце этой статьи, в опросе.

к началу

Скачать

Скачать: WordPress › Democracy Poll
Скачано: 295, размер: 37.8 KB, дата: 1.5 года назад

Плагин в каталоге WordPress: смотреть.

Для работы требует PHP 5.3 или выше.

Внимание!

Так случилось, потому что при принятии плагина в каталог плагинов WP ему пришлось сменить основную папку с democracy на democracy-poll.

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

Для этого:

  1. Зайдите через FTP в каталог плагинов wp-content/plugins и переименуйте папку "democracy" в "democracy-poll".

  2. Затем зайдите в Админ-панель > Плагины и активируйте плагин заново.

  3. Все, теперь обновите плагин как обычно, через админ-панель.

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

Установка

Устанавливается как и любой другой плагин, читайте здесь.

к началу

Удаление

Удалять плагин нужно из панели плагинов WordPress, чтобы он вместе с файлами удалил данные о себе в базе данных.

Нельзя удалять папку плагина через FTP (это относится ко всем плагинам WP)! Так как плагин создает дополнительные таблицы в Базе Данных и сохраняет настройки. Если удалить плагин просто удалив его папку из каталога плагинов, то плагин не почистит за собой.

Использование

Создавать опросы и настраивать плагин можно в меню: Настройки > Опрос Democracy. Или через Панель инструментов WordPress. Меню в панели можно отключить в настройках:

Меню инструментов Democracy

Для вставки опроса на сайт используйте виджет. Если виджет не нужен и он мешает, его можно отключить в настройках.

Виджет Опроса Democracy

Также опросы можно вставлять отдельно в записи (посты) для этого используйте шоткод [ democracy id=""]. Для удобной вставки шоткодов, плагин добавляет кнопку в визуальный редактор. Кнопку можно отключить в настройках:

dem-tinymce-button

Чтобы вывести архив опросов используйте шоткод [ democracy_archives]. Обычно создавать архив отдельно не нужно, для этого на странице настроек есть специальная кнопка. Она ищет существующую страницу, если не найдено, то создает новую постоянную страницу с нужным шоткодом.

dem-create-archive

к началу

Расширенное использование

Для вывода опросов и архива опросов через код, в плагине есть специальные функции-обертки:

<?php democracy_poll( $id, $before_title, $after_title ); ?>

Выводит на экран отдельный опрос по переданному id опроса. Если id не передать, то будет выведен один из активных опросов, в случайном порядке. Чтобы получить результат этой функции для обработки используйте get_democracy_poll().

<?php democracy_archives( $hide_active, $before_title, $after_title ); ?>

Выводит на экран архив опросов. Параметр $hide_active отвечает за показ активных опросов. Если установить его в true, все активные опросы (которые участвуют в ротации) будут удалены их вывода. Чтобы получить результат функции, а не выводить его на экран используйте get_democracy_archives().

Код этих функций:

###### функции обертки ######
/**
 * Для вывода отдельного опроса
 * @param int $id ID опроса
 * @return HTML
 */
function democracy_poll( $id = 0, $before_title = '', $after_title = ''){
	echo get_democracy_poll( $id, $before_title, $after_title );
}
function get_democracy_poll( $id = 0, $before_title = '', $after_title = '' ){
//  die($before_title . $after_title);
	$poll = new DemPoll( $id );

	$show_results = __query_poll_screen_choose( $poll );

	return $poll->display( $show_results, $before_title, $after_title );
}

/**
 * Для вывода архивов
 * @param bool $hide_active Не показывать активные опросы?
 * @return HTML
 */
function democracy_archives( $hide_active = false, $before_title = '', $after_title = '' ){
	echo get_democracy_archives( $hide_active, $before_title, $after_title );
}
function get_democracy_archives( $hide_active = false, $before_title = '', $after_title = '' ){
	global $wpdb;

	$WHERE = $hide_active ? 'WHERE active = 0' : '';
	$ids = $wpdb->get_col("SELECT id FROM $wpdb->democracy_q $WHERE ORDER BY active DESC, id DESC");

	$output = '<div class="dem-archives">';
	foreach( $ids as $poll_id ){
		$poll = new DemPoll( $poll_id );
		$poll->opt['archive_page_url'] = ''; // убираем ссылку на архив

		$show_results = isset( $_REQUEST['dem_act'] ) ? __query_poll_screen_choose( $poll ) : true;

		$output .= $poll->display( $show_results, $before_title, $after_title );
	}
	$output .= "</div>";

	return $output;
}
к началу

Примеры использования функций в теме

#1. Функция democracy_poll()

<?php democracy_poll( 25, '<div class="title">', '</div>'); ?>

Выведет опрос с ID 25 и обвернет заголовок опроса в <div class="title"> и </div>

#2. Функция democracy_archives()

Выведем список всех неактивных опросов и обернем их заголовки в тег <strong>:

<?php democracy_archives( true, '<strong>', '</strong>' ); ?>

#3 Испльзвоания хуков

Один из примеров расширения функционала плагина при помощи имеющихся хуков, описан в вопросе.

Перевод

Порядок действий для перевода на любой язык:

  1. Установите программу Poedit
  2. Запустите программу и перейдите в меню: "File > NEW form POT/PO file..."
  3. В открывшемся диалоговом окне перейдите в папку плагина "land" и переключитесь на показ PO файлов (их по умолчанию не видно) и выберите файл ru_RU.po. Нажмите "Открыть" в диалоговом окне.
  4. Выберите язык на который будите переводить и нажмите OK. Теперь, на всякий случай обновите все строки перевода: нажмите в панели инструментов Poedit кнопку Update.
  5. Переведите все строки и нажмите кнопку Save. И сохраните переведенный файл в папку плагина lang (название плагина должно соответствовать локали вашего перевода. Список локалей смотрите здесь: http://svn.automattic.com/wordpress-i18n/ ).
  6. Перевод готов!

translation

После этого перевод должен включиться автоматически.

При обновлении плагина, если были изменения и появились не переведенный строки, нужно опять открыть poedit, открыть в нем нужный .po файл и нажать "Update". Все не переведенные строки появятся в файле перевода.

к началу

Обновления

= 4.5+ =
Смотрите в репозитории WordPress

= 4.5 = 31 января 2015
Добавка: поддержка тем за счет css стилей.
Добавка: новая тема "flat" (flat.css).
Правка: доработка кода.= 4.4 =
Добавка: Работа плагина без javascript.
Правка: доработка кода.

= 4.3.1 =
Добавка: кнопка "удалить ответ пользователя" при множественном голосовании. Без нее было неудобно.
Правка: доработка кода.

= 4.3 =
Добавка: Кнопка плагина в визуальном редакторе TinyMCE.
Правка: доработка кода.

= 4.2 =
Добавка: Возможность пере-голосования.

= 4.1 =
Добавка: Ограничение: только зарегистрированные пользователи могут голосовать. Подсчет таких голосов как пользователей системы, а не по IP.
Добавка: Поддержка подключения сжатых версий CSS (.min.css) и .js (.min.js): если они есть, то будут подключаться они.
Добавка: Встраивание js/css кода прямо в HTML код, чтобы сэкономить на запросах к серверу.
Добавка: Загрузка .js и .css файлов только там где они нужны, только когда хотя бы один опрос отображается на странице.
Добавка: Меню плагина в "Панели инструментов". Так просто создавать опросы, меню можно деактивирвоать в настройках.

= 4.0 =
Добавка: Множественное голосование.
Добавка: Возможность изменять количество голосов.
Добавка: Возможность рандомайза опросов из нескольких активных.
Добавка: Дата окончания опроса.
Добавка: jQuery выбор даты для Даты окончания опроса.
Добавка: Возможность открывать/закрывать опросы.
Добавка: Локализация. Перевод на Английский.
Добавка: Изменил шоткоды {democracy}/{democracy:} на стандартные для WP [``democracy]/`[``democracy id=]`.
Добавка: Плагин стал работать на основе jQuery. За счет этого новые возможности, анимация...
Добавка: Кнопка редактирования для каждого опроса. Очень удобно, когда вы администратор, вы будите видеть иконку карандаша справа вверху.
Добавка: Кнопка очистки логов (сохраненные IP адреса и данные о голосовавших). Очищается в настройках.
Добавка: "Умная" кнопка создания архивной страницы из настроек.
Правка: Изменил около 80% кода плагина, т.е. переписал почти все. Теперь код более логичный и его проще расширять.
Правка: Стили опроса. Перевел все на % и em. Теперь дизайн подстраивается под размеры экрана, сайта.

= 3.1 = 1 июня 2012

  • Правки в коде; дополнил виджет; немного изменил внешний вид; добавил правильное удаление плагина с удалением талиц и настроек.

ОБНОВЛЕНИЕ ВАЖНО: изменил названия таблиц в БД (могут быть глюки с регистрозависимостью), поэтому при замене файлов, плагин перестанет работать. Не нужно его активировать/деактивировать! Чтобы переименовать таблицы в нужные, допишите в адресе любой страницы блога ?dem_rename_db_tables. Также, настройки нужно будет сохранить заново.

к началу

Опрос по плагину

Какой используете плагин страничного кэширования?

  • Добавить ответ
Опрос Democracy 335 комментариев
Полезные 24 Вопросы 1 Все
  • Андрей Зенков cайт: start-luck.ru

    Отличный плагин. Действительно лучшее решение даже на сегодняшний день. Спасибо за проделанную работу good2

    Ответить2 месяца назад #
  • Роман

    Уведомление о новом комментарии такое приходит на почту:

    Отличный плагин. Действительно лучшее решение даже на сегодняшний день. Спасибо за проделанную работу  (:good2:)
    
    | Автор: Андрей Зенков
    | Запись: https://wp-kama.ru/id_67/plagin-oprosa-dlya-wordpress-democracy-poll.html
    | Коммент: https://wp-kama.ru/id_67/plagin-oprosa-dlya-wordpress-democracy-poll.html/comment-page-15#comment-19794
    |
    | Управление подпиской: /core/wp-comments-post.php?wp-subscription-manager=1&email=my_list%40mail.ru&key=7f1b79580adde67062a4f11b2903c134

    последняя строчка косячная, как видите

    Ответить2 месяца назад #
  • Лариса
    @

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

    1
    Ответить2 месяца назад #
  • Daler

    Здравствуйте!
    Можно сделать так чтобы с одного IP можно было голосовать несколько раз?

    Ответитьмесяц назад #
    • Kama4477

      В настройках поставь время жизни 1 день. Раз в день можно будет...

      Ответитьмесяц назад #
  • Добрый день!
    Ищу плагин опроса, который дает возможность выбрать ответ нажатием на кнопку. Например, в опросе выводятся две кнопки "Да" и "Нет", после нажатия-голосования выводятся результаты опроса.
    Вы можете что-нибудь посоветовать?

    Ответитьмесяц назад #
  • cessel
    @

    Здравствуйте. Такой вопрос: а можно ли, как-нибудь, приспособить плагин для работы во фронтэнде, то есть, чтобы пользователи могли сами создавать опросы, не заходя в админку (нужно для форума на bbpress). Может подскажете куда копать?

    Ответить13 дней назад #
    • Kama4477

      Просто не получится. Смотри как устроен код и делай также...

      Ответить10 дней назад #

Здравствуйте, !

Ваш комментарий