Модуль EasyPoll предназначен для управления опросами (создание тем, вопросов и прочего). А сниппет EasyPoll предназначен для проведения опросов непосредственно на страницах. Сначала нужно установить и настроить модуль, создать в нем хоть какой-то опрос. Потом нужно установить сниппет и попробовать опрос в действии.
Модуль EasyPoll
Устанавливается точно в соответствии с документацией. Русского языка в нем нет, но можно просто скопировать english.inc.php в ruccian-UTF8.inc.php и перевести несколько десятков строчек. А можно и не переводить - эти строки видит только администратор сайта.
Сниппет EasyPoll
Устанавливается в обычном порядке. Для русского языка нужно создать lang.ru.php и перевести в нем 6 строк. Эти строки видны пользователю.
Более интересным является использование сниппета. Разумеется, как и всякий приличный сниппет MODx, EasyPoll имеет массу параметров. Традиционно мы обратим внимание на нас касающиеся. Особенно интересуют такие критические места:
а) Возможно ли голосование за несколько вариантов ответа?
б) Возможно ли графическое отображение результатов?
На вопрос а) ответ - нет. Это резко снижает ценность сниппета. Смутные подозрения оправдались. Нет в коде упоминания о checkbox - есть только radio. Это означает, что можно выбрать только один вариант ответа, а нам непременно, кроме такого варианта, нужна возможность проголосовать за несколько вариантов. Так надо. Придется, видимо, влезать в код сниппета или портировать свой сниппет из Etomite в MODx.
На вопрос б) ответ - можно. Только надо разобраться и научиться. Это не страшно.
Первая проба
Попытка использовать сниппет без собственных настроек дает такие результаты:
а) Процедура голосования:
б) Результаты:
Это нас не устраивает. Будем разбираться в выводом результатов. Анализ показывает, что для отображения графики нужно подключить дополнительные стили. Включаем в свою таблицу стилей файл poll.css из комплекта сниппета - пока без правки. Видим такие результаты:
1. В Firefox:
2. В Safari:
3. В IntenetExplorer:
Да, давненько мы не видели столь разных результатов в браузерах! Обычно выделяется (в худшую сторону) IE, но чтобы Firefox и Safari... Боимся и поглядеть в Opera.
Конечно, кое-что мы можем исправить в CSS, нас не устраивают сами принципы. Нам нужно еще и разными цветами выделять голоса. Придется, видимо радиально перерабатывать сниппет, возможно - и модуль. Впрочем, попробуем сначала штатными средствами сниппета.
Доработка сниппета
В результате многочисленных корректоровок таблиц стилей, шаблонов и функции-шаблона нам удалось добиться приемлемого вида результатов опроса:
Подобный опрос формируется вызовом сниппета:
[ !EasyPoll? &lang=`ru` &multi=`1` &pollid=`2`&noajax=`0` &css=`assets/templates/yaml/epoll.css` &tplResultOuter=`PollResultOuter` &tplVoteOuter=`PollVoteOuter` &tplResult=`@FUNCTIONCHUNK PollFunction`! ]
Мы использовали аргументы:
&lang=`ru`. Язык сниппета. По умолчанию en, но нам проще изменить в коде сниппета на ru.
&multi (1 или 0) - возможность многовариантного голосования. Этот аргумент мы сами добавили - в сниппете его не было. Как это сделать - в следующей заметке.
&pollid=`2`. Здесь указывается ID опроса. Если не задан, то используется последний активный и полностью доступный опрос. А сами опросы, напомним, создаются с помощью модуля easyPoll.
&noajax=`0`. Разрешает или запрещает использование AJAX. Если установить 1, то вся дополнительная функциональность JavaScript будет отключена. В принципе этого не требуется, так как сниппет всё равно работает в браузерах, не поддерживающих JavaScript, а эта опция поможет как бы смоделировать отключение JavaScript.
&css=`assets/templates/yaml/epoll.css`. Подгружаем дополнительную таблицу стилей только для страницы с опросом. Это позволит не включать лишние стили в общую таблицу. Например такую:
@CHARSET "UTF-8";
.pollresults li {clear:both; width:95%;}
.easypoll fieldset {border:0px; margin:0px; padding:0px;}
.easypoll_bar {height:20px; background-color:#DCDCDC; float:left; width:95%; border: 1px solid #000; padding:0px;}
.easypoll_bar strong {float:left; display:block; padding:4px;font-size:10px;}
.easypoll_inner {height:100%; float:left; background-color:#000;}
&tplResultOuter=`PollResultOuter`. Это чанк, в котором определен шаблон результатов голосования, например такой:
<div class="light_box" align="left">
<h3>[ +question+ ]</h3>
<div>[ +choices+ ]</div>
<br /> <br /> <br />
<div>[ +totaltext+ ]:<strong> [ +totalvotes+ ]</strong></div>
</div>
&tplVoteOuter=`PollVoteOuter` Это чанк, в котором определен шаблон вопросов для голосования, например такой:
<div class="light_box">
<h3>[ +question+ ]</h3>
<ul>[ +choices+ ]</ul>
[ +submit+ ] [ +results+ ]
</div>
&tplResult=`@FUNCTIONCHUNK PollFunction`. А это самый интересный параметр. Здесь может быть задан чанк шаблона для вывода результата по каждому отдельному вопросу. Но вместо шаблона может использоваться функция. В данном случае мы ссылаемся на функцию с именем PollFunction. Где она определена и что делает?
PollFunction - это имя чанка. В коде чанка определена функция EasyPoll_PrintResult. И еще есть вспомогательная функция HSB2HEX. Мы их просто нагло позаимствовали из документации, и в результате имеем отображение результата в виде разноцветных графиков.
Результаты
Показанный вид результатов опроса нас устраивает. Здесь еще возможны доработки, но основной результат достигнут. Теперь необходимо добиться возможности выполнения множественных опросов.
А вот два опроса на одной странице заставить работать не получилось, хоть мы и следовали рекомендациям автора.
Впрочем, такого лучше не делать вообще.
Написать комментарий
Реплика №1: 07.09.2009, 13:13:19