InnoDB, но на данный вопрос это никак не влияет.
Да я спросила потому что хотела попробовать вытянуть это одним запросом. )
Единый форум поддержки |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Единый форум поддержки » Новые возможности форумов » Стена в профиле
InnoDB, но на данный вопрос это никак не влияет.
Да я спросила потому что хотела попробовать вытянуть это одним запросом. )
kernel написал(а):Сейчас доработал работу с массивами, но опять же на этом форуме.
Испытал, да теперь хорошо (в запросе присутствует ник Герды)
Код:https://forum.mybb.ru/api.php?method=users.get&username[]=%C3%E5%F0%E4%E0&username[]=kernel&username[]=Romych&fields=user_id,username,avatarправда в ответе значения для кириллического ника пришли последними, т.е. не в порядке запроса, но это несущественно
теперь вопрос на засыпку.
попались ребята, которые используют спец-символы в никах: https://nolf.rusff.ru/profile.php?id=4
у них, я так понимаю, из-за устройства API авы не изъять.
если не изъять, можно как-то пихнуть им аву по умолчанию?
попались ребята, которые используют спец-символы в никах: https://nolf.rusff.ru/profile.php?id=4
у неё как раз ава по нику берётся без проблем
https://nolf.rusff.ru/api.php?method=users.get&username[]=Silvia%20Marino&fields=user_id,username,avatar
а вот таких товарищей (ссылка ниже)
https://nolf.rusff.ru/profile.php?id=46
только по id
https://nolf.rusff.ru/api.php?method=users.get&user_id=46&fields=user_id,username,avatar
Romych
я ее профиль как образец выводимого контента. ниже в этом профиле в стене висит подарка от товарища с японским (или корейским? или китайским?) ником
можно как-то пофиксить способ отображения авок для таких аутентичных ролёвок?
можно как-то пофиксить способ отображения авок для таких аутентичных ролёвок?
вижу что применяется старая версия скрипта, в ней действительно применяется запрос из массива ников
var unq = [...new Set(as.map(item => 'username[]='+item.a))].join('&');
$.getJSON('/api.php?method=users.get&'+unq+'&fields=avatar,username',function(j) {
я бы рекомендовал применить комбайн из 254 поста, с ним таких проблем быть не должно
поясню идею: юзер создает тему "мой форум" или "портфолио" или "мои рисунки" и т.д. - и мы отгружаем в профиль красиво оформленный первый пост + 5 последних сообщений топика с отзывами, новостями и т.д.
как-то так:
var mc = 5;//число отображаемых сообщений из темы
var sel = 1;//селектор подпись или доп.поле, 1 - подпись, 0 - доп.поле
var pol = 1;//номер дополнительного поля fld1, fld2, fld3 и т.д. указываем только цифру
var av = 0;//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть
var sort = 'desc';//Направление сортировки по времени. По умолчанию asc (по возрастанию).Доступные значения: asc, desc
var first = 0;//Отображать первое сообщение темы
А нельзя как-то реализовать механизм закрепления поста как это сделано в топиках? Там можно закрепить первый пост темы и он будет первым на всех страницах.
Герда
Mirra Bell, таки добрался, тестируйте
<script language="javascript"> var mc = 5,//число отображаемых сообщений из темы sel = 1,//селектор подпись или доп.поле, 1 - подпись, 0 - доп.поле pol = 1,//номер дополнительного пол¤ fld1, fld2, fld3 и т.д. указываем только цифру av = 1,//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть sort = 'asc',//Направление сортировки по времени. по умолчанию asc (по возрастанию).Доступные значения: asc, desc anyava = 'https://forumstatic.ru/files/0000/14/1c/20038.jpg',//аватар по умолчанию для тех, у кого он не установлен fp = 0; //отображать первый пост темы и затем последние выбранные через лимит, 0 - нет (по умолчанию), 1 -да if($('#viewprofile').length){ var LoginU = $('#profile-name').text(), si, i=0, blk = '<article class="stena"><h1>Стена</h1>', DefaultAvatar=(s)=> {if(s.avatar==undefined)s.avatar=anyava}, MyPost=(s)=>(s.username==LoginU)? blk +='<div id ="s-'+i+'" class="mypost">' : blk +='<div id ="s-'+i+'" class="anypost">', Blk=(s)=>(av==1) ? blk +='<img alt="'+s.avatar+'" src="'+s.avatar+'" width="32"><strong>'+s.username+' написал(а):</strong><div>'+s.message+'</div></div>' : blk +='<div>'+s.message+'</div></div>', EndStena=()=> {blk +='<a href="/viewtopic.php?id='+si+'&action=last">перейти в тему</a></article>';$('#profile-signature').after(blk);} (sel==1) ? si=parseInt($('#profile-signature >ul >p >a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]) : si=parseInt($('#viewprofile #pa-fld'+pol+' strong a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]); if (fp == 0) { $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir='+sort+'&limit='+mc+'&fields=username,avatar,message', function(d) { var x = d.response;for (var i in x){DefaultAvatar(x[i]);MyPost(x[i]);Blk(x[i]);}EndStena(); });}else{ $.when($.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=desc&limit='+mc+'&fields=username,avatar,message'), $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=asc&limit=1&fields=username,avatar,message')).done(function (j1, j2){ var x2 = j2[0].response, x3 = j1[0].response; DefaultAvatar(x2[0]); (av==1) ? blk +='<div id ="s-" class="myFirst"><img alt="'+x2[0].avatar+'" src="'+x2[0].avatar+'" width="32"><strong>'+x2[0].username+' написал(а):</strong><div>'+x2[0].message+'</div></div>' : blk +='<div id ="s-" class="myFirst"><div>'+x2[0].message+'</div></div>'; for (var i in x3){DefaultAvatar(x3[i]); MyPost(x3[i]); Blk(x3[i]);} EndStena(); });}} </script>
fp = 0 - первый (закреплённый пост) выключен, fp = 1 - включён
Romych
а кто удалил мое сообщение? что это такое? в моей же теме
тестирую- сортировка не менякется
Отредактировано tartar1 (Сб, 22 Авг 2020 11:20:03)
а кто удалил мое сообщение?
вопрос не ко мне
тестирую- сортировка не менякется
дык, так и задумано, читайте внимательно:
юзер создает тему "мой форум" или "портфолио" или "мои рисунки" и т.д. - и мы отгружаем в профиль красиво оформленный первый пост + 5 последних сообщений топика с отзывами, новостями и т.д.
Если при этом включить сортировку по возрастанию, то у вас будет первый закреплённый пост и после него опять же первый пост
Romych
поменяйте тогда на убывание. чтоб последнее внизу
поменяйте тогда на убывание. чтоб последнее внизу
Тестируйте:
<script language="javascript"> var mc = 5,//число отображаемых сообщений из темы sel = 1,//селектор подпись или доп.поле, 1 - подпись, 0 - доп.поле pol = 1,//номер дополнительного пол¤ fld1, fld2, fld3 и т.д. указываем только цифру av = 1,//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть sort = 'asc',//Направление сортировки по времени. по умолчанию asc (по возрастанию).Доступные значения: asc, desc anyava = 'https://forumstatic.ru/files/0000/14/1c/20038.jpg',//аватар по умолчанию для тех, у кого он не установлен fp = 1; //отображать первый пост темы и затем последние выбранные через лимит, 0 - нет (по умолчанию), 1 -да if($('#viewprofile').length){ var LoginU = $('#profile-name').text(), si, i=0, blk = '<article class="stena"><h1>Стена</h1>', DefaultAvatar=(s)=> {if(s.avatar==undefined)s.avatar=anyava}, MyPost=(s)=>(s.username==LoginU)? blk +='<div id ="s-'+i+'" class="mypost">' : blk +='<div id ="s-'+i+'" class="anypost">', Blk=(s)=>(av==1) ? blk +='<img alt="'+s.avatar+'" src="'+s.avatar+'" width="32"><strong>'+s.username+' написал(а):</strong><div>'+s.message+'</div></div>' : blk +='<div>'+s.message+'</div></div>', EndStena=()=> {blk +='<a href="/viewtopic.php?id='+si+'&action=last">перейти в тему</a></article>';$('#profile-signature').after(blk);} (sel==1) ? si=parseInt($('#profile-signature >ul >p >a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]) : si=parseInt($('#viewprofile #pa-fld'+pol+' strong a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]); if (fp == 0) { $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir='+sort+'&limit='+mc+'&fields=username,avatar,message', function(d) { var x = d.response;for (var i in x){DefaultAvatar(x[i]);MyPost(x[i]);Blk(x[i]);}EndStena(); });}else{ $.when($.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=desc&limit='+mc+'&fields=username,avatar,message'), $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=asc&limit=1&fields=username,avatar,message')).done(function (j1, j2){ var x2 = j2[0].response, x3 = j1[0].response.reverse(); DefaultAvatar(x2[0]); (av==1) ? blk +='<div id ="s-" class="myFirst"><img alt="'+x2[0].avatar+'" src="'+x2[0].avatar+'" width="32"><strong>'+x2[0].username+' написал(а):</strong><div>'+x2[0].message+'</div></div>' : blk +='<div id ="s-" class="myFirst"><div>'+x2[0].message+'</div></div>'; for (var i in x3){DefaultAvatar(x3[i]); MyPost(x3[i]); Blk(x3[i]);} EndStena(); });}} </script>
Romych
чудесно
а можно картинку-полосу вставить между 1 и остальными постами?
а можно картинку-полосу вставить между 1 и остальными постами?
так?
<script language="javascript"> var mc = 5,//число отображаемых сообщений из темы sel = 1,//селектор подпись или доп.поле, 1 - подпись, 0 - доп.поле pol = 1,//номер дополнительного пол¤ fld1, fld2, fld3 и т.д. указываем только цифру av = 1,//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть sort = 'asc',//Направление сортировки по времени. по умолчанию asc (по возрастанию).Доступные значения: asc, desc anyava = 'https://forumstatic.ru/files/0000/14/1c/20038.jpg',//аватар по умолчанию для тех, у кого он не установлен fp = 1; //отображать первый пост темы и затем последние выбранные через лимит, 0 - нет (по умолчанию), 1 -да if($('#viewprofile').length){ var LoginU = $('#profile-name').text(), si, i=0, blk = '<article class="stena"><h1>Стена</h1>', DefaultAvatar=(s)=> {if(s.avatar==undefined)s.avatar=anyava}, MyPost=(s)=>(s.username==LoginU)? blk +='<div id ="s-'+i+'" class="mypost">' : blk +='<div id ="s-'+i+'" class="anypost">', Blk=(s)=>(av==1) ? blk +='<img alt="'+s.avatar+'" src="'+s.avatar+'" width="32"><strong>'+s.username+' написал(а):</strong><div>'+s.message+'</div></div>' : blk +='<div>'+s.message+'</div></div>', EndStena=()=> {blk +='<a href="/viewtopic.php?id='+si+'&action=last">перейти в тему</a></article>';$('#profile-signature').after(blk);} (sel==1) ? si=parseInt($('#profile-signature >ul >p >a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]) : si=parseInt($('#viewprofile #pa-fld'+pol+' strong a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]); if (fp == 0) { $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir='+sort+'&limit='+mc+'&fields=username,avatar,message', function(d) { var x = d.response;for (var i in x){DefaultAvatar(x[i]);MyPost(x[i]);Blk(x[i]);}EndStena(); });}else{ $.when($.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=desc&limit='+mc+'&fields=username,avatar,message'), $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=asc&limit=1&fields=username,avatar,message')).done(function (j1, j2){ var x2 = j2[0].response, x3 = j1[0].response.reverse(); DefaultAvatar(x2[0]); (av==1) ? blk +='<div id ="s-" class="myFirst"><img alt="'+x2[0].avatar+'" src="'+x2[0].avatar+'" width="32"><strong>'+x2[0].username+' написал(а):</strong><div>'+x2[0].message+'</div></div><br><hr>' : blk +='<div id ="s-" class="myFirst"><div>'+x2[0].message+'</div></div><br><hr>'; for (var i in x3){DefaultAvatar(x3[i]); MyPost(x3[i]); Blk(x3[i]);} EndStena(); });}} </script>
Romych
подходит. если первый пост написал хозяин профиля он может его изменять. как картинк на авторской странице и резюме
вы подсветите где в коде полоса чтоб можно было вставить картинку. я то увидел
Romych
а можно ссылку на редактирование первого поста вывести под первым постом? для админа и автора
Romych
я к тебе на поклон с просьбами по апгрейду подарков/наград через твой скрипт.
1. хотят выводить 2-3 последних подарка в профиле в топике (эт надо делать, наверн, через поочередную подгрузку, чтоб страничка не повешалась от количества запросов).
2. хотят выводить количество подарков в профиле в топике (= количество постов в топике с подарками минус первый пост).
2. хотят выводить количество подарков в профиле в топике (= количество постов в топике с подарками минус первый пост).
Для этого придётся опять потеребить Ивана @kernel, чтоб получить всё необходимое одним запросом, напрашиваются дополнения в API к методу post.get
/api.php?method=post.get&topic_id=***&fields=num_replies
где num_replies - это количество ответов в топике
Можно на будущее и ещё количество просмотров добавить num_views и имя форума forum_name. Вдруг и эти значения в будущих задачах понадобятся.
1. хотят выводить 2-3 последних подарка в профиле в топике (эт надо делать, наверн, через поочередную подгрузку, чтоб страничка не повешалась от количества запросов).
2. хотят выводить количество подарков в профиле в топике (= количество постов в топике с подарками минус первый пост).
Герда
наверное как-то так:
<script language="javascript"> var mc = 3,//число отображаемых сообщений/подарков из темы sel = 1,//селектор подпись или доп.поле, 1 - подпись, 0 - доп.поле pol = 1,//номер дополнительного поля fld1, fld2, fld3 и т.д. указываем только цифру av = 0,//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть sort = 'desc',//Направление сортировки по времени. по умолчанию asc (по возрастанию).Доступные значения: asc, desc anyava = 'https://forumstatic.ru/files/0000/14/1c/20038.jpg',//аватар по умолчанию для тех, у кого он не установлен fp = 0; //отображать первый пост темы и затем последние выбранные через лимит, 0 - нет (по умолчанию), 1 -да if($('#viewprofile').length){ var LoginU = $('#profile-name').text(), si, i=0, blk = '<article class="stena"><h1>Стена</h1>', DefaultAvatar=(s)=> {if(!s.avatar)s.avatar=anyava}, MyPost=(s)=>(s.username==LoginU)? blk +='<div id ="s-'+i+'" class="mypost">' : blk +='<div id ="s-'+i+'" class="anypost">', Blk=(s)=>(av==1) ? blk +='<img alt="'+s.avatar+'" src="'+s.avatar+'" width="32"><strong>'+s.username+' написал(а):</strong><div>'+s.message+'</div></div>' : blk +='<div>'+s.message+'</div></div>', EndStena=(s)=> {(av==0) ? blk +='<a href="/viewtopic.php?id='+si+'&action=last">перейти в тему</a><span class="numpodarok" style="float: right;">Всего подарков: '+(s.num_replies-1)+'</span></article>' : blk +='<a href="/viewtopic.php?id='+si+'&action=last">перейти в тему</a></article>';$('#profile-signature').after(blk);} (sel==1) ? si=parseInt($('#profile-signature >ul >p >a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]) : si=parseInt($('#viewprofile #pa-fld'+pol+' strong a[href*="viewtopic.php"]').eq(-1).attr('href').split(/=/)[1]); if (fp == 0) { $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir='+sort+'&limit='+mc+'&fields=username,avatar,message,num_replies', function(d) { var x = d.response;for (var i in x){DefaultAvatar(x[i]);MyPost(x[i]);Blk(x[i]);}EndStena(x[i]); });}else{ $.when($.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=desc&limit='+mc+'&fields=username,avatar,message,num_replies'), $.getJSON('/api.php?method=post.get&topic_id='+si+'&sort_dir=asc&limit=1&fields=username,avatar,message,num_replies')).done(function (j1, j2){ var x2 = j2[0].response, x3 = j1[0].response; DefaultAvatar(x2[0]); (av==1) ? blk +='<div id ="s-" class="myFirst"><img alt="'+x2[0].avatar+'" src="'+x2[0].avatar+'" width="32"><strong>'+x2[0].username+' написал(а):</strong><div>'+x2[0].message+'</div></div>' : blk +='<div id ="s-" class="myFirst"><div>'+x2[0].message+'</div></div>'; for (var i in x3){DefaultAvatar(x3[i]); MyPost(x3[i]); Blk(x3[i]);} EndStena(x3[i]); });}} </script>
в режим Подарков переводит вот эта переменная:
av = 0,//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть
av = 0,//отображать ли аватары, 0 - для анкет и подарков, 1- соц.сеть
а почему режим подарков безаватарный? 0_о
смотри какая милота с ними раньше была:
https://forumupload.ru/uploads/0007/e3/f7/2/718730.jpg
https://forumupload.ru/uploads/0007/e3/f7/2/353766.jpg
ну или вот на моем форуме подарки с авами: https://forumd.ru/profile.php?id=2
можно отдельно сделать настройку вывода постов со стенки в мини-профиль в топике?
еще - подарки в мини-профиле в топике не отображаются.
вот профили, где есть "стена" подарков/наград:
http://oaotr.0pk.ru/profile.php?id=16
http://oaotr.0pk.ru/profile.php?id=21
идея такая - сделать аналог "наград" и "подарков" от русфф (который не глючит и грузится с форума, а не с периодически неработающих серверов )
для этого не хватает опций:
1. отображать в профиле в топике ССЫЛКУ на подарки: Подарков: N (где N - количество постов, а "подарков" - ссылка на топик юзера с подарками)
2. отображать в профиле в топике последние подарки (0 - не отображать, N - количество подарков в топике)
при этом, кстати, опцию "fp = 0; //отображать первый пост темы и затем последние выбранные через лимит" - можно выпилить, если она делает скрипт сложнее, т.к. для подарков она однозначно не нужна - при таких опциях скрипт окончательно ударяется в узкую специализацию на чем-то таком.
Добавлено спустя 9 часов 54 минуты 53 секунды:
отображать в профиле в топике последние подарки (0 - не отображать, N - количество подарков в топике)
думаю, в топике не надо выводить аватар и автора, только контент поста - т.к. в отличие от страниц профиля, там картинки будут мелкие, некуда лепить всё это.
а почему режим подарков безаватарный? 0_о
дык просили же в этой теме, я не сам такую опцию придумал ))
над остальным подумаю что можно сделать
Какой эпичнейший тред А покажите плиз ваши реализации "стены", что в итоге получилось Просто интересно
Вы здесь » Единый форум поддержки » Новые возможности форумов » Стена в профиле