Сuriosity

Сuriosity

С нами с 19 марта 2015; Место в рейтинге пользователей: #170
Сuriosity
05 мая 2015, 20:51
0
Василий, пожалуйста, подскажите, как в панели статистик, что под каждым тикетом, кроме всего прочего, вывести плейсхолдеры:
— рейтинг автора;
— количество лайков за посты автора;
— количество добавленных им в избранное;
— в общем те значения, что находятся в таблице tickets_authors.

Интересует, чтоб выводило в панелях как в общей ленте. Вызывая, например, так:
[[!pdoPage? &element=`getTickets` &tpl=`tpl_Tickets.list.row`]]

Так и в панели по самим тикетом. Вызывая, например, так:
[[!TicketMeta? &tpl=`tpl_Tickets.meta`]]

Вопрос, можно ли в вызове этих сниппетов, прописать какой-то параметр, который будет делать дополнительную выборку в таблице tickets_authors и отдавать соответствующие плейсхолдеры?
Если нет, то как оптимально это реализовать?
Сuriosity
02 мая 2015, 06:43
0
Василий, пожалуйста подскажите. Можно ли сортировать выдачу pdoUsers по плейсхолдеру стороннего сниппета?
[[!pdoUsers? &tpl=`tpl_rating_users` …]]
У меня в чанке tpl_rating_users вызывается еще один сниппет (VoteProcent), который, например, умножает один плейсхолдер выданый pdoUsers на другой, после чего выдает свой плейсхолдер [[+ticketprocent]].
Как мне, вызывая pdoUsers, сделать сортировку выдачи по плейсхолдеру [[+ticketprocent]]?
Сuriosity
02 мая 2015, 00:53
0
Решил вопрос тем, что формулу Z = X / Y *100 запихнул в третий сниппет.
А вызов этого третьего сниппета вставил в шаблон вывода сниппета pdoUsers.
Пока не знаю насколько это оптимально, но главное, что работает…

P.S. На самом деле я сделал так изначально, но результат выдывало = 0;
Оказалось, что я не внимательно прописал один плейсхолдер pdoUsers.
Сuriosity
01 мая 2015, 23:12
0
Василий, я опять в замешательстве…
Пожалуйста, подскажите.
Я вызываю два сниппета:
1-й — тот, что вы написали чуть выше (находит максимальное значение в массиве голосов за тикеты и комменты). Он дает мне два значения: [[+maxticketsvote]] и [[+maxcommvote]]
и
2-й сниппет:
[[!pdoUsers?
&tpl=`tpl_rating_users`
&innerJoin=`{"AuthorProfile":{"class":"TicketAuthor"}}`
&sortby=`AuthorProfile.rating`
&sortdir=`DESC`
&select=`{"AuthorProfile":"*"}`
&showLog=`1`
]]
Мне нужно, чтоб при выводе результатов сниппета 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.
Сuriosity
01 мая 2015, 21:00
0
Василий, еще раз СПАСИБО!
Единственное, поправьте немного ваш ответ… в
$c->select('MAX(votes_comments_up + votes_comments_down)');
скорей всего нужно не складывать, а вычитать… потому как в таблице БД только положительные цифры…
тоесть должно быть так:
$pls = array();

$c = $modx->newQuery('TicketAuthor');
$c->select('MAX(votes_tickets_up - votes_tickets_down)');
if ($c->prepare() && $c->stmt->execute()) {
	$pls['maxticketsvote'] = $c->stmt->fetchColumn();
}

$c = $modx->newQuery('TicketAuthor');
$c->select('MAX(votes_comments_up - votes_comments_down)');
if ($c->prepare() && $c->stmt->execute()) {
	$pls['maxcommvote'] = $c->stmt->fetchColumn();
}

$modx->setPlaceholders($pls);
Поправьте меня, если ошибаюсь…
Сuriosity
01 мая 2015, 20:16
0
Василий, у меня еще одна маленькая просьба…
Дело в том, что я пока не программист, а потому для меня это вопрос, пока сложный. Но логически понимаю, что дело в нескольких не сложных строчках нового сниппета.
Вот так я вывожу рейтинг списка пользователей с цифрами их заслуг:
[[!pdoUsers?
&tpl=`tpl_rating_users`
&innerJoin=`{"AuthorProfile":{"class":"TicketAuthor"}}`
&sortby=`AuthorProfile.rating`
&sortdir=`DESC`
&select=`{"AuthorProfile":"*"}`
&showLog=`1`
]]
В чанеке «tpl_rating_users» соответственно оформление выводов строк.

Теперь, собственно, просьба
Мне нужен сниппет, который должен давать два плейсхолдера:
1) maxticketsvote — выводит максимальное значение из массива общего рейтинга тикетов.
2) maxcommvote — выводит максимальное значение из массива общего рейтинга комментариев.

Пример:
Петрову дали = 10 голосов за его тикеты и 5 голосов за его комменты.
Сидорову дали = 5 голосов за его тикеты и 10 голосов за его комменты.
Иванову дали = 12 голосов за его тикеты и 9 голосов за его комменты.
Результат сниппета:
1) maxticketsvote = 12
2) maxcommvote = 10
Василий, пожалуйста, подарите этот сниппет вашему доброжелателю. :)
Сuriosity
01 мая 2015, 19:47
0
Василий, ОГРОНОМНОЕ спасибо за качество и оперативность! Теперь Tickets — стал еще лучше и теперь может составлять серьезную основу для сайтов социально направленности на modx! Еще раз большое спасибо!

