[Tickets] Версия 1.6.1-pl Рейтинги пользователей
Представляю вам новую версию Tickets 1.6.0-pl, с системой рейтингов. Она написана в рамках нашей краудфандинговой компании, вот beta версия, а вот rc.
В этой версии появлсяются 2 новых объекта: TicketAuthor, связанный с modUser, и TicketAuthorAction. Как нетрудно догадаться, первый объект это профиль автора на сайте, куда пишется:
Во втором объекте у нас данные о всех действиях, нужных для расчета рейтинга:
У секций тикетов появилась новая вкладка «Рейтинги», в которой можно назначать рейтинг за каждый тип событий.

При изменении этих значений рейтинги событий секции пересчитываются. Я постарался сделать это максимально быстро, например, для пересчета всех событий в нашем блоге «Вопросы» (4353 тикета) потребовалось всего 6.8 сек.
В объекте TicketAuthor есть методы addAction и removeAction, которыми пользуются другие классы при сохранении. Например, при голосовании за тикет создаётся объект TicketVote, который при сохранении получает нужный профиль автора и добавляет в него действие.
Рейтинг автора при добавлении или удалении действий пересчитывается, что позволяет поддерживать его актуальность. Если вдруг случилась внештатная ситуация (кто-то вручную поковырял БД), всегда можно обновить рейтинг автора вот так:
Это удалит все действия, связанные с пользователем, забьёт их в базу повторно и пересчитает итоговые цифры в профиле.
Новые профили пользователей можно использовать как своими сниппетами, так и сниппетами pdoTools. Например, вот подключение в pdoUsers и вывод пользователей по рейтингу:
На данный момент весь код в Tickets прилизан, все страницы админки написаны заново, поправлены все ошибки на GitHub, и добавлена продвинутая система рейтингов.
При изменений правил раздела тикетов рейтинг для него пересчитывается. При перемещении тикета в другой раздел, смене его автора, удалении, публикации — пересчитываются рейтинги, связанные с этим тикетом.
Работа проделана очень приличная, и если вы считаете, что изначально поставленную задачу я несколько перевыполнил — прошу не стесняться.
В комментариях можно обсудить предложения о дальнейшем развитии рейтинговой системы, но практически всё можно сделать уже сейчас, работая с TicketAuthorAction. В ближайшее время я переделаю наш раздел пользователей на вывод новых рейтингов.
Обновляемся, создаём профили авторов, радуемся рейтингам и пишем отзывы.
В репозитории уже доступна версия 1.6.1-pl, в которой список рейтингов в профиле значительно расширен.

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

Расшифровка иконок всплывает при наведении мышки. Также title прописан у ячеек с рейтингами.
За столь скорое обновление можно благодарить мистера Сuriosity, который был весьма настойчив.
Новые объекты
В этой версии появлсяются 2 новых объекта: TicketAuthor, связанный с modUser, и TicketAuthorAction. Как нетрудно догадаться, первый объект это профиль автора на сайте, куда пишется:
- Дата создания профиля (регистрация пользователя)
- Последняя активность
- Общий рейтинг
- Количество тикетов
- Количество комментариев
- Просмотров
- Сколько тикетов или комментов автора было добавлено в избранное
- Сколько было отдано голосов за тикеты и комменты автора
Во втором объекте у нас данные о всех действиях, нужных для расчета рейтинга:
- id объекта, к которому было применено действие
- Само действие (ticket, comment, view и т.д.)
- Владелец объекта (получатель рейтинга)
- Рейтинг за действие
- Множитель (нужен для правильного учета голосов и пересчета при смене правил)
- id тикета, хозяина объекта действия
- id секции, в которой лежит этот тикет
- Создатель действия
- Время действия
- Год, месяц и день в отдельных столбцах, для удобной выборки
Логика работы
У секций тикетов появилась новая вкладка «Рейтинги», в которой можно назначать рейтинг за каждый тип событий.

При изменении этих значений рейтинги событий секции пересчитываются. Я постарался сделать это максимально быстро, например, для пересчета всех событий в нашем блоге «Вопросы» (4353 тикета) потребовалось всего 6.8 сек.
В объекте TicketAuthor есть методы addAction и removeAction, которыми пользуются другие классы при сохранении. Например, при голосовании за тикет создаётся объект TicketVote, который при сохранении получает нужный профиль автора и добавляет в него действие.
Рейтинг автора при добавлении или удалении действий пересчитывается, что позволяет поддерживать его актуальность. Если вдруг случилась внештатная ситуация (кто-то вручную поковырял БД), всегда можно обновить рейтинг автора вот так:
$user = $modx->getObject('modUser', 10);
if ($profile = $user->getOne('AuthorProfile')) {
print_r($profile->refreshActions());
} Это удалит все действия, связанные с пользователем, забьёт их в базу повторно и пересчитает итоговые цифры в профиле.
Работа с pdoUsers
Новые профили пользователей можно использовать как своими сниппетами, так и сниппетами pdoTools. Например, вот подключение в pdoUsers и вывод пользователей по рейтингу:
[[!pdoUsers?
&innerJoin=`{"AuthorProfile":{"class":"TicketAuthor"}}`
&sortby=`AuthorProfile.rating`
&sortdir=`DESC`
&select=`{"AuthorProfile":"*"}`
&showLog=`1`
]]Как видите, всё просто и отдельный сниппет для вывода профилей авторов я писать не стал.Заключение
На данный момент весь код в Tickets прилизан, все страницы админки написаны заново, поправлены все ошибки на GitHub, и добавлена продвинутая система рейтингов.
При изменений правил раздела тикетов рейтинг для него пересчитывается. При перемещении тикета в другой раздел, смене его автора, удалении, публикации — пересчитываются рейтинги, связанные с этим тикетом.
Работа проделана очень приличная, и если вы считаете, что изначально поставленную задачу я несколько перевыполнил — прошу не стесняться.
В комментариях можно обсудить предложения о дальнейшем развитии рейтинговой системы, но практически всё можно сделать уже сейчас, работая с TicketAuthorAction. В ближайшее время я переделаю наш раздел пользователей на вывод новых рейтингов.
Обновляемся, создаём профили авторов, радуемся рейтингам и пишем отзывы.
Версия 1.6.1-pl
В репозитории уже доступна версия 1.6.1-pl, в которой список рейтингов в профиле значительно расширен.

Вместо суммы голосов и количества избранного в профиле пользователя теперь есть:
- Общий рейтинг тикетов
- Общий рейтинг комментов
- Количество голосов за тикеты (отдельно за и против)
- Количество голосов за комменты (отдельно за и против)
- Количество добавлений тикетов в избранное
- Количество добавлений комментариев в избранное
Все колонки в таблицу не входят, поэтому вместо заголовков используются иконки + некоторые столбцы скрыты по умолчанию. Но вы можете их включить в меню колонок и это сохранится в куки.

Расшифровка иконок всплывает при наведении мышки. Также title прописан у ячеек с рейтингами.
За столь скорое обновление можно благодарить мистера Сuriosity, который был весьма настойчив.
Комментарии: 193
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Еще бы тэги из коробки.
Не туда ответил(
ПашокПашокНе интересно, почему я пишу приставку не «бес», а «без»?)) В слове «безплатный», например…
Просто мне не хочется, чтобы наше сообщество стало филиалом Вконтакте.
ПашокЭто там все пишут не как в школе учили, а как нравится. Когда я вижу такое здесь — расстраиваюсь.
Понятное дело, что не все мы ставим верно запятые (и я в том числе), но стараться-то нужно! Зачем коверкать слова специально — понимать отказываюсь.
ПашокМенять ударения, или пояснять скрытый смысл собеседнику отдельно, размахивая руками? «Да ты чо, я же не просто спасибо сказал, я тебе благо подарил!»
Вот до чего доводит отказ от советской программы в школе и повсеместное ЕГЭ.
ПашокВасилий, я не считаю за ошибку это, т.к. подобные нововведения с приставками и другими моментами в русском языке начались относительно недавно. Ещё к концу 19 века люди употребляли приставку «без». И говоря или читая слово «БлагоДарю» человек не всегда ощущает его истинный смысл и силу. Когда я выражаю благодарность, я стараюсь выделить в этом слове то, что я тем самым Дарю Благо тому человеку, который заслужил это.
Кто-то может возразить, что наука с каждым годом прогрессирует и всё постоянно меняется, некоторые законы физики, которые были приняты учёными ещё в 50х гг прошлого века в наше время опровергают. Однако язык — это не наука, это наследие предков. Чем сложнее язык, тем он насыщеннее, и тем глубже мыслит человек думающий на этом языке, и напротив — чем примитивнее язык, тем примитивнее мышление на этом языке. А у нас почему-то всеми возможными способами урезают и азбуку, которая отныне алфавит состоящий из 33 букв.
P.S.: В школе много чему учили, только почему-то ныне всё чаще убеждаюсь в том, что многое из того либо не пригождается, либо чушь.
P.P.S.: Не собираюсь продолжать этот спор ни с тобой, ни с кем-либо другим, поэтому если будут возражения тому, что я здесь написал — не удивляйтесь игнорированию. :)
Не даришь ты никакое благо, ты пытаешься выразить свои мысли в письменном виде. Чтобы люди тебя понимали, и не считали за
малолетнего дурачканеграмотного, нужно использовать общепринятые нормы и правила русского языка.Здесь — сообщество программистов. То есть людей, который пишут и понимают программный код, уважают его правила и улавливают разницу между нулём и единицей.
Мы говорим на русском, а не на каком-то новоязе или наречии 19го века. В русском языке принято писать слова без заглавных в середине, и приставки использовать согласно правил, а не как красивее выглядит.
У меня накипело, честно.
ПашокДетский сад какой-то. Будет за что — отключу, а пока только прошу, по-хорошему, не приносить к нам сюда всякую дурь.
ПашокP.S.: Или может ты обязуешь всех перед регистрацией в сообществе прочитать, выучить, и пересказать тебе все правила русского языка?)) Ну так, вместо капчи. Как тебе идея? :))) Чтобы не кипело больше ничего там у тебя, а Вась? :))
Теперь я буду знать, что ты — малолетний дурачок, русского языка не понимаешь и общаться с тобой нужно соответствующе.
Хотел выделиться — у тебя это получилось, поздравляю.
ПашокЗадели бы меня твои слова, Вась, если б ты являлся для меня человеком уважаемым. :)
Я тебя уважаю, как программиста, потому что ты действительно хороший программист. За твои труды не раз выражал тебе БлагоДарность и не постесняюсь выразить снова. Но как человека… увы… не могу проникнуться уважением к тому, кто открыто рекламирует в своём блоге бутылку яда, которую ему прислали в подарок. ;)
Считаю прямоту за качество в человеке. Если задели мои слова, значит стоит разобраться в себе.
Здесь он пока себя держит в руках, но высший разум иногда проскакивает.
Взял на заметку.
ПашокЕсли ты полезешь «в бутылку», то откроешь ящик Пандоры и к вечеру здесь будут десятки оранжевых квадратиков вместо комментариев)
Но да ладно, к сути.
Я постараюсь коротко и поэтому приведу такую аналогию.
Вот бывают взрослые, а бывают дети. У них совершенно разные уровни компетенции в познании окружающего мира. И вот тогда взрослый в рамках своей компетенции объясняет многие очевидные для себя, но совершенно не очевидные для ребёнка, вещи.
Ребёнок может верить на слово, может проверять всё опытным путём, набивая собственные шишки (к примеру засовывать пальцы в розетку), а может (в силу своей неопытности и, чего уж, глупости) забить хер на все рассказы, объяснения и заверения взрослого человека и жить в своём собственном выдуманном мире.
И вот объясняешь ты такой этому ребёнку, который ничего слышать не хочет, объясняешь, объясняешь… объясняешь…
Но ребёнок не понимает очевидного — его персональное видение фактов окружающего мира не отменяет настоящий смысл этих фактов.
Скажу проще — окружающему миру глубоко фиолетово, что красное ребёнок видит зелёным, а оранжевое — серым. Персональное видение конкретной особи не отменяет того, что красное — это красное, а оранжевое — оранжевое.
(хотя цвет — это вопрос больше филосовский, но сейчас не об этом)
И вот если таким ребёнком никто не занимается, то из него вырастает гуманитарий, «я-художник-я-так-вижу» или (что ещё хуже) либерал.
И вот как ты думаешь — как люди, которые понимают (это ключевое слово) некомпетентность маленького ребёнка или такого вот «художника», будут смотреть на них со стороны? Есть варианты?
А я тебе скажу — здесь 3 стадии:
1. Снисходительность. Тобишь, простыми словами, как на глупенького.
2. Снисходительность будет длиться до тех пор, пока такие люди, считая себя самыми умными, не начинают лезть со своим видением в жизнь других, навязывая им это своё видение. Естессна, у людей с более высокой компетенцией ничего кроме раздражения это вызывать не будет.
3. Ну и, если эго таких людей не образумилось, ничего, кроме отвращения, они у социума уже не вызывают.
(кстати, ничем пида.асов не напоминает? ну тех самых, которые с радужными флагами, всюду выпячивают своё «видение»)
И скитается потом этот «художник» по разным социумам и везде проходит эти три стадии. И сидит такой на весь мир обиженный и размышляет — «А чего это все вокруг такие охуевшие? За что они меня так ненавидят?».
Но не понимает бедный «художник» причинно-следственной связи, гуманитарий он, всё видит по-своему.
Меняет одну работу, вторую — везде его не понимают. До тех пор пока не натыкается на сайт «эха москвы» или не встречает стайку других таких же самопровозглашённых «особенных».
Ну дальше вы поняли.
Ну и собссна, к чему всё это.
Мне кажется это очевидным, но тебе, скорей всего, придётся подсказать — в этой самой аналогии ты тот самый маленький ребёнок, который пошёл по третьему пути, со всеми вытекающими.
И вот в этой ветке за пяток комментариев ты прошёл все три стадии. Умудрился же ведь.
Но эта аналогия относится больше к тому диалогу.
С текущим диалогом всё проще.
В разных кругах приняты свои нормы поведения, общения и ведения диалога. Так вот.
Тебе говорят — в текущем сообществе ты делаешь что-то, чего в этом сообществе не принято.
Но ты ложишь на это хер с высокой колокольни, мотивируя это тем, что «я-так-вижу».
Пришёл в сообщество — будь добр соблюдать устоявшиеся здесь нормы общения и поведения. Не хочешь? Ну так тогда не удивляйся, что тебе высказали персональное «фу» на эту тему. А если снова дойдёшь до 3й стадии — не удивляйся, что тебя забанят.
Не надо искать проблемы в других. Начни с себя. Это вообще должно быть жизненным кредом.
Печально, что такое нужно объяснять.
Конечно, все мы люди, где-то не можем сдержать эмоции, где-то грубим. Мои комментарии тоже не раз удалялись. Но я же не говорю, мол, «Вась, с хера ли? Чо, правда глаза режет?». Не говорю, потому что понимаю, что палку перегибал. Но ты же…
И да, полемика у тебя отвратительная — прикидываясь белым и пушистым, завуалированно оскорбляешь собеседника, в собственном глазу бельма не замечая.
А не пгм'нутый ли ты часом?
upd. обидно то, что ты, скорей всего, ничему не внемлишь, а я в очередной раз зря потратил на тебя время. Ну да ладно, раз уж написал — не удалять ведь.
ПашокВ спор с тобой вступать не собираюсь, ибо не вижу смысла. Да и в любом споре нет его. Истина рождается в обсуждении. А ты мне предлагаешь вступить в полемику. Я не являюсь особью женского пола, чтобы опускаться до споров. ;) Спорь с кем-нибудь другим, кто более подходит под данный тип.
Есть такое психологическое понятие — «Проекции», почитай об этом, может что-то станет понятно. Например, почему некоторые люди (к примеру, «пида.асы», как ты их назвал), тебя раздражают.
Про нормы поведения. Я проявил какое-то неуважительное поведение? Если я пишу слово «БлагоДарю» не так, как приятно видеть это Васе — это означает, что я веду себя неуважительно по отношению к данному сообществу? Позволь узнать, а где уважение того, кто лезет в общение между двумя людьми, называя одного из них «тугим»? Я считаю, что подобное поведение граничит с женским настроением в «критические» дни, когда ей что-то не нравится и она ищет любой повод придраться.
P.S.: А пример с поведением ребёнка тут неуместен. Любое поведение ребёнка зависит от воспитательного процесса того самого «взрослого», о котором ты упомянул. Поэтому данный пример на мой взгляд не более чем глупость.
P.P.S.: И я ни кем не прикидываюсь. Оскорбляю? Да нееет. :) А вот как понимать мои слова — каждый для себя решает сам. Кто-то видит в них оскорбление, кто-то нечто другое.
Удачи тебе. Более «срач» в этом топике от моего лица продолжаться не будет. И если ты напишешь мне ответ, велика вероятность того, что он так и останется непрочитанным мною. Да и кто знает, может Василий найдёт повод хоть в этом сообщении заблокировать меня. :))
Ты как считал себя умнее остальных, так и продолжаешь считать. Как ударялся в завуалированные оскорбления прикидываясь белой овечкой, так и продолжаешь.
Безнадёга
Здесь нет демократии, здесь сплошной тоталитаризм. Именно поэтому наше сообщество самое живое и рабочее из всех аналогов.
За всё время с 2012 года, вместе с bezumkin.ru я заблокировал 48 учетных записей, включая 2 твоих (одна с email niibaca-nah@почтовыйсервис).
Если хочешь, чтобы их стало 49 — продолжай в том же стиле. Показательные расстрелы укрепляют моральных дух коллектива.
ПашокИ ты нам после этого рассказываешь про силу слов и высокий смысл?
Атас!
ПашокЯ не собираюсь ни перед кем оправдываться, почему по сей день пользуюсь, или зачем вообще создавался такой ящик. Скажу лишь, что ящик создавался в 2004 году, думаю прозрение придёт к здравым самостоятельно без вмешательства моих рассказов о том, какими мыслями я тогда руководствовался и какой образ жизни вёл.
Перестань уже искать повод поругаться. Мне это не интересно. БлагоДарю за понимание.
Всего хорошего, благодарю за понимание.
ПашокВот скажи мне, Вася, кто в таком случае считает себя умнее других («высшим разумом», как ты «гениально» решил меня подколоть), я или ты? Откуда у тебя знание о том, что тот русский язык, которым оперируешь ты, в общении с людьми, правильнее моего, которым оперирую я? Насколько это не личное? Помоему, Василий, вы слишком зазнались и не видите грани между личной неприязнью и нормами поведения.
Легко за толщиной экрана проявлять поведение альфа-самца, сидя в одиночестве в комнате, когда на тебя не влияет социум. И куда тяжелее сделать или сказать что-то в глаза человеку при личной встрече. Знакомо?
Если тебя так это парило всё это время, то почему ты проявил подобное поведение только сейчас? Я несколько раз произносил в процессе нашей беседы (а как я теперь понимаю, лишь для меня таковой, а для тебя гневным спором с лицом, к которому ты испытываешь личностную неприязнь) слово "БлагоДарю", и только лишь в предыдущем моём сообщении, когда я задел тебя за то, что способно было вывести тебя из себя и проявить твою истинную суть (я про твой эгоизм и моё спокойствие на твой очередной «подкол»), ты «принял» решение меня заблокировать? Как-то не сходится особо, не так ли, Василий?
P.S.: Конечно, определённо ты это сообщение удалишь, т.к. не хочешь выглядеть в глазах сообщества тираном или девочкой (на выбор, как тебе больше нравится), и забанишь меня снова (эх, в какой там уже раз, в 4ый? :))), однако тебе тем самым не поменять свою суть, Вася, это делается несколько иначе.
P.P.S.: И кстати твою «шутку» про преподобного я не понял. Наверное у меня что-то с чувством юмора, да, Вась?))))
Остальные удалю, да. Потому что всё происходит именно так, как Алексей выше описал.
Будь ты поумнее, просто перестал бы нарываться еще когда с тобой вежливо разговаривали.
Василий как с Вами можно связаться?
Хочу Вам предложить не бедный проект)
Всё очень глубоко завязано на разделы тикетов с их настройками (ты же сам просил, помнишь?), а у товаров настроек нет.
Но, в теории, наверное, можно научить MS2 через плагины создавать TicketAuthorAction при создании товаров. Может быть, когда-нибудь…
Пусть сначала рейтинги устаканятся в самих тикетах, как было с голосованием и функционалом только для авторизованных.
Спасибо за проделанную работу.
Медаль «Медаль».
Да и не думаю, что у нас здесь нужны какие-то медали.
Вот смотри: комментарии можно оставлять не только к тикетам же, так? Почему же не добавлять рейтинг за эти комментарии? Правда придется продублировать очки рейтинга в настройках видимо, т.к. сейчас они только у секции…
Стоит только вынести настройки рейтинга в системные — сразу спросят, а как задать отдельно для категории товара или страницы? В ТВ JSON массив указывать или что?
Поэтому пока Система рейтингов привязана к тикетам и секциям тикетов намертво. Обкатаем, понаблюдаем, потом что-то придумаем (возможно).
У них структура постоянна, я знаю как получить настройки. В других случаях вообще не ясно, как брать рейтинг, какова структура разделов, что делать с разными уровнями вложения ресурсов?
Пока придумал только подключать отдельный таб для ресурсов с настройками, по типу ms2Gallery, но желания как-то нет.
1. Основной «источник» настроек очков рейтинга — в системных настройках. Это логично, на то они и настройки. Пусть там же будут и настройки для начисления очков.
2. Для тикетов — дополнительная возможность переопределить их через вкладку у секий, как сделано сейчас. Это тоже удобно, т.к. для каждой секции мы указываем ее значимость. К примеру на modx.pro секция Вопросы мало значима, а секция Готовые решения — дает высокий рейтинг.
3. Что делать с остальными страницами… действительно, четкого видения нет, либо пусть их настройки будут те, что в п.1 и нечего заморачивться, либо… как ты сказал, например отдельная вкладка. Можно ее показывать для ресурсов с определенным шаблоном или id.
Но в принципе пункт 3 можно сделать и потом) а вот почему сразу ты сделал сразу более сложный пункт 2 вместо более простого пункта 1 я не понял =)
Ну и вообще, покопай подробно код изменений, там много станет понятно.
К примеру, из коробки создаются TVпараметры с уникальными названиями, например:
TVrateTickets, TVrateComments, TVrateStars,…
В значениях по умолчанию прописать уже какие-то балы.
А админ уже сам будет решать, в какие шаблоны включать все эти TVпараметры, а в какие нет. Так же он будет сам решать, какие значения будут в этих TV для каждого раздела или даже ресурса.
Ну а подсчет рейтинга всегда будет зависеть от значений в TVrateTickets, TVrateComments, TVrateStars…
Комментарий я оставил относительно применения голосования ко всем ресурсам. И всего лишь как вариант… достаточно гибкий вариант…
Но, судя по вашему саркастически-стёбному ответу, этот вариант совсем никудышный и совсем не рассматривается.
Подскажите.
Если мне надо вывести, то, понятно, я вывожу такие плейсхолдеры:
+votes = количество голосов, которые поставили пользователи
+comments = Количество комментариев, которые оставил пользователь
А как вывести количество голосов за комментарии пользователя?
Это ж очень важный пункт, который всегда может пригодится.
Вы представьте, если на стрице рейтинга выводить 500 пользователей:
Где у каждого будет выводиться:
— количество оставленных тикетов;
— количество оставленных комментариев;
— количество просмотров тикетов пользователя;
— количество звезд (кол-во пользовоталей, которые добавили в избранное);
— количество голосов за тикеты пользователя;
— количество голосов за комментарии пользователя.
Одно дело, когда все берется с одной таблицы (все пункты, кроме последнего), и другое дело, когда нужно делать дополнительный запрос к другой таблице (где нужно еще подсчитать… а если таких комментов 1000 у каждого юзера, так вообще жесть).
Если вы внесете в табилцу tickets_authors подсчет голосов за комментарии, это решит вопрос многих разработчиков сайтов с элементами соцсети.
Василий, я понимаю, что вам далеко не комильфо принимать всякие хотелки, которые под ваши цели не нужны. Но не судите сразу строго. Подумайте, какие возможности это может дать другим, в том числе и вам.
Например:
можно выводить все эти данные и на основе их составлять свой рейтинг (где одну из ключевых ролей играет и голосование за комментарии пользователя).
Вместо количества строк можно брать и SUM(value).
Пока с тикетами я закончил. Когда соберусь что-то улучшать — не знаю, только багфиксы уже сделанного.
Вы говорите, что устали. Надеюсь, оплата этого момента (нужного для многих хоть они и сами этого не знают) вас промотивирует…
P.S. я не резидент РФ. напрямую с карты не получается. Пей пал — эт какая-то чертовщина, Киви вообще для каких-то умолишенных… а через вебмани тройные комиссии… вначале за конвертацию, потом доходит до третьего лица, а потом третье лицо уже шлет вам… жесть какая-то.
P.P.S. Зайдите пожалуйста на пару минут в скайп.
Завтра сделаю и выложу обновление.
Василий, подводя итоги, просьба:
В таблице tickets_authors добавить:
— подсчет суммы голосов пользователей за тикеты текущего пользователя;
— подсчет суммы голосов пользователей за комментарии текущего пользователя;
В идеале было бы хорошо, если б там же были колонки:
— количество положительных голосов за тикеты текущего пользователя;
— количество отрицательных голосов за тикеты текущего пользователя;
— количество положительных голосов за комментарии текущего пользователя;
— количество отрицательных голосов за комментарии текущего пользователя;
Соостветственно, если будет и возможность фильтровать по этим параметрам в админке, то вообще будет супер…
Можно будет видеть яростных рецидивистов и ангелов проекта…
P.S. Ну и соответствующие плейсхолдеры.
P.P.S. Весело пляшу у рабочего стола…
Дополнил заметку, см. в конце.
Но в самой таблице отсутствует соответствующий столбец.
Надо разделить:
Голоса за посты и голоса за комменты.
Так ждал этого релиза, а теперь аж голова бо…
Вот здесь заказчик расписывает план работ. Как видно, я выполнил значительно больше заявленного, а голосов и избранного и вовсе в плане не было — личная инициатива.
В общем, ты меня удивляешь.
:(
Поправил, обновил пакет и скриншот в заметке.
ибо через getTickets нельзя сортировать по tickets и views
Изначально это было из коробки, но убрал из-за тормозов.
В процессоре присоединяется TicketThread через колонку resource и там уже получаются комментарии.
В процессоре в методе prepareQueryBeforeCount формируется верный запрос, и при его выполнении в pma комментарии считаются, а в prepareRow уже поле comments равно 0. Странная ситуация.
Проверь, может у тебя туда ничего не пишется? Или структура таблицы неверная?
в инструментах разработчика браузера при обновлении списка в админке получаю запрос:
Иду с ним в phpMyAdmin — все ок, колонка comments есть, цифры в ней есть.
А куда они потом пропадают — не пойму. Хотя уже 100 раз код сам проверил, вроде все в порядке.
Василий, а может здесь на modx.pro cделать виджет по типу «Прямой эфир», который будет выводить ежемесячную статистику?
Это последний этап твоего плана, мы его оставим на потом.
Бэкапы есть? Если сайт у нас на хостинге — скажи, я восстановлю только эту таблицу.
Более всего интересно посмотреть на профессиональные сообщества, наподобие modx.pro.
Осталось только плоский режим комментариев сделать и вообще будет не отличить.
Хорошо сделан.
Отсюда вторая проблема, что при изменении этих системных настроек нужно будет заново рассчитать все рейтингов для всех документов раздела, что может просто повесить сайт.
А третья проблема в том, что при смене создателя документа или переносе в другой раздел, в классе Ticket делаются проверки и рейтинг пересчитывается. Как это делать с обычным ресурсом — непонятно. Через системный плагин только.
В общем, получается какой-то бред. Я же не просто так сделал классы Ticket и TicketsSection. Явно не для того, чтобы потом весь их функционал пихать в ресурсы, только через, пардон, задний проход.
Считать рейтинг за создание modResource и за плюсы к ним совсем не нужно, ведь их администратор добавляет, а не пользователи. Много ли ситуаций, когда ресурсы-не тикеты добавляют пользователи?..
Остаются тогда только действия добавления комментария, голос за комментарий, добавление в избранное.
Может только эти действия считать тогда у НЕ тикетов?
Тогда общие системные настройки для всех комментов, просмотров и избранного, индивидуальные для тикетов и их разделов. Готов сделать за еще 5000 рублей.
P.S. Видел еще вчера, но был настолько занят, что не мог добраться к комментированию этой хорошей новости! Но, как говорится, лучше поздно, чем никогда…
Дело в том, что я пока не программист, а потому для меня это вопрос, пока сложный. Но логически понимаю, что дело в нескольких не сложных строчках нового сниппета.
Вот так я вывожу рейтинг списка пользователей с цифрами их заслуг:
В чанеке «tpl_rating_users» соответственно оформление выводов строк.
Теперь, собственно, просьба…
Мне нужен сниппет, который должен давать два плейсхолдера:
1) maxticketsvote — выводит максимальное значение из массива общего рейтинга тикетов.
2) maxcommvote — выводит максимальное значение из массива общего рейтинга комментариев.
Пример:
Петрову дали = 10 голосов за его тикеты и 5 голосов за его комменты.
Сидорову дали = 5 голосов за его тикеты и 10 голосов за его комменты.
Иванову дали = 12 голосов за его тикеты и 9 голосов за его комменты.
Результат сниппета:
1) maxticketsvote = 12
2) maxcommvote = 10
Василий, пожалуйста, подарите этот сниппет вашему доброжелателю. :)
После вызова можно использовать плейсхолдеры
Единственное, поправьте немного ваш ответ… в
скорей всего нужно не складывать, а вычитать… потому как в таблице БД только положительные цифры…
тоесть должно быть так:
Поправьте меня, если ошибаюсь…
Если нужна сумма голосов, то можно выбрать MAX(vote_tickets) и MAX(vote_comments) — это и есть суммы рейтинга.
Пожалуйста, подскажите.
Я вызываю два сниппета:
1-й — тот, что вы написали чуть выше (находит максимальное значение в массиве голосов за тикеты и комменты). Он дает мне два значения: [[+maxticketsvote]] и [[+maxcommvote]]
и
2-й сниппет:
Мне нужно, чтоб при выводе результатов сниппета pdoUsers, помимо всех его плейсхолдеров выводилося плейсхолдер, например: «ticketprocent».
Моя задача:
Голоса за тикеты = [[+votes_tickets]] = X;
Максимальное значение голоса за тикеты = [[+maxticketsvote]] = Y
Плейсхолдер [[+ticketprocent]] = Z = X / Y *100;
Василий, благодаря вашему ответу, я уже понял, как сниппетом создать свой плейсхолдер и, более-менее, понял, как делать выборку из нужной мне таблицы БД. Как написать на php формулу подсчета плейсхолдера [[+ticketprocent]] я тоже знаю.
Мое замешательство в том, какой мой порядок действий? Куда мне нужно вписать несколько строк кода, который создаст плейсхолдер Z, который будет выводить: X / Y *100? Или как я могу в выдаче pdoUsers делать какие-то математические манипуляции с плейсхолдерами? Может все гораздо проще и я захожу не с той стороны…
Если коротко, то мне, вызывая pdoUsers, нужно получить результат:
— Пользователь Петров получил: 10 балов за тикеты, что составляет Z процентов;
— Пользователь Иванов получил: 8 балов за тикеты, что составляет Z процентов;
— Пользователь Сидоров получил: 5 балов за тикеты, что составляет Z процентов.
Соответственное, если в массиве максимальное значение =10, то вместо Z было бы: 100, 80, 50.
Пожалуйста, помогите мистеру Сuriosity.
А вызов этого третьего сниппета вставил в шаблон вывода сниппета pdoUsers.
Пока не знаю насколько это оптимально, но главное, что работает…
P.S. На самом деле я сделал так изначально, но результат выдывало = 0;
Оказалось, что я не внимательно прописал один плейсхолдер pdoUsers.
У меня в чанке tpl_rating_users вызывается еще один сниппет (VoteProcent), который, например, умножает один плейсхолдер выданый pdoUsers на другой, после чего выдает свой плейсхолдер [[+ticketprocent]].
Как мне, вызывая pdoUsers, сделать сортировку выдачи по плейсхолдеру [[+ticketprocent]]?
Сортировка происходит в базе данных при выборке результатов, а сторонний сниппет работает уже позже, оформляя данные.
В плагине
В документе
Количество выводящихся тикетов всегда больше чем значение в плейсхолдере, иногда на много.
И в админке на вкладке авторы тоже не верные данные выводятся.
У нас здесь всё считается точно, насколько я вижу.
По данным таблицы tickets_authors — такое ощущение что данные в колонках stars_tickets и stars_comments заполняются не по столбцу createdby таблицы tickets_stars, а по столбцу owner той же таблицы.
Василий, где то есть ошибка.
Ты бы заметку то прочитал, там это написано:
Кстати, попробуйте закрыть ветвь в которой нет комментариев.
Ну сделай тогда ТВ параметр disable_comments:
Зачем тебе кривобокий Tickets, где нет важнейшей функции, которая за 2.5 года его существования, вдруг оказалась необходимой только тебе?
Ну так возьми и задокументируй — возможность для этого давно есть. Сядь вот на майские праздники и напиши всё, что знаешь о Tickets в документации, а я проверю потом и добавлю в репозиторий.
Нет желания? Ну так и у меня нет, уже давно надоело жилы рвать ради неблагодарности.
Слабо назвать дополнения для блогов и комментариев MODX с требуемой тобой настройкой?
Подскажите, пожалуйста, что не так у меня в настройках комментариев Tickets.
Не работает предпросмотр и комментарии не отправляются.
Журнал ошибок (я, пока, не понимаю, как разобраться какие тут ошибки):
Всё заработало.
— рейтинг автора;
— количество лайков за посты автора;
— количество добавленных им в избранное;
— в общем те значения, что находятся в таблице tickets_authors.
Интересует, чтоб выводило в панелях как в общей ленте. Вызывая, например, так:
[[!pdoPage? &element=`getTickets` &tpl=`tpl_Tickets.list.row`]]
Так и в панели по самим тикетом. Вызывая, например, так:
[[!TicketMeta? &tpl=`tpl_Tickets.meta`]]
Вопрос, можно ли в вызове этих сниппетов, прописать какой-то параметр, который будет делать дополнительную выборку в таблице tickets_authors и отдавать соответствующие плейсхолдеры?
Если нет, то как оптимально это реализовать?
Можно, если хочу вывести ленту тикетов, при вызове [[!pdoPage? &element=`getTickets` &tpl=`tpl_Tickets.list.row`]]
Использовать в шаблоне tpl_Tickets.list.row вызов еще одного сниппета
[[!pdoUsers?
&tpl=`tpl-user-meta-info`
&groups=`users`
&users=`-1,[[*createdby:userinfo=`id`]]`
&innerJoin=`{«AuthorProfile»:{«class»:«TicketAuthor»}}`
&sortby=`AuthorProfile.rating`
&sortdir=`DESC`
&select=`{«AuthorProfile»:"*"}`
]]
А если зайти на сам тикет, то под контентом вызвать не только [[!TicketMeta? &tpl=`tpl_Tickets.meta`]]
, а еще и pdoUsers.
Но, думается мне, это как-то уж совсем не оптимально…
Василий, подскажите как быть, направьте на правильный путь…
Если это так, то, возможно, стоит внести изменения?)
Это было бы логично, чтоб в панели под тикетами были не только: количество просмотров, количество голосов и звезд, но и рейтинг пользователя…
Василий, подскажите, как оптимальней реализовать вопрос, что чуть выше?
А В TicketsMeta, может, и стоит добавить, но я пока занят другими делами.
У меня, по умолчанию, скрыта кнопка «Написать комментарий» и выводится «форма для комментирования».
Спасибо.
#comment-form { display: none; }действующий сайт v-otpyske.ru/tour.html
1. просмотр страницы считается только зарегеным пользователем? Если да, то как сделать подсчет любого посетителя?
2. выставлять оценку могут тока зарегеные пользователи? Если да, то как сделать, чтобы могли все это делать?
Надеюсь, Вы мне поможете.
Я на своём сайте установил tickets-1.4.2-pl, настроил комментарии по схеме, предложенной Сергеем Шлоковым (https://modx.pro/solutions/4057-tikets-book-reviews-with-ajax-loading/). Но возник один вопрос, с которым Сергей порекомендовал обратиться к Вам.
В форме для написания комментария есть только поля для имени автора и email. Каким образом и что нужно прописать в чанках и сниппетах, чтобы добавить поле «Сайт», url из которого будет возвращаться как ссылка с анкором «Имя автора»?
Я совершенно не разбираюсь в php и написании сниппетов для MODX, поэтому вряд ли пойму ответ, написанный для разработчика. Если не трудно, то, пожалуйста, напишите конкретно, какой код куда вставить.
Вот, например, в чанке tpl.Tickets.comment.form.guest есть такой блок:
Как мне надо переделать этот блок, чтобы он стал полем для URL сайта? И что ещё нужно изменить в других чанках или сниппетах, чтобы всё это работало?
Спасибо.
порой в ошибка появляется
Отчего это?
очень не хватает в тикетах кнопок «Предыдущий тикет»,
«Вверх»и «Следующий тикет», как это реализовано в товарах в минишопе.Приходится постоянно возвращаться к секции тикетов, искать отредактированный тикет и переходить к следующему, а это ужасно неудобно, когда тикетов очень много! Неудобно, потому что тикеты в дереве не отображаются, и приходится долго искать соседний.
На компьютере мышкой ещё нажимал на среднюю кнопку мыши для открытия статьи в соседней вкладке, но на ноутбуке это очень неудобно…
По всему остальному — планов улучшать Tickets у меня нет, никто не горит это оплачивать.
А сколько ты возьмёшь за добавление кнопок «Назад» и «Вперёд»? Может быть есть смысл собраться и оплатить — функция нужная и подразумевающаяся во всех структурах, которые работают на тикетах.
Теперь при оправке тикета с фото, с фронта не меняются пути картинки с 0 на id, остаются /assets/images/tickets/0/… причем все отображается, картинка помещается в папку 0
Все изменения откатил и попробовал обновить только Tickets, не трогая modx. Ситуация та же.
Возможно ли отправлять уведомление о комменте на email администратору?
Благодарен за труб.
Конечно, есть специальные системные настройки для уведомлений админов.
$fields = array();
$fields['thread'] = 'resource-507';
$fields['text'] = $text;
$fields['email'] = $email;
$otherProps = array(
'processors_path' => $modx->getOption('core_path'). 'components/tickets/processors/'
);
$response = $modx->runProcessor('web/comment/create', $fields, $otherProps);
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'comment error, Message: '.$response->getMessage());
return 'error comment';
}
Спасибо
Выставлено не показывать, но в новых тикетах все равно приходится проставлять данную позицию в ручную.
Подскажите как поправить.
Спасибо.
Или кэш, или ты меняешь параметр в наборе Tickets, а проверяешь в комментариях, у которых свой набор Comment.
П.С. В предыдущем комментарии хотел обратить внимание на отсутствие лексикона для двух параметров.
У меня логика построена на этом коде, который у меня не работает. И в Console тоже уходит в бесконечное выполнение…
Мне кажется, ты мог бы просто посмотреть, какие вообще методы есть в TicketAuthor, чем просто ждать ответа полгода.
Спасибо за поправку!
Установили на новый сайт, создали раздел с тикетами, создаем тикет — нет кнопок сохранить, просмотр и т.п.
В чем может быть дело?
Полагаю, с ней все будет норм.