Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Новые возможности форумов » Запросы по скриптам #11


Запросы по скриптам #11

Сообщений 161 страница 180 из 1018

1

Предыдущая тема - Запросы по скриптам[9]

Инструменты для поиска и редактирования стиля (скриптов).

Как с помощью браузера можно определить элемент дизайна.

Каталог скриптов/CSS

Полезные скрипты, необходимые темы для новичков, а также ссылки на сайты рассказывающие что такое НТМЛ и CSS.

Типовые Вопросы (ЧаВо)

Ответы на часто задаваемые вопросы.

Как задавать вопросы! Разница между стилем и скриптом. ( Советы)

Плюс к названию темы еще и Памятка.

Предыдущая часть темы: Запросы по скриптам[10]

+1

161

помогите закончить жесткое сношения со скриптом... %-)

задача - выводить в таблички списка тем кол-во подписок.
http://oaotr.0pk.ru/viewforum.php?id=6
из самого осмысленного, что я пробовала:

Код:
<script type="text/javascript">

$('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
$('.forum td.tc3').after('<td class="tc3 subcell"></td>');


$('.forum table:last .hasicon tr').map(function() {
    var id = $(this).find('.tcl a:first').attr('href');
    if (!id) return;
    id = id.split('id=')[1];

   var subsnum;

  $.getJSON('/api.php?method=board.getSubscriptions&topic_id=' + id + '', function(data){
     subsnum = data.response.length;
  });


$(this).find('.subcell').append('<span class="num">' + subsnum + '</span>');

});

</script>

т.к. вкорячивать надо в каждой ячейке каждой строки, я пытаюсь ввести "subsnum", но у меня не хватает мозга на вывод ответа в эту [пренебрежительное описание]. хотя много где именно этот метод советуют.

0

162

Romych
Да, спасибо!

+1

163

Герда, $.getJSON - функция ассинхронная, поскольку с перебором не синхронизована(запускается синхронно с ним, а результат получаетcя ею ХЗ-когда), поэтому вставки в контент нун делать из самой функции

<script type="text/javascript">

$('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
$('.forum td.tc3').after('<td class="tc3 subcell"></td>');

$('.forum table td.subcell').parent('tr').each(function() {
    var id = $(this).find('.tcl a:first').attr('href');
    if (!id) return true;
    id = id.split('id=')[1];

   var subsnum;
   var selectr = $(this).find('.subcell');
  $.getJSON('/api.php?method=board.getSubscriptions&topic_id=' + id + '', function(data){
     subsnum = data.response.length;
     selectr.append('<span class="num">' + subsnum + '</span>');
  });

});

</script>

Отредактировано Deff (Вт, 6 Окт 2020 08:48:28)

+1

164

Deff
спс, я б не догадалась selectr ввести.

а еще вопрос - чем .each и .map отличаются?
я че-т путаюсь в них :unsure:

0

165

Герда
.each() - обычный перебор элементов
.map() - типично используется для трансформации массивов... Ссылка Я поставил each дабы не умножать сущности...

+2

166

Romych
сделать внизу темы несколько последних тем из раздела где эта тема

?

0

167

tartar1 написал(а):

Romych
сделать внизу темы несколько последних тем из раздела где эта тема

?

тебе это правда нужно?

от идеи с ссылкой на пост в галерею ты уже отказался?

+1

168

Deff
помоги плз доработать скрипт подписоты

Возникает проблема с количеством запросов на 1й страничке: аджакс-скрипты и проблемы с серверами

надо шоб скрипт считывал ID всех топиков на странице и ставил их в один запрос:
/api.php?method=board.getSubscriptions&topic_id=151,150,152,254...

а потом брал полученные данные и распихивал по ячейкам...

че-т, я думаю, я такое не осилю, поэтому решила сразу к тебе

0

169

Герда написал(а):

Возникает проблема с количеством запросов на 1й страничке: аджакс-скрипты и проблемы с серверами

Ну идея есть такая,
Даж две:
Первая - отложить вставку числа подписок на секунду, ибо есть ограничение на число запросов в секунду(имхо 25, поскольку у тьву может быть тем на странице больше(30) + какое то число запросов есть и при самой загрузке страницы) ( Просил Kernel сделать тож самое, но число на за минуту - он выставил какие-то возражения)
2-е сделать вставку через цикл через окончания предыдущего запроса, а не через each кучей одновременных запросов

Отредактировано Deff (Чт, 8 Окт 2020 18:30:34)

0

170

Deff написал(а):

2-е сделать вставку через цикл через окончания предыдущего запроса, а не через each кучей одновременных запросов

это мне кажется оптимальным

т.к. проблема не только с тем, что у юзеров может быть включено и 20 и 30 и 100 топиков на странице.
+ есть другие скрипты, которые "кушают" запросы. для каждого конкретного форума это число может быть разным. если можно заставить скрипт работать по принципу "запросил - вставил - подал следующий запрос" - это круто :cool:

0

171

Код:
<script type="text/javascript">
let cells = {};
let ids = [];
$('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
$('.forum td.tc3').after('<td class="tc3 subcell"></td>');
$('.forum table td.subcell').parent('tr').each(function() {
    var id = $(this).find('.tcl a:first').attr('href');
    if (!id) return true;
    id = id.split('id=')[1];
    cells[id] = $(this).find('.subcell');
    ids.push(id);
});

if (ids.length) {
    $.getJSON('/api.php?method=board.getSubscriptions&topic_id=' + ids.join(','), function(data){
     for (let i in data.response) {
       if (typeof count[data.response[i].thread_id] == 'undefined') count[data.response[i].thread_id] = 1;
       else count[data.response[i].thread_id]++;
     }

     for (let i in count) {
       if (typeof cells[i] != 'undefined') cells[i].append('<span class="num">' + count[i] + '</span>');
     }   
  });
}
</script>

Не проверял (совсем, даже на синтаксис), но что-то такое должно работать.

+1

172

kernel написал(а):

Не проверял (совсем, даже на синтаксис), но что-то такое должно работать.

пока не пашет:
http://oaotr.0pk.ru/viewforum.php?id=6
:dontknow:

0

173

Герда написал(а):
kernel написал(а):

Не проверял (совсем, даже на синтаксис), но что-то такое должно работать.

пока не пашет:
http://oaotr.0pk.ru/viewforum.php?id=6
:dontknow:

Ожидаемо. Довести до рабочего состояния легко. В данном случае я забыл инициализировать count и опечатался.

Код:
<script type="text/javascript">
let cells = {};
let ids = [];
$('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
$('.forum td.tc3').after('<td class="tc3 subcell"></td>');
$('.forum table td.subcell').parent('tr').each(function() {
    var id = $(this).find('.tcl a:first').attr('href');
    if (!id) return true;
    id = id.split('id=')[1];
    cells[id] = $(this).find('.subcell');
    ids.push(id);
});

if (ids.length) {
    let count = {};
    $.getJSON('/api.php?method=board.getSubscriptions&topic_id=' + ids.join(','), function(data) {
     for (let i in data.response) {
       if (typeof count[data.response[i].topic_id] == 'undefined') count[data.response[i].topic_id] = 1;
       else count[data.response[i].topic_id]++;
     }

     for (let i in cells) {
       let num = typeof count[i] != 'undefined' ? count[i] : 0;
       cells[i].append('<span class="num">' + num + '</span>');
     }
  });
}
</script>

+2

174

А вот такой код будет работать после того, как накачу все последние изменения на форумы. Добавил в getSubscriptions флаг group_by=topic_id

Код:
<script type="text/javascript">
let cells = {};
let ids = [];
$('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
$('.forum td.tc3').after('<td class="tc3 subcell"></td>');
$('.forum table td.subcell').parent('tr').each(function() {
    var id = $(this).find('.tcl a:first').attr('href');
    if (!id) return true;
    id = id.split('id=')[1];
    cells[id] = $(this).find('.subcell');
    ids.push(id);
});

if (ids.length) {
    let count = {};
    $.getJSON('/api.php?method=board.getSubscriptions&group_by=topic_id&topic_id=' + ids.join(','), function(data) {
     for (let i in data.response) {
       count[data.response[i].topic_id] = data.response[i].c;
     }

     for (let i in cells) {
       let num = typeof count[i] != 'undefined' ? count[i] : 0;
       cells[i].append('<span class="num">' + num + '</span>');
     }
  });
}
</script>

+2

175

Ну ыщо вариант, типо пакетом по пять запросов...:

Код:
<script type="text/javascript">
(function() {
    $('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
    $('.forum td.tc3').after('<td class="tc3 subcell"></td>');
    
    var arr = [];
    $('.forum table td.subcell').parent('tr').each(function(i) {
        var id = $(this).find('.tcl a:first').attr('href');
        id = id.split('id=')[1];
        var select = $(this).find('.subcell');
        if(!arr[i%5])arr[i%5] = [];
        arr[i%5].push([id, select]);
    });
    function getSubscript(i, j) {
        $.getJSON('/api.php?method=board.getSubscriptions&topic_id=' + arr[i][j][0], function(data) {
            var subsnum = data.response.length;
            arr[i][j][1].append('<span class="num">' + subsnum + '</span>');
            if (++j < arr[i].length) getSubscript(i, j);
        });
    }
    /* Запуск Пакета */
    var j = 0;
    for (var i = 0; i < arr.length; i++) {
        getSubscript(i, j);
    }
  
}());
</script>

+1

176

kernel написал(а):

А вот такой код будет работать после того, как накачу все последние изменения на форумы. Добавил в getSubscriptions флаг group_by=topic_id

а на бета-тестовых уже должно работать?
http://oaotr.0pk.ru/ - вродь бетотестовый, но на нем второй вариант не сработал. показывает нули в этом разделе, хотя там есть топики на которые я подписалась для теста

первый пашет, спасибо огромное!

Deff написал(а):

Ну ыщо вариант, типо пакетом по пять запросов...:

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

Отредактировано Герда (Чт, 8 Окт 2020 22:10:18)

0

177

Герда написал(а):

а на бета-тестовых уже должно работать?

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

+1

178

kernel написал(а):

Добавил в getSubscriptions флаг group_by=topic_id

Тоже сделал кратенький вариант под этот флаг, на тестовых уже должен работать. Без нулевых подписчиков

Код:
<script>
var temID =[];
$('.forum th.tc3').after('<th class="tc3 subcell">Подписки</th>');
$('.forum td.tc3').after('<td class="tc3 subcell"></td>')
$('.forum .tcl .acchide~a').map(function (i) {
temID[i] = $(this).attr('href').split(/id=/)[1];
$(this).parents('tr').attr('data-id',temID[i]);
});
$.getJSON('/api.php?method=board.getSubscriptions&group_by=topic_id&topic_id='+temID,function(j) {
var z= j.response;
for (i in z) {
var tid = z[i].topic_id, pd = z[i].c;
	$('tr[data-id="'+tid+'"] td.subcell').append(pd);
	}
});
</script>

+2

179

Здравствуйте, а есть ли скрипт "Слияние (объединение) тем"?
Мне вот надо из нескольких тем, перенести все сообщения в одну, но тупо перемещение сообщений из тем в тему, муторно.
(около 100 тем и получается более 1000 сообщений)

Отредактировано ACT3255 (Сб, 10 Окт 2020 13:43:00)

+2

180

кароч, "скриптописец от бога" задолбался в край и приполз к вам на поклон.
я дико туплю и делаю что-то не то.

как в скрипте от Дэффа вместо

Deff написал(а):

var subsnum = data.response.length;
            arr[i][j][1].append('<span class="num">' + subsnum + '</span>');

1. выцепить url первой картинки из файла поста http://oaotr.0pk.ru/api.php?method=post … pic_id=192  (находится в [0] message)
2. вставить в код <img src=' + fimg + '> или типа того

0


Вы здесь » Единый форум поддержки » Новые возможности форумов » Запросы по скриптам #11