Расширение "Опросы"
Расширение предназначено для автоматизации формирования:
голосований по поставленному вопросу с возможностью выбора одного из предложенных вариантов ответа;
получения отчётов по результатам проведённых голосований;
получения оценок экспертов о степени выраженности заданного набора признаков у заданного перечня объектов;
обобщения экспертных оценок.
Расширение требует установки файла x_opros.php, x_opros_res.php (не входит в базовую комплектацию).
Примеры использования расширения !opros/opros.k
Голосования
Голосование представляет собой специальный текстовый блок, содержащий адресуемый читателю статьи вопрос, а также несколько вариантов ответа на него, представленных в виде ссылок. При переходе по такой ссылке система запоминает ответ данного пользователя и на отдельной странице выводит ему отчёт о том, сколько раз другие пользователи выбирали каждый из предложенных вариантов ответов. Продолжая чтение данной статьи или войдя в нёё заново пользователь может переголосовать по данному голосованию. При этом при повторном прочтении этой или другой статьи, содержащей данный опрос выбранный ранее вариант ответа данного пользователя будет выделен. Переголосование стирает старый ответ и записывает новый.
В любой статье может использоваться сколько угодно голосований. Данные для их формирования могут извлекаться из секций данной или любых других публикаций.
Существует два варианта организации голосований, реализуемые различными встроенными функциями. Первый вариант предполагает встраивание в данное место текста статьи конкретного голосования. Это голосование будет встраиваться в текст вне зависимости от того, проголосовал по нему данный пользователь при чтении этой или другой статьи или нет. Другой вариант предполагает вставку в данном конкретном месте статьи голосования, случайно выбранного из заданного списка. При этом из списка случайного выбора исключаются голосования, в которых данный пользователь уже принимал участие. Тем самым обеспечивается возможность "подсовывать" пользователю всё новые и новые голосования.
Система исключает возможность подтасовки результатов голосования пользователем, составившим данные для его организации. До начала голосования (подачи первого голоса) данные голосования можно править как угодно. Однако после того, как хотя бы один пользователь (включая составителя голосования) проголосовал (выбрал тот или иной вариант ответа) данные голосования запоминаются в отдельном хранилище и все последующие представления этого голосования другим пользователям извлекают данные для его формирования строго из этого хранилища, а не по тому указателю данных, на основе которых строился первоначальный вариант. Поэтому можно сколько угодно править данные голосования (вопроса и вариантов ответов), но голосование будет строиться по тем данным, на основе которых было составлено голосование для первого проголосовавшего.
Посмотреть результаты голосований можно с помощью отчёта, встраиваемого в статью с помощью специальной функции. При этом все голосования считаются тайными: в отчёте выводятся только сводные данные о числе голосов, поданных за каждый из вариантов каждого из включенных в отчёт голосований.
Исходные данные голосований
Основой формирования голосований являются специальным образом организованные массивы данных расширений, включающие следующие элементы, имеющие предопределённое назначение при их интерпретации.
$.x vzg - Тип расширения (vzg)
$.n - Название голосования
$.d - Права доступа к голосованию
vg - вопрос голосования
vv - варианты выбора ответов на поставленный вопрос.
Элементы, начинающиеся с символов $., являются стандартными и подробно рассмотрены в статье Массивы данных расширений.
Элемент vg определяет вопрос голосования. Он может быть однострочным или многострочным. В последнем случае этот элемент должен задаваться в форме:
/vg
Строка вопроса 1
Строка вопроса 2
...
Строка вопроса N
//
Если элемент vg не задан или пуст, то в качестве вопроса голосования используется значение элемента $.n (Название голосования).
Элемент vv определяет варианты ответов на вопрос голосования. Этот элемент по определению является многострочным и потому должен задаваться в форме:
/vg
Код1 Вариант ответа 1
Код2 Вариант ответа 2
...
Код3 Вариант ответа N
//
Каждый вариант ответа может занимать только одну строку. Первым указывается код ответа, который для каждого варианта должен быть уникальным.
Следует иметь в виду, что все последующие примеры настроены так, что они недоступны неавторизованным пользователям.
В данной статье имеется секция .g1, имеющая следующее содержание:
В ней задан массив данных для формирования голосования, построенный по рассмотренным выше принципам. Элемент vg определяет предъявляемый пользователю вопрос (Какое из направлений живописи Вам нравится более всего). Элемент vv определяет варианты ответов. Элемент массива $.d 00222 указывает, что голосование недоступно неавторизоваанным пользователям.
Рассмотрим теперь функции вывода голосований.
Функция vzg
Функция vzg(ud) предназначена для вывода в месте её появления в статье голосования, определяемого данными по указателю ud.
Например:
@vzg('*~g1')
Если Вы ещё не голосовали по данному вопросу, то в выведенном списке вариантов выбора не будет выделен ни один из перечисленных. Попробуйте что-либо выбрать. Система учтёт Ваш голос и в отдельном окне (вкладке) выведет отчёт с результатами голосования всех пользователей, принимавших в нём участие. В отчёте отражается сколько голосов отдано за каждый из предложенных вариантов и какова доля голосов, отданных за конкретный вариант в общем числе проголосовавших. При этом в отчёте выделен вариант, который выбран именно Вами.
Если теперь страницу отчёта закрыть и перезагрузить данную статью, то Ваш вариант в меню вариантов выбора будет выделен жирным шрифтом.
Функция vsg
Функция vsg(ud) предназначена для вывода в месте её появления в статье голосования, случайно выбираемого из списка указателей данных, содержащихся по указателю ud. Её аргумент ud является указателем на список указателей, каждый из которых определяет массив данных для голосования.
Например, в данной статье имеется секция .spgol следующего содержания:
Каждая строка секции является указателем на секцию этой же статьи, содержащей массив данных, определяющей конкретное голосование. Из этого перечня случайно выбирается один из указателей и формируется соответствующее голосование.
Если страницу перезагрузить, то с большой вероятностью на этом же месте будет выведено другое голосование. При этом из заданного списка для случайного выбора будут исключаться те голосования, по которым данный пользователь уже когда-либо делал выбор не только при чтении данной статьи, но и на других страницах, где оно могло появиться. Если данный пользователь уже сделал выбор по всем голосованиям списка, то не будет выведено ничего.
Функции vsg() можно вообще не передавать параметров. В этом случае список для случайного выбора будет производиться по всем начавшимся голосованиям. При этом не имеет значения к каким статьям эти голосования были привязаны.
Функция sorg
Функция sorg(ud) предназначена для вывода в месте её появления сводного отчёта по заданному списку голосований. Принцип обращения к данным тот же, что и у функции vsg. Передаваемый параметр является указателем на массив указателей на конкретные голосования. По ним выбираются результаты и выводятся в отчёте. Если параметр не задавать, то будет выведен отчёт о результатах всех голосований, право на доступ к которым имеет данный пользователь.