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

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

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


Вы здесь » Единый форум поддержки » Вопросы по оформлению форума » Общие вопросы по оформлению (65) #2


Общие вопросы по оформлению (65) #2

Сообщений 1561 страница 1563 из 1563

1

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

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

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

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

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

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

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

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

Любой вопрос по оформлению/неполадкам сопровождайте ссылкой на форум, по которому возникли сложности.

Предыдущая часть темы: Общие вопросы по оформлению (65)

+1

1561

Виплич
Со смартфона у вас удалось это воспроизвести. Попробую на днях посмотреть, разобраться из-за чего это происходит. Если причина окажется в сервере Api, переделаю под то, как описывал Deff

Добавлено спустя 1 час 36 минут 48 секунд:

Немного изменил загрузку, попробуйте теперь (внёс изменения в сообщениях)
Или перенесите скрипт в HTML-верх (есть подозрение на некорректность)

Отредактировано Reysler (Пн, 16 Июн 2025 16:19:59)

0

1562

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

Немного изменил загрузку, попробуйте теперь (внёс изменения в сообщениях)
Или перенесите скрипт в HTML-верх (есть подозрение на некорректность)

Ах, вон оно что - уже отвечено; а я понадеялся на уведомления, захожу на форум, их нет - значит, думаю, ещё пока не дошли руки у Рейслера.

Протестировал крайнюю версию скрипта 1546.
Предыдущая версия 1546 отчего-то стала крайне устойчивой к нажатиям F5 - всё время хорошо работает. Так же хорошо работает и крайняя версия. Однако, предыдущую версию ломало нажатие Ctrl+F5. Так же оно ломает и крайнюю версию. В этом плане они идентичны.

Перенос скрипта в поле HTML-верх никакой разницы не дал. Работает так же. Вернул вниз обратно.

0

1563

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

Немного изменил загрузку, попробуйте теперь (внёс изменения в сообщениях)

Попросил ИИ разобраться с нестабильностью работы данного скрипта.  После нескольких попыток было найдено такое решение (см. код). Протестировал - работает без сбоев. Ещё побольше потестирую, и потом можно будет выложить в пополнение каталога скриптов  :cool:

Комментарий ИИ:

Улучшение стабильности скрипта

Основные изменения для повышения стабильности:

1. Заменил DOMContentLoaded на window.load для гарантии полной загрузки страницы
2. Добавил проверку наличия объекта FORUM и FORUM.postVotes с повторным вызовом при их отсутствии
3. Добавил проверку на существование элемента .postVoters перед добавлением, чтобы избежать дублирования
4. Добавил повторный вызов vv() через 1.5 секунды для обработки случаев задержки загрузки данных
5. Улучшил обработку пустых массивов и проверки условий

Этот код должен быть более стабильным, сохраняя при этом оригинальную логику работы с FORUM.postVotes.

-----
Ответ:
Замечательно! Очень рад, что новый скрипт работает стабильно. Ключом к решению оказалось правильное использование объекта FORUM.postVotes и учёт всех возможных моментов асинхронной загрузки данных.

Основные улучшения, которые помогли:
- Полная загрузка страницы перед запуском скрипта
- Проверки существования объекта FORUM с повторными попытками
- Отложенный повторный вызов для обработки поздно загружаемых данных

Успешной работы с форумом!

Код скрипта. (Это улучшенный код скрипта из сообщения 1546). Вставлять в HTML низ:

Код:
<script>
(function() {
    // Дожидаемся полной загрузки страницы, включая все ресурсы
    window.addEventListener('load', function() {
        function vv(fn) {
            var lang_obj = {
                'Поблагодарили': {
                    en: 'Thanked'
                }
            },
            lang = $('html')[0].lang;
 
            function _(text) {
                return (lang == 'ru' || !(lang_obj[text] && lang_obj[text][lang])) ? text : lang_obj[text][lang]
            };
 
            if ($('#pun-viewtopic').length) {
                var p_id = [];
 
                $('div.post').each(function(i) {
                    p_id[i] = $(this).attr('id').slice(1);
                });
 
                // Убедимся, что есть посты для обработки
                if (!p_id.length) return;
                
                function getJ(url, callback) {
                    $.get(url, function(d) {
                        $.isFunction(callback) && callback(d);
                    }, 'json');
                };
                
                // Функция обработки голосов с задержкой для гарантии загрузки FORUM.postVotes
                function processVotes(data) {
                    // Проверяем, что данные получены
                    if (!data || !data.response) return;
                    
                    // Убеждаемся, что объект FORUM существует
                    if (typeof FORUM === 'undefined' || !FORUM.postVotes) {
                        // Если объект не существует, повторяем попытку через 500мс
                        setTimeout(function() {
                            processVotes(data);
                        }, 500);
                        return;
                    }
                    
                    function votesInit(idp) {
                        // Убеждаемся, что post ID существует в FORUM.postVotes
                        var vot = FORUM.postVotes[idp];
                        if (!vot) return;
                        
                        var j = [], n = '';
                        
                        $.each(vot, function(z) {
                            var q = vot[z];
                            if (q.value == 1) {
                                j[z] = '<a href="/profile.php?id=' + q.user_id + '">' + q.username + '</a>';
                                n += j[z];
                                if (z < vot.length - 1) n += ', ';
                            }
                        });
                        
                        if (n) {
                            // Проверяем, что элемент для списка не существует, чтобы избежать дублирования
                            var postBox = $('.post#p' + idp + ' .post-box');
                            if (postBox.find('.postVoters').length === 0) {
                                n = '<div class="postVoters"><strong>' + _('Поблагодарили') + ':</strong> ' + n + '</div>';
                                postBox.append(n);
                            }
                        }
                    }
                    
                    // Обработка полученных данных
                    for (var i = 0; i < data.response.length; i++) {
                        var pid = data.response[i].post_id;
                    }
                    
                    // Обрабатываем каждый пост с голосами
                    for (var pid in FORUM.postVotes) {
                        votesInit(pid);
                    }
                    
                    $.isFunction(fn) && fn();
                }
                
                // Вызываем API для получения голосов
                getJ('/api.php?method=post.getVotesByPosts&post_id=' + p_id.join(',') + '&fields=post_id,user_id,username,value,datetime&sort_dir=desc', processVotes);
            }
        };
 
        vv(function() {});
        
        // Повторная проверка через 1.5 секунды для случаев AJAX-загрузки или медленной обработки данных
        setTimeout(function() {
            vv(function() {});
        }, 1500);
    });
})();
</script>

Отредактировано Виплич (Вт, 22 Июл 2025 13:00:37)

+1


Вы здесь » Единый форум поддержки » Вопросы по оформлению форума » Общие вопросы по оформлению (65) #2