Quiz. Инструкция как создать опрос


Демо




1. Создаем опрос.


Добавляем ответы к вопросам:


Настраивает результат:

Выбираем 'Контент' и нажимаем сохранить.

Если нужно вывести еще какие-то данные в конце опроса, то заполняем необходимые поля:


2. Добавляем код в чанк tpl.Quiz.result
{$_modx->runSnippet('!QuizResult', [
    'quiz' => $quiz,
    'tplOuter' => '@INLINE <h3>{$title}</h3><table class="table table-striped">{$wrapper}</table>',
    'tpl' => '@INLINE <tr><td>{$procent}% {$question}</td><td>{$value}</td></tr>',
    'tplFooter' => '@INLINE <p>Проголосовали {$total} пользователей</p>'
])}
Документация сниппета QuizResult

3. Выводим на сайт квиз:
{'!Quiz' | snippet: [
    'id' => 1,
]}

Готово!

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

Решение:
// Фильтруем результаты по ip
{set $result = '!QuizResult' | snippet: [
    'quiz' => 1,
    'where' => ['ip' => $.server.REMOTE_ADDR],
]}

// Если результаты есть, значит показывает результат опроса
{if $result['total']}
    {'!QuizResult' | snippet: [
        'quiz' => 1,
        'tplOuter' => '@INLINE <h3>{$title}</h3><table class="table table-striped">{$wrapper}</table>',
        'tpl' => '@INLINE <tr><td>{$procent}% {$question}</td><td>{$value}</td></tr>',
        'tplFooter' => '@INLINE <p>Проголосовали {$total} пользователей</p>'
    ]}
// Если результатов нет, значит пользователь еще не проголосовал и показываем ему опрос
{else}
    {'!Quiz' | snippet: [
        'id' => 1,
    ]}
{/if}
Aleksandr Huz
10 мая 2020, 10:33
modx.pro
5
1 693
+16
Поблагодарить автора Отправить деньги

Комментарии: 15

Pavel Zarubin
11 мая 2020, 01:17
+1
А это действительно требует отдельного поста на modxpro? Я понимаю когда выкладывают всякие хуки и инструкции для компонентов где дописать документацию невозможно или требует отдельных PR и прочих заморочек, но тут инструкция вроде как от автора компонента, я понимаю анонсы компонентов, понимаю анонсы скидок, да блин я даже понимаю посты где меняется мажорная версия какого то из компонентов, но вот это зачем?
    Aleksandr Huz
    11 мая 2020, 01:39
    +2
    Это инструкция была написана, в первую очередь, для тех людей, кто задет мне в тех. поддержке, «как сделать опрос»? Еще я эту инструкцию добавлю в docs.modx.pro, не против?

    Я понимаю когда выкладывают всякие хуки и инструкции...
    В мире без твоего понимания происходят много нужных вещей.

    Что с тобой не так? Тебе мешает эта статья, потому что ты не понимаешь или просто, потому что я ее написал?
    Если я нарушил правила форума, тут есть кому написать мне или даже удалить статью.
      Василий Наумкин
      11 мая 2020, 04:00
      +2
      Просто поставь минус.

      При рейтинге -3 заметка пропадает с главной — голосование для того и придумано.
        Aleksandr Huz
        11 мая 2020, 11:14
        +3
        Все правильно, так и нужно мотивировать разработчиков писать новые статьи.

        Чем эта статья отличается, например, от этих?
        modx.pro/solutions/19619
        modx.pro/solutions/19339
        Они тоже написаны авторами своими дополнений.

        @Павел Гвоздь Паша, твоя статья похожа на мою, но тем не менее ты поставил мне минус. Просто интересно почему? Или другие поставили и я поставлю? (стадный эффект)
          Павел Гвоздь
          11 мая 2020, 16:20
          -1
          «Инструкция как создать опрос»? Больше похоже на один из основных разделов документации.
            Aleksandr Huz
            11 мая 2020, 17:07
            +1
            К сожалению, никак не успеваю пополнить раздел API, пусть этот пост станет началом!
            То есть твой пост вообще не похож на один из разделов документации?
              Павел Гвоздь
              12 мая 2020, 07:25
              0
              Неа. Ну блин, до тебя не доходит, да? Давай я напишу пост «Как создать промо-код», дойдёт тогда?

              Ты пойми, я ничего лично к тебе негативного не испытываю. Ты начал как-то остро воспринимать мой минус. Это всего лишь моё мнение, я ведь имею право на его высказывание, пусть даже кликом по кнопке. Не нужно пытаться вывести меня на спор, я уже не тот, что был в 2015 году. =)

              P.S. Я понимаю, что бомбит из-за минусов. У меня самого порой подгорает. Но мне куда неприятнее, когда мой труд просто никому не интересен и нет ни лайков, ни дизов.

              P.P.S. И прав был Василий, когда говорил, что начнётся серпентарий, когда появится возможность увидеть, кто голосовал.
                Сергей Шлоков
                12 мая 2020, 10:14
                +10
                Достаточно большой и красиво оформленный пост. Что плохого в том, что человек наглядно демонстрирует возможности системы? Похоже на документацию, не похоже на документацию… Какая разница. Если твой пост про создание промокода больше 3-х предложений, то пиши, не стесняйся.

                Этот сайт является частью самой большой MODX экосистемы в RU сегменте — modx.pro, modstore.pro и modhost.pro (хотя владельцы разные). Скорее даже самой большой в мире. Почему бы один ресурс не использовать для продвижения другого? А для удобства пользователей есть разделы. Хочешь, читай про дополнения, хочешь — про готовые решения. По моему, пост не нарушает никаких правил, ни описанных ни моральных. В отличие от поста с победными скидками. Вот там да, хочется сказать товарищу, что ошибся дверью.

                Это мое мнение, которое может меняться в зависимости от настроения ))
                  Aleksandr Huz
                  12 мая 2020, 10:27
                  0
                  То есть тебе не понравился заголовок статьи и ты поставил минус?

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

                  я уже не тот, что был в 2015 году.
                  Причем здесь 2015 год? Твоя статья была написана 5 месяцев назад
                    Павел Гвоздь
                    12 мая 2020, 10:34
                    +1
                    Потому что, до сих пор я считаю, что ты его поставил не обдуманно, а просто потому что Паша и Василий поставил
                    Что ты от меня хочешь? Чтобы я убрал минус? Чтобы я ткнул тебя носом в то, что я ставил не смотря на то, ставил ли Василий?
                      Василий Наумкин
                      12 мая 2020, 11:23
                      0
                      Я, как раз, последний минус поставил (оценки в хронологическом порядке показываются, это легко заметить), потому что у заметки был рейтинг -2, а на главной она всё еще висела.

                      Полез в исходники, а там < вместо <=, то есть рейтинг должен быть -3 и ниже.

                      Ну и поставил минус проверить. Заметка с главной пропала — ура, мой код работает! А верхний коммент свой потом отредактировал.
                        Причем здесь 2015 год?
                        @Aleksandr Huz, ты же давно здесь, не помнишь разве как @Павел Гвоздь был забанен за холивар с сами знаете кем)) И вроде даже не разбанен и поэтому аккаунт «свежий» у него, или это вообще еще на bezumkin.ru было… В общем 2015 упомянут не с проста, просто решил уточнить.

                        По теме: компонент классный, еще не пользовались но приглядываемся давно. С этим постом тот самый день точно приблизился, так что спасибо за скриншоты, они помогут протолкнуть идею с квизами среди коллег)))
            Кирилл Киселев
            28 октября 2020, 20:29
            0
            Quiz.start.after ещё надо добавить в события. Видимо автор забыл указать в документации.
              Goldy Brent
              17 июня 2021, 14:50
              0
              Почему-то ошибка вылезает
              i.imgur.com/AYGojoQ.png
              i.imgur.com/5X3bSDU.png

              В логах выводится следующее:

              i.imgur.com/36Ycy2J.png

              Обзор ошибки

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