[Tickets] 1.3.0-beta Сниппет TicketMeta и рейтинги

Представляю вам новую версию Tickets, с большими изменениями.

В первую очередь, добавились социальные функции — возможность голосовать за тикеты и комментарии. Кое-что было предусмотрено для этого в компоненте с самого начала, но руки так и не дошли.

А вот недавно товарищ Wassi Wassinen профинансировал вопрос, и теперь у нас есть рейтинги. Не знаю, насколько это будет полезно у меня на сайте, но как минимум протестировать нужно. А там решим — оставить или отключить.

Система голосования

Голосовать можно за комментарии и тикеты. Для этого нужно обладать правами
  • ticket_vote — разрешение голосовать за тикеты
  • comment_vote — разрешение голосовать за комментарии
Оба разрешения включены в политики безопасности по умолчанию. За свои тикеты и комменты голосовать нельзя.

Чтобы включить рейтинги, вам нужно просто обновить чанки. Пришлось довольно сильно помучиться с оформлением всех этих стрелочек и статусов, но я умудрился сделать всё без единого фильтра — только «быстрыми плейсхолдерами» pdoTools.

Изменены чанки:
Их можно перезаписать при обновлении пакета, если у вас там немного изменений. Иначе топаем по ссылкам на github и делаем как там.

Чего пока нет:
  1. Нет периода скрытия рейтинга тикета для гостей. Гости видят рейтинг сразу, а юзеры после голосования.
  2. Нет подсчета рейтинга юзера и кармы. Честно говоря, не уверен, что это вообще будет, но вы легко можете делать выборки из таблицы TicketVote и считать что угодно.
  3. Заминусованные комментарии никак не прячутся.
  4. Время голосования никак не ограничивается.
Всё остальное вроде реализовал (поправьте в комментариях, если нет).

Сниппет TicketMeta

Для голосования за тикет на его собственной странице пришлось написать новый сниппет.

Он умеет:
  • Выводить симатичную дату [[+date_ago]]
  • Выводить информацию о секции тикета с префиксом «section.», то есть: [[+section.id]], [[+section.uri]] и т.д.
  • Выводить информацию об авторе тикета
  • Выводить количество просмотров [[+views]]
  • Выводить количество комментариев [[+comments]]
  • Выводить общий рейтинг и нужную информацию для его работы
То есть, это готовый сниппет для вывода всей нужной информации на странице тикета. В комплекте к нему идёт чанк tpl.Tickets.meta.

Если вдруг кто пользовался плейсхолдерами [[+views]], [[+comments]] и [[+date_ago]], то переходите на использование нового сниппета — этих плейсхолдеров на странице больше нет.

У сниппета всего три параметра: чанк для вывода и возможность отключить получение секции и автора, чтобы не делать лишних запросов, если они вам не нужны.

Исправления и улучшения

В комментарии добавлена прикольная штука, подсмотренная на Хабре — перемотка к родителю и обратно. Может быть полезно при больших беседах, когда зыбываешь, на что отвечаешь.

Также в комментарии добавлен плейсхолдер [[+idx]]. Ну, просто для порядка.

[#57] Добавлены все плейсхолдеры юзера при просмотре и публикации комментария — можно использовать [[+username]].

[#56] При редактировании тикета в админке добавлено окошко description.

[#55] Исправлена ошибка с изменением alias тикета при редактировании pagetitle на фронтенде.

Почистил код класса Ticket и сниппета TicketComments.

Заключение

Обновляемся из репозитория и благодарим Wassi Wassinen за финансирование новой версии. Просьба тестировать и писать об ошибках — здесь и на GitHub.

Ну и, конечно, голосуем!

Обновлено 01.02.2014

Выложил в репозиторий beta2:
  • [#58] Исправлено переключение класса существующего документа на Ticket
  • Так как тикеты не показываются в дереве, и при переключении modDocument на Ticket, вы можете их просто потерять — добавил checkbox show_in_tree.
  • А заодно добавил и системную настройку ticket_show_in_tree_default
  • И поменял системные настройки по умолчанию. Теперь тикеты не скрываются в меню, не являются контейнерами и не именуются по id. Ваши текущие настроки это не заденет, изменения касаются только новых установок.
  • Добавлена колонка owner в класс TicketVote. Теперь вы можете легко считать рейтинг юзеров по сумме голосов за их тикеты и комменты (очередное спасибо Wassi Wassinen).
[[!pdoPage?
	&element=`pdoUsers`
	&leftJoin=`{"Vote":{"class":"TicketVote","on":"modUser.id=Vote.owner AND class IN ('Ticket','TicketComment')"}}`
	&select=`{"modUser":"*", "Vote":"SUM(value) as rating"}`
	&groupby=`modUser.id`
	&sortby=`rating`
	&sortdir=`desc`
	&tpl=`@INLINE <p>[[+idx]]. [[+fullname]] — <b>[[+rating]]</b></p>`
]]
[[!+page.nav]]

Кстати говоря, еще вы можете выводить тикеты, отсортировав их по рейтингу:
[[!pdoPage?
	&element=`getTickets`
	&parents=`0`
	&leftJoin=`{"Vote":{"class":"TicketVote","on":"Ticket.id=Vote.id and Vote.class='Ticket'"}}`
	&select=`{"Ticket":"*", "Vote":"SUM(value) as rating"}`
	&groupby=`Ticket.id`
	&sortby=`rating`
	&sortdir=`desc`
	&tpl=`@INLINE <p>[[+idx]]. [[+pagetitle]] — <b>[[+rating]]</b></p>`
]]
[[!+page.nav]]

Присоединение таблиц в сниппетах pdoTools — могучая вещь!

Следующая заметка
[AjaxSnippet] Запуск сниппетов через Ajax
Предыдущая заметка
[mSearch2] Релиз кандидат 1.0.0: Автодополнение и словари


Комментарии ()

  1. Василий Столейков 29 января 2014, 20:31 # +25
    Спасибо, всё — окончательно перехожу на Tickets! :)
    1. Василий Столейков 29 января 2014, 20:33 # +3
      Проголосовал за эту статью — рейтинг не изменился, так и стоит 0
      1. Василий Столейков 29 января 2014, 20:34 # 0
        Прошу прощения, работает. Возможно после Ctrl+F5
        1. Василий Наумкин 29 января 2014, 20:36 # +5
          Это нормально, я набегу исправляю тут всякое =)
          1. Василий Столейков 29 января 2014, 20:37 # +3
            Проверил на тебе минусовый рейтинг… =)
            1. Василий Наумкин 29 января 2014, 20:38 # +8
              Ну да, виноват, не все отладил =(
        2. Алексей Добряков 29 января 2014, 20:45 # +3
          Жалко не могу поставить плюс =(
          Говорит «У вас недостаточно прав для этого действия.»
          1. Василий Наумкин 29 января 2014, 20:48 # +6
            Просто перелогинься.
            1. Алексей Добряков 30 января 2014, 07:24 # 0
              Шикарно!!!
          2. Володя 29 января 2014, 21:35 # +3
            Крутяк )))
            1. Александр Котлов 29 января 2014, 21:39 # +4
              ШИКАРНО!
              1. Timur Sonaev 30 января 2014, 02:12 # +1
                круто!
                1. Николай 30 января 2014, 02:32 # -9
                  Василий, как всегда радуешь отличными новостями.
                  Если не трудно, ответь на несколько вопросов (чтобы не устанавливать и настраивать себе все)
                  1. Для этого компонента необходимы продвинутые сниппеты авторизации? Либо же обычного Login будет достаточно
                  2. Каждый новый текет от пользователя, это полноценный ресурс? Либо же это обычная таблица записей в базе?
                  3. В тикетах все еще нету возможности комментировать ресурс не авторизированным пользователям?
                  4. Можно ли добавить к созданию тикета доп поля? (В случае если тикеты это все таки ресурсы)
                  Спасибо.
                  1. Василий Наумкин 30 января 2014, 03:43 # +4
                    1 юзер должен быть авторизован, неважно как
                    2 это ресурс, но с особенностями
                    3 нету
                    4 конечно
                  2. Wassi Wassinen 30 января 2014, 16:46 # +1
                    Катарсис!
                    1. Wassi Wassinen 30 января 2014, 16:49 # 0
                      Теперь проматываешь портянки сообщений и можешь заострять внимание преимущественно на «мощно заплюсованных» комментариях))
                      1. Чикин Артур 30 января 2014, 18:06 # 0
                        А я думаю что лучше их сдвинуть влево, к остальным элементам комментария, так как из за скрипта который не так давно добавили, на больших ветках комментарий разъезжается на весь экран, жуть как не удобно.
                        1. Василий Наумкин 30 января 2014, 19:09 # +3
                          Отключил расширение контента.

                          Всё-таки, оно больше мешает чем помогает.
                      2. Wassi Wassinen 30 января 2014, 16:52 # +6
                        Если есть возможность, Василий, дай клацать по серым стрелкам голосования анонимусам с выводом некого сообщения «Чтобы оставлять голосовать вам необходимо войти или зарегистрироваться» (можно даже на jGrowl) — это очень способствует вовлечению новых посетителей. Спасибо еще раз.
                        1. Чикин Артур 30 января 2014, 17:57 # -1
                          Не думаю что это будет полезно. Если пользователь не хочешь авторизироваться что бы оставить комментарий, то для того что бы поставить + или — он авторизироваться и подавно не будет.
                          1. Wassi Wassinen 30 января 2014, 17:59 # +2
                            Это практика подавляющего большинства крупных ресурсов. Буду опираться на неё. :) Спасибо за мнение.
                            1. Чикин Артур 30 января 2014, 19:33 # 0
                              Вся фишка в том что на крупных проектах, это смотрится довольно таки правильным решением, а на меньших проектах, это смотрится несуразно.
                              1. Wassi Wassinen 30 января 2014, 22:45 # -1
                                Везде, где можно надеяться на более или менее адекватную оценку полезности комментария сообществом — это правильное решение. Плюс отсекает неадекватов: накомментил фигни — твой комментарий скрыт или не виден. А в целом у меня нет желания кого-либо переубеждать :)
                                1. Чикин Артур 31 января 2014, 11:04 # 0
                                  Вы отклонились от парадигмы обсуждения, я говорил про ненадобность предупреждать пользователя о том что ему нужно авторизироваться что бы проголосовать, а ты мне говоришь о необходимости рейтинга вообще:)
                          2. Wassi Wassinen 30 января 2014, 18:00 # -1
                            Поспешил — людей насмешил. Фразу «Чтобы голосовать Вам необходимо войти или зарегистрироваться».
                            1. Василий Наумкин 30 января 2014, 18:23 # 0
                              Добавь у себя вызов скриптов на стрелочки в чанке для гостей.

                              Оно будет ругаться на права — переименуй это в лексиконе.
                              1. Wassi Wassinen 30 января 2014, 18:30 # -1
                                Давно хотел спросить — как вызывать всплывающие окошки не подключая jGrowl? У тебя, как я понял, лексикон немного изменен?
                                1. Василий Наумкин 30 января 2014, 19:03 # 0
                                  В любом случае нужно что-то подключать, если ты не планируешь написать собственное решение на чистом javascript.

                                  У меня везде используется jGrowl.
                                  1. Wassi Wassinen 30 января 2014, 22:50 # +2
                                    Разобрался. Он у тебя дефолтом подключается. Что касается — и + для анонимуса — когда нажимаешь плюс не залогинившись, просто ничего не происходит. Это сбивает с толку. Вроде как нажать можно, а вроде как и ничего не происходит. У себя добавлю вывод сообщения. По поводу сниппета написал на почту.
                            2. Wassi Wassinen 30 января 2014, 17:57 # +5
                              И готов поучаствовать в финансировании подсчета кармы и вывода на странице с юзерами. Если возьмешься. :) Кстати, Василий, есть мысль сделать вкладку «Наше сообщество», «Hate you» или лаконичное «Пользователи», чтобы выводить туда зарегистрированных с фильтрами по активности и той же карме? Было бы здорово. Вы затеваете отличный проект с modx.pro, а к нему было бы хорошо сформировать социальную группу, которая должна общаться и видеть друг-друга.
                              1. Чикин Артур 30 января 2014, 19:30 # 0
                                Сама затея гуд, но это блог а не социальная платформа, так что лучше уж подождать когда запустится modx.pro и там уже все социальные плюшки реализовывать)
                                1. Алексей Карташов 30 января 2014, 19:54 # 0
                                  «Hate you»?? Или я чего-то не понял? :-)
                                  1. Wassi Wassinen 30 января 2014, 22:57 # 0
                                    Василий как бы подчеркивает тоталитаризм царящий на этом ресурсе и я по этому поводу чуть-чуть посарказмировал. :)
                                    1. Алексей Карташов 30 января 2014, 22:58 # +1
                                      Тонко :-)
                                  2. Василий Наумкин 30 января 2014, 19:57 # +5
                                    Я еще не уверен, что оставлю здесь рейтинг, а ты уже про карму.

                                    Народ и так хорошо общается, без всяких писькомерок. Наоборот сейчас могут начаться обидки «за что меня минусанули?».

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

                                    В принципе, могу написать тебе отдельный сниппет который будет выбирать сумму минусов\плюсов юзеров и выводить их список по убыванию.
                                    Без всяких хитрых формул, просто список с общим рейтингом. Если нужно — пиши на мыло, обсудим.
                                    1. Abu 31 января 2014, 11:00 # 0
                                      Народ и так хорошо общается, без всяких писькомерок. Наоборот сейчас могут начаться обидки «за что меня минусанули?».
                                      Как вариант, можно оставить плюсы без минусов. (По поводу юзабилити, можно оценку поставить между стрелок, чтобы не промахиваться).
                                  3. Василий Столейков 30 января 2014, 22:17 # +3
                                    А как насчёт цветового затухания текста заминусованных комментариев как на Хабре? Чтобы взгляд сразу цеплялся за плюсованные, и не останавливался отрицательных…
                                    1. Василий Наумкин 30 января 2014, 22:19 # 0
                                      Оно в списке «Чего пока нет», пункт 3.
                                      1. Галич Сергей 30 января 2014, 22:24 # +1
                                        можно же за 2 минуты на js написать, например

                                        if( count < 0 ) {
                                        $(this).css({'color':'gray'});
                                        }
                                        1. Василий Наумкин 30 января 2014, 22:49 # 0
                                          Жду коммит на GitHub`е.
                                          1. Галич Сергей 30 января 2014, 23:34 # 0
                                          2. Wassi Wassinen 30 января 2014, 22:55 # 0
                                            Было бы здорово сделать небольшую градацию (< 0 = #faf0e6), (< 3 = #f5f5dc) и самые дикие комменты < 10 #ffffff
                                        2. Галич Сергей 30 января 2014, 22:31 # +1
                                          на тесте поставил,

                                          при попытке изменить рейтинг статьи, пишет:
                                          «У вас недостаточно прав для этого действия.»
                                          на 6 разных юзерах, зареганых через авторизацию HybridAuth

                                          куда покапать?
                                          1. Василий Наумкин 30 января 2014, 22:36 # 0
                                            Даже не знаю, может нужно создать группу пользователей, указать её в HybridAuth и назначить ей политику доступа TicketUserPolicy?

                                            Ну, чтобы юзеры регистрировались в группу, которая имеет право писать тикеты, комменты и голосовать?
                                            1. Галич Сергей 30 января 2014, 22:49 # 0
                                              ахах)
                                              точно) получилось
                                              что-то не могу найти на сайте инструкцию по установке)
                                              1. Василий Наумкин 30 января 2014, 22:56 # 0
                                                bezumkin.ru/modx/tickets/quickstart

                                                Ну и подумать немного можно.
                                                1. Галич Сергей 30 января 2014, 23:30 # 0
                                                  тьфу искал установку hybryd)) туплю
                                          2. Николай 31 января 2014, 13:18 # 0
                                            в chunk.ticket_meta.tpl есть строка
                                            <!--tickets_new_comments <span class="green">+[[+new_comments]]</span>-->
                                            а [[+comments]] [[+new_comments]] нету, либо убрали что-то одно, либо забыли убрать что-то другое, как мне кажется
                                            1. Василий Наумкин 31 января 2014, 14:15 # 0
                                              Забыл убрать, конечно.
                                            2. Николай 31 января 2014, 13:37 # 0
                                              Зашел в этот тикет. Написано вверх тире Вниз. Чтобы просмотреть рейтинг предлагается нажать тире. Нажимаю тире — показывает +36 и голосовалка переходит в статус inactive, т.е. голосовать после просмотра я уже не могу.
                                              ps с какой целью рейтинг прячется то?
                                              1. Василий Наумкин 31 января 2014, 14:16 # 0
                                                С целью независимого голосования.
                                                1. Николай 31 января 2014, 14:21 # 0
                                                  то есть это так и задумано? Если посмотрел рейтинг, то ты уже необъективен и голосовать не можешь? =)
                                                  1. Василий Наумкин 31 января 2014, 15:21 # 0
                                                    Именно.

                                                    Зачем тебе смотреть рейтинг до голосования если это не влияет на твое мнение? Или голосуй объективно или воздержись

                                                    Придумал это не я — повторяю логику с Хабрахабра.
                                                    1. Николай 31 января 2014, 15:55 # 0
                                                      Ну для Хабра то понятно — там вход по пропускам и с iq>200, на других сайтах контингент не факт, что поймет, что это вообще голосовалка, если там циферок стоять не будет =)
                                                      1. Василий Наумкин 31 января 2014, 15:57 # +1
                                                        Может, им тогда и не стоит голосовать.

                                                        А вообще, в чанке можно настроить. Убрать возможность «воздержаться» и сразу показывать рейтинг.
                                              2. Даниил 31 января 2014, 17:07 # -1
                                                Василий, какие файлы можно переместить из новой версии Tickets в предыдущую, чтоб голосование заработало? А то у меня слишком уж там много исправленных исходников, не хочу травмировать целиком компонент, полюбому ченьть да полетит, а счас это совсем не кстати было б
                                                1. Василий Наумкин 31 января 2014, 17:12 # 0
                                                  Смотри на GitHub.
                                                  1. Даниил 31 января 2014, 17:39 # 0
                                                    Ок, спасибо
                                                2. Илья 01 февраля 2014, 16:18 # 0
                                                  Эх! Не было бы авторизации, цены бы не было!
                                                  1. Василий Наумкин 01 февраля 2014, 17:52 # +4
                                                    И сейчас цены нет.
                                                    1. Илья 02 февраля 2014, 11:24 # 0
                                                      Я бы заплатил, за версию без регистрации )))
                                                      1. Василий Наумкин 02 февраля 2014, 11:29 # 0
                                                        Согласен сделать возможность анонимного комментирования всего за 10 000 рублей.
                                                        1. Илья 02 февраля 2014, 12:25 # 0
                                                          Кто готов скинутся на разработку?
                                                          Уверен — многим нужно.
                                                          Дам 5 000 р.
                                                          Ещё пару человек по 2 500 р. и исчезнут такие сообщения: «мне б без авторизации».
                                                          Давайте скидываться!!!
                                                          Создал топик:
                                                          bezumkin.ru/sections/work/2574/
                                                          1. Чикин Артур 02 февраля 2014, 12:33 # +2
                                                            Tikets + Hybridauth и ненужны никакие анонимные комментарии.

                                                            А то сейчас появятся аннонимные комментарии, завтра будут выть что нужно придумать защиту от спама, и тд)
                                                  2. Николай 01 февраля 2014, 16:56 # -1
                                                    А я правильно понимаю, что сниппет TicketMeta надо вызывать некешированным? (у меня иначе циферки обновляются только вместе с кэшем всей страницы)
                                                    1. Василий Наумкин 01 февраля 2014, 17:07 # 0
                                                      Естественно.
                                                    2. Николай 02 февраля 2014, 10:31 # 0
                                                      А как создавался файл с иконками для редактора editor2x.png? Надо добавить пару своих иконок, но что-то через фотошоп качество теряется без исходника…
                                                      1. Evgeny Epifanov 07 февраля 2014, 21:01 # 0
                                                        Василий, а можно как-нибудь в TicketLatest выводить текст комментария или интро? Может есть какой-то плейсхолдер?
                                                        1. Василий Наумкин 07 февраля 2014, 21:09 # 0
                                                          Укажи &tpl=`` и посмотри, что там есть.
                                                          1. Evgeny Epifanov 08 февраля 2014, 00:08 # 0
                                                            Спасибо.
                                                        2. Юрий Зюзин 08 февраля 2014, 22:36 # 0
                                                          Эх, новую инструкцию по Tickets бы, а то уже очень многое изменилось(
                                                          1. Василий Столейков 16 февраля 2014, 09:42 # 0
                                                            А выводить комментарии тикета по рейтингу возможно?
                                                            1. Василий Наумкин 16 февраля 2014, 12:21 # 0
                                                              Как ты себе это представляешь, учитывая древовидную структуру комментариев?
                                                              1. Ilya Vasilyev 16 февраля 2014, 13:01 # 0
                                                                Поизвращавшись с css и jQuery — можно.
                                                                1. Василий Столейков 16 февраля 2014, 15:01 # 0
                                                                  Понятно, просто есть страница, где в один уровень дерева выводятся комментарии, и самые важные (плюсованные) нужно выводить выше всех… Задача такая вот, но думаю можно и без извращений обойтись пока что…
                                                                  1. Василий Наумкин 16 февраля 2014, 15:22 # +1
                                                                    У комментариев есть поле rating — сортируй по нему.
                                                                    1. Василий Столейков 16 февраля 2014, 20:41 # 0
                                                                      Спасибо — круто! Не подумал сразу, потому что по умолчанию параметра &sortby нету в параметрах сниппета…
                                                                2. Юрий Ганс 05 марта 2014, 02:28 # 0
                                                                  Доброго времени суток. Василий подскажи плиз в чем может быть проблема? на одном сайте все ок на другом нет! попытка добавления тикета --> У вас недостаточно прав для этого действия. Группу пользователей создал, указал её в HybridAuth и назначил ей политику доступа TicketUserPolicy. Работает только если в редактирование пользователя поставить неограниченные права. Уже измучился, движок 2.5, развернул на новом хостинге, на старом юзал не я, там не знаю как работает!
                                                                  1. Юрий Ганс 05 марта 2014, 03:18 # 0
                                                                    Решил проблему созданием собственной политики
                                                                  2. Наумов Алексей 14 марта 2014, 12:21 # 0
                                                                    А голосовать не за тикеты, а за обычные ресурсы можно?..

                                                                    TicketsMeta ругается «This resource is not instance of Ticket class», ну это ладно, модифицирую этот сниппет. А какие нибудь еще проблемы будут?..
                                                                    1. Чикин Артур 14 марта 2014, 13:03 # 0
                                                                      Будут, с обновлениями будут. Возможно какие то другие скрытые баги будут, индивидуальные только для вас.
                                                                    2. Алексей Юмашин 27 марта 2014, 02:18 # 0
                                                                      Шикарный компонент, Василию огромный респект за его труды!!!
                                                                      Добавление новых комментариев отключено.