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

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

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

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

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

Голосовать можно за комментарии и тикеты. Для этого нужно обладать правами - ticket_vote - разрешение голосовать за тикеты

  • comment_vote - разрешение голосовать за комментарии

Оба разрешения включены в политики безопасности по умолчанию. За свои тикеты и комменты голосовать нельзя.

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

Изменены чанки: - tpl.Tickets.list.row - чанк оформления списка тикетов

Их можно перезаписать при обновлении пакета, если у вас там немного изменений. Иначе топаем по ссылкам на 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 - могучая вещь!

Комментарии (82)
bazmasterВасилий Столейков
29.01.2014 16:31

Спасибо, всё - окончательно перехожу на Tickets! :)

bazmasterВасилий Столейков
29.01.2014 16:33

Проголосовал за эту статью - рейтинг не изменился, так и стоит 0...

bazmasterВасилий Столейков
29.01.2014 16:34

Прошу прощения, работает. Возможно после Ctrl+F5...

bezumkinВасилий Наумкин
29.01.2014 16:36

Это нормально, я набегу исправляю тут всякое =)

bazmasterВасилий Столейков
29.01.2014 16:37

Проверил на тебе минусовый рейтинг.. =)

bezumkinВасилий Наумкин
29.01.2014 16:38

Ну да, виноват, не все отладил =(

Алексей Добряков
29.01.2014 16:45

Жалко не могу поставить плюс =( Говорит "У вас недостаточно прав для этого действия."

bezumkinВасилий Наумкин
29.01.2014 16:48

Просто перелогинься.

Алексей Добряков
30.01.2014 03:24

Шикарно!!!

ВолодянВолодя
29.01.2014 17:35

Крутяк )))

asxАлександр Котлов
29.01.2014 17:39

ШИКАРНО!

Timur Sonaev
29.01.2014 22:12

круто!

Николай
29.01.2014 22:32

Василий, как всегда радуешь отличными новостями. Если не трудно, ответь на несколько вопросов (чтобы не устанавливать и настраивать себе все) 1. Для этого компонента необходимы продвинутые сниппеты авторизации? Либо же обычного Login будет достаточно 2. Каждый новый текет от пользователя, это полноценный ресурс? Либо же это обычная таблица записей в базе? 3. В тикетах все еще нету возможности комментировать ресурс не авторизированным пользователям? 4. Можно ли добавить к созданию тикета доп поля? (В случае если тикеты это все таки ресурсы) Спасибо.

bezumkinВасилий Наумкин
29.01.2014 23:43

1 юзер должен быть авторизован, неважно как 2 это ресурс, но с особенностями 3 нету 4 конечно

Wassi Wassinen
30.01.2014 12:46

Катарсис!

Wassi Wassinen
30.01.2014 12:49

Теперь проматываешь портянки сообщений и можешь заострять внимание преимущественно на "мощно заплюсованных" комментариях))

Чикин Артур
30.01.2014 14:06

А я думаю что лучше их сдвинуть влево, к остальным элементам комментария, так как из за скрипта который не так давно добавили, на больших ветках комментарий разъезжается на весь экран, жуть как не удобно.

bezumkinВасилий Наумкин
30.01.2014 15:09

Отключил расширение контента.

Всё-таки, оно больше мешает чем помогает.

Wassi Wassinen
30.01.2014 12:52

Если есть возможность, Василий, дай клацать по серым стрелкам голосования анонимусам с выводом некого сообщения "Чтобы оставлять голосовать вам необходимо войти или зарегистрироваться" (можно даже на jGrowl) - это очень способствует вовлечению новых посетителей. Спасибо еще раз.

Чикин Артур
30.01.2014 13:57

Не думаю что это будет полезно. Если пользователь не хочешь авторизироваться что бы оставить комментарий, то для того что бы поставить + или - он авторизироваться и подавно не будет.

Wassi Wassinen
30.01.2014 13:59

Это практика подавляющего большинства крупных ресурсов. Буду опираться на неё. :) Спасибо за мнение.