P.S. Видел еще вчера, но был настолько занят, что не мог добраться к комментированию этой хорошей новости! Но, как говорится, лучше поздно, чем никогда…
Сuriosity
29 апреля 2015, 21:40
+2
Супер!
Василий, подводя итоги, просьба:
В таблице tickets_authors добавить:
— подсчет суммы голосов пользователей за тикеты текущего пользователя;
— подсчет суммы голосов пользователей за комментарии текущего пользователя;

В идеале было бы хорошо, если б там же были колонки:
— количество положительных голосов за тикеты текущего пользователя;
— количество отрицательных голосов за тикеты текущего пользователя;
— количество положительных голосов за комментарии текущего пользователя;
— количество отрицательных голосов за комментарии текущего пользователя;
Соостветственно, если будет и возможность фильтровать по этим параметрам в админке, то вообще будет супер…
Можно будет видеть яростных рецидивистов и ангелов проекта…

P.S. Ну и соответствующие плейсхолдеры.
P.P.S. Весело пляшу у рабочего стола…
Сuriosity
29 апреля 2015, 21:07
+1
Василий, вы можете дать прямой номер вашей карты или вебмани счета? Зайдите пожалуйста в на пару минут в скайп.
P.S. я не резидент РФ. напрямую с карты не получается. Пей пал — эт какая-то чертовщина, Киви вообще для каких-то умолишенных… а через вебмани тройные комиссии… вначале за конвертацию, потом доходит до третьего лица, а потом третье лицо уже шлет вам… жесть какая-то.
P.P.S. Зайдите пожалуйста на пару минут в скайп.
Сuriosity
29 апреля 2015, 20:00
+1
К сожалению, я не видел этих обсуждений. Так бы обязательно принял участие, как финансовое, так и дискуссионное…
:(
Сuriosity
29 апреля 2015, 19:50
+1
Оо… вообще не хорошо (
Надо разделить:
Голоса за посты и голоса за комменты.
Так ждал этого релиза, а теперь аж голова бо…
Сuriosity
29 апреля 2015, 19:36
+1
Василий, пожалуйста, поднажмите еще чуток. Сделайте мою просьбу. И скажите сколько это будет стоить, я сразу отправлю деньги.
Вы говорите, что устали. Надеюсь, оплата этого момента (нужного для многих хоть они и сами этого не знают) вас промотивирует…
Сuriosity
29 апреля 2015, 19:17
+1
я готов заплатить! Хоть сейчас.
Сuriosity
29 апреля 2015, 19:12
+1
К тому же вы написали:
Как нетрудно догадаться, первый объект это профиль автора на сайте, куда пишется:
Дата создания профиля (регистрация пользователя)
Последняя активность

Сколько было отдано голосов за тикеты и комменты автора
Но в самой таблице отсутствует соответствующий столбец.
Сuriosity
29 апреля 2015, 19:05
+1
Василий, пожалуйста, внесите в таблицу tickets_authors, колнку подсчета голосов за комментари.
Это ж очень важный пункт, который всегда может пригодится.

Вы представьте, если на стрице рейтинга выводить 500 пользователей:
Где у каждого будет выводиться:
— количество оставленных тикетов;
— количество оставленных комментариев;
— количество просмотров тикетов пользователя;
— количество звезд (кол-во пользовоталей, которые добавили в избранное);
— количество голосов за тикеты пользователя;
— количество голосов за комментарии пользователя.

Одно дело, когда все берется с одной таблицы (все пункты, кроме последнего), и другое дело, когда нужно делать дополнительный запрос к другой таблице (где нужно еще подсчитать… а если таких комментов 1000 у каждого юзера, так вообще жесть).
Если вы внесете в табилцу tickets_authors подсчет голосов за комментарии, это решит вопрос многих разработчиков сайтов с элементами соцсети.
Василий, я понимаю, что вам далеко не комильфо принимать всякие хотелки, которые под ваши цели не нужны. Но не судите сразу строго. Подумайте, какие возможности это может дать другим, в том числе и вам.
Например:
можно выводить все эти данные и на основе их составлять свой рейтинг (где одну из ключевых ролей играет и голосование за комментарии пользователя).
Сuriosity
29 апреля 2015, 18:12
0
Василий, супер! Многие этого ждали!

Подскажите.
Если мне надо вывести, то, понятно, я вывожу такие плейсхолдеры:
+votes = количество голосов, которые поставили пользователи
+comments = Количество комментариев, которые оставил пользователь

А как вывести количество голосов за комментарии пользователя?
Сuriosity
24 апреля 2015, 02:00
0
Создаю тикет… Добавляю файл (картинку), но в эскизе не отображается ее миниатюра.
В коде выглядит так:
<div class="ticket-file new" data-id="1">
	<a href="/assets/images/tickets/0/14a49a854593c88f53fd71fcd6c234444e3f993f.jpg" class="ticket-file-link" title="14a49a854593c88f53fd71fcd6c234444e3f993f.jpg" target="_blank">
		<div class="ticket-file-image-wrapper">
			<img src="" class="ticket-file-image">
		</div>
	</a>
	<div class="ticket-file-meta">
		<a href="#" class="ticket-file-delete">Удалить</a>
		<a href="#" class="ticket-file-restore">Восстановить</a>
		
		<a href="#" class="ticket-file-insert">Вставить ссылку</a>
		
		<span class="ticket-file-size">20,12 Kb</span>
	</div>
	<div class="ticket-file-template">
		<a href="/assets/images/tickets/0/14a49a854593c88f53fd71fcd6c234444e3f993f.jpg" title="gopnik_100_100.jpg">
			<img src="">
		</a>
	</div>
Эт так и задуманно?
Сuriosity
23 апреля 2015, 20:58
+2
Пожалуй смело соглашусь…
Нужно отвыкать от того, что было раньше… И вкручивать самому. Тем более, что jQuery сейчас необходим практически на любом современном сайте…