Чикин Артур
30.01.2014 15:33

Вся фишка в том что на крупных проектах, это смотрится довольно таки правильным решением, а на меньших проектах, это смотрится несуразно.

Wassi Wassinen
30.01.2014 18:45

Везде, где можно надеяться на более или менее адекватную оценку полезности комментария сообществом - это правильное решение. Плюс отсекает неадекватов: накомментил фигни - твой комментарий скрыт или не виден. А в целом у меня нет желания кого-либо переубеждать :)

Чикин Артур
31.01.2014 07:04

Вы отклонились от парадигмы обсуждения, я говорил про ненадобность предупреждать пользователя о том что ему нужно авторизироваться что бы проголосовать, а ты мне говоришь о необходимости рейтинга вообще:)

Wassi Wassinen
30.01.2014 14:00

Поспешил - людей насмешил. Фразу "Чтобы голосовать Вам необходимо войти или зарегистрироваться".

bezumkinВасилий Наумкин
30.01.2014 14:23

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

Оно будет ругаться на права - переименуй это в лексиконе.

Wassi Wassinen
30.01.2014 14:30

Давно хотел спросить - как вызывать всплывающие окошки не подключая jGrowl? У тебя, как я понял, лексикон немного изменен?

bezumkinВасилий Наумкин
30.01.2014 15:03

В любом случае нужно что-то подключать, если ты не планируешь написать собственное решение на чистом javascript.

У меня везде используется jGrowl.

Wassi Wassinen
30.01.2014 18:50

Разобрался. Он у тебя дефолтом подключается. Что касается - и + для анонимуса - когда нажимаешь плюс не залогинившись, просто ничего не происходит. Это сбивает с толку. Вроде как нажать можно, а вроде как и ничего не происходит. У себя добавлю вывод сообщения. По поводу сниппета написал на почту.

Wassi Wassinen
30.01.2014 13:57

И готов поучаствовать в финансировании подсчета кармы и вывода на странице с юзерами. Если возьмешься. :) Кстати, Василий, есть мысль сделать вкладку "Наше сообщество", "Hate you" или лаконичное "Пользователи", чтобы выводить туда зарегистрированных с фильтрами по активности и той же карме? Было бы здорово. Вы затеваете отличный проект с modx.pro, а к нему было бы хорошо сформировать социальную группу, которая должна общаться и видеть друг-друга.

Чикин Артур
30.01.2014 15:30

Сама затея гуд, но это блог а не социальная платформа, так что лучше уж подождать когда запустится modx.pro и там уже все социальные плюшки реализовывать)

Алексей Карташов
30.01.2014 15:54

«Hate you»?? Или я чего-то не понял? :-)

Wassi Wassinen
30.01.2014 18:57

Василий как бы подчеркивает тоталитаризм царящий на этом ресурсе и я по этому поводу чуть-чуть посарказмировал. :)

Алексей Карташов
30.01.2014 18:58

Тонко :-)

bezumkinВасилий Наумкин
30.01.2014 15:57

Я еще не уверен, что оставлю здесь рейтинг, а ты уже про карму.

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

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

В принципе, могу написать тебе отдельный сниппет который будет выбирать сумму минусов\плюсов юзеров и выводить их список по убыванию. Без всяких хитрых формул, просто список с общим рейтингом. Если нужно - пиши на мыло, обсудим.

RasulAbu
31.01.2014 07:00

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

Как вариант, можно оставить плюсы без минусов. (По поводу юзабилити, можно оценку поставить между стрелок, чтобы не промахиваться).

bazmasterВасилий Столейков
30.01.2014 18:17

А как насчёт цветового затухания текста заминусованных комментариев как на Хабре? Чтобы взгляд сразу цеплялся за плюсованные, и не останавливался отрицательных..

bezumkinВасилий Наумкин
30.01.2014 18:19

Оно в списке "Чего пока нет", пункт 3.

gasergeГалич Сергей
30.01.2014 18:24

можно же за 2 минуты на js написать, например .... if( count

bezumkinВасилий Наумкин
30.01.2014 18:49

Жду коммит на GitHub`е.

gasergeГалич Сергей
30.01.2014 19:34
Wassi Wassinen
30.01.2014 18:55

Было бы здорово сделать небольшую градацию (

gasergeГалич Сергей
30.01.2014 18:31

на тесте поставил,

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

куда покапать?

bezumkinВасилий Наумкин
30.01.2014 18:36

Даже не знаю, может нужно создать группу пользователей, указать её в HybridAuth и назначить ей политику доступа TicketUserPolicy?

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

gasergeГалич Сергей
30.01.2014 18:49

ахах) точно) получилось что-то не могу найти на сайте инструкцию по установке)

bezumkinВасилий Наумкин
30.01.2014 18:56

http://bezumkin.ru/modx/tickets/quickstart

Ну и подумать немного можно.

gasergeГалич Сергей
30.01.2014 19:30

тьфу искал установку hybryd)) туплю

susliktНиколай
31.01.2014 09:18

в chunk.ticket_meta.tpl есть строка

<!--tickets_new_comments <span class="green">+[[+new_comments]]</span>-->

а [[+comments]] [[+new_comments]] нету, либо убрали что-то одно, либо забыли убрать что-то другое, как мне кажется

bezumkinВасилий Наумкин
31.01.2014 10:15

Забыл убрать, конечно.

susliktНиколай
31.01.2014 09:37

Зашел в этот тикет. Написано вверх тире Вниз. Чтобы просмотреть рейтинг предлагается нажать тире. Нажимаю тире - показывает +36 и голосовалка переходит в статус inactive, т.е. голосовать после просмотра я уже не могу. ps с какой целью рейтинг прячется то?

bezumkinВасилий Наумкин
31.01.2014 10:16

С целью независимого голосования.

susliktНиколай
31.01.2014 10:21

то есть это так и задумано? Если посмотрел рейтинг, то ты уже необъективен и голосовать не можешь? =)

bezumkinВасилий Наумкин
31.01.2014 11:21

Именно.

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

Придумал это не я - повторяю логику с Хабрахабра.

susliktНиколай
31.01.2014 11:55

Ну для Хабра то понятно - там вход по пропускам и с iq>200, на других сайтах контингент не факт,что поймет,что это вообще голосовалка, если там циферок стоять не будет =)

bezumkinВасилий Наумкин
31.01.2014 11:57

Может, им тогда и не стоит голосовать.

А вообще, в чанке можно настроить. Убрать возможность "воздержаться" и сразу показывать рейтинг.

unman64Даниил
31.01.2014 13:07

Василий, какие файлы можно переместить из новой версии Tickets в предыдущую, чтоб голосование заработало? А то у меня слишком уж там много исправленных исходников, не хочу травмировать целиком компонент, полюбому ченьть да полетит, а счас это совсем не кстати было б

bezumkinВасилий Наумкин
31.01.2014 13:12

Смотри на GitHub.

unman64Даниил
31.01.2014 13:39

Ок, спасибо

Илья
01.02.2014 12:18

Эх! Не было бы авторизации, цены бы не было!

bezumkinВасилий Наумкин
01.02.2014 13:52

И сейчас цены нет.

Илья
02.02.2014 07:24

Я бы заплатил, за версию без регистрации )))

bezumkinВасилий Наумкин
02.02.2014 07:29

Согласен сделать возможность анонимного комментирования всего за 10 000 рублей.

Илья
02.02.2014 08:25

Кто готов скинутся на разработку? Уверен - многим нужно. Дам 5 000 р. Ещё пару человек по 2 500 р. и исчезнут такие сообщения: "мне б без авторизации". Давайте скидываться!!! Создал топик: http://bezumkin.ru/sections/work/2574/

Чикин Артур
02.02.2014 08:33

Tikets + Hybridauth и ненужны никакие анонимные комментарии.

А то сейчас появятся аннонимные комментарии, завтра будут выть что нужно придумать защиту от спама, и тд)

susliktНиколай
01.02.2014 12:56

А я правильно понимаю,что сниппет TicketMeta надо вызывать некешированным? (у меня иначе циферки обновляются только вместе с кэшем всей страницы)

bezumkinВасилий Наумкин
01.02.2014 13:07

Естественно.

susliktНиколай
02.02.2014 06:31

А как создавался файл с иконками для редактора editor2x.png? Надо добавить пару своих иконок, но что-то через фотошоп качество теряется без исходника...

Evgeny Epifanov
07.02.2014 17:01

Василий, а можно как-нибудь в TicketLatest выводить текст комментария или интро? Может есть какой-то плейсхолдер?

bezumkinВасилий Наумкин
07.02.2014 17:09

Укажи &tpl=`` и посмотри, что там есть.

Evgeny Epifanov
07.02.2014 20:08

Спасибо.

Юрий Зюзин
08.02.2014 18:36

Эх, новую инструкцию по Tickets бы, а то уже очень многое изменилось(

bazmasterВасилий Столейков
16.02.2014 05:42

А выводить комментарии тикета по рейтингу возможно?

bezumkinВасилий Наумкин
16.02.2014 08:21

Как ты себе это представляешь, учитывая древовидную структуру комментариев?

Ilya Vasilyev
16.02.2014 09:01

Поизвращавшись с css и jQuery - можно.

bazmasterВасилий Столейков
16.02.2014 11:01

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

bezumkinВасилий Наумкин
16.02.2014 11:22

У комментариев есть поле rating - сортируй по нему.

bazmasterВасилий Столейков
16.02.2014 16:41

Спасибо - круто! Не подумал сразу, потому что по умолчанию параметра &sortby нету в параметрах сниппета...

Юрий Ганс
04.03.2014 22:28

Доброго времени суток. Василий подскажи плиз в чем может быть проблема? на одном сайте все ок на другом нет! попытка добавления тикета --> У вас недостаточно прав для этого действия. Группу пользователей создал, указал её в HybridAuth и назначил ей политику доступа TicketUserPolicy. Работает только если в редактирование пользователя поставить неограниченные права. Уже измучился, движок 2.5, развернул на новом хостинге, на старом юзал не я, там не знаю как работает!

Юрий Ганс
04.03.2014 23:18

Решил проблему созданием собственной политики

Наумов Алексей
14.03.2014 08:21

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

TicketsMeta ругается "This resource is not instance of Ticket class", ну это ладно, модифицирую этот сниппет. А какие нибудь еще проблемы будут?...

Чикин Артур
14.03.2014 09:03

Будут, с обновлениями будут. Возможно какие то другие скрытые баги будут, индивидуальные только для вас.

Алексей Юмашин
26.03.2014 22:18

Шикарный компонент, Василию огромный респект за его труды!!

ЕвгенийК
09.04.2022 03:35
Это хорошо, что такая возможность есть и может быть использована. А то тенденция, мания, что-то в по...
begoodco1
07.04.2022 05:49
Зарегистрировался чтобы выразить благодарность за доступное и подробное описание процесса. Была возм...
bezumkin
Василий Наумкин
18.03.2022 12:35
Авторизация есть из коробки, для входа в базовую админку. Можно установить через composer и собрать ...
bezumkin
Василий Наумкин
10.03.2022 12:08
Ну, я имел в виду, что по закону можно =) А в реальности с валютой очевидные проблемы.
Сергей Лелеко
04.03.2022 06:12
О как! не знал! спасибо
bezumkin
Василий Наумкин
01.03.2022 15:32
Я делал одного бота на botman/botman, но из-за своей универсальности конкретно с Телеграм на нём раб...
bezumkin
Василий Наумкин
25.02.2022 09:22
P.S. Кажется цитаты у тебя никак не стилизуются в комментариях... Спасибо, поправил!
Electrica
Михаил
08.02.2022 11:19
Работает!
Алексей
09.01.2019 10:55
Насыщенный год ) От души поздравляю с ДР! Счастья, успехов и семейного благополучия! Жаль лимит заме...
septa rose
28.05.2018 22:16
hmmm, keren abis