+22.15
Рейтинг
88.90
Сила
  • avatar lifecom
  • 0
Подправил в соответствии новым API. Проверь pls — должно работать.
lsplugin_recaptcha.zip
  • avatar lifecom
  • 0
Может что-то в api и в либе поменялось
Обновлено решение с SameSite Cookies
  • avatar lifecom
  • 1
Удалите этот файл
  • avatar lifecom
  • 0
Это показывается только админам
  • avatar lifecom
  • 1
Добавлено решение
А, увидел — Instant 1
А что за двиг?
  • avatar lifecom
  • 0
Пока применил такое решение (без посторонних js):
В этом файле (строки 8 и 21) вместо {$oTopic->getTextShort()} и {$oTopic->getText()} прописываем соответственно:
{$oTopic->getTextShort()|replace:'<img':'<img loading="lazy"'}
{$oTopic->getText()|replace:'<img':'<img loading="lazy"'}


Работает в новых браузерах благодаря поддержке атрибута loading и благодаря Smarty-функции replace
  • avatar lifecom
  • 0
Хотя вот так работает:
this.getMoreAll = function () {
    if (this.isBusy) {
        return;
    }
    var lastId = $('#stream_last_id').val();
    if (!lastId) return;
    $('#stream_get_more').addClass('stream_loading');
    this.isBusy = true;

    var url = aRouter['stream']+'get_more_all/';
    var params = {'last_id':lastId,'date_last':this.dateLast};

    ls.hook.marker('getMoreAllBefore');
    ls.ajax(url, params, function(data) {
        if (!data.bStateError && data.events_count) {
            var scroll = $(window).scrollTop(); // ДОБАВЛЕНО
            $('#stream-list').append(data.result);
            $('#stream_last_id').attr('value', data.iStreamLastId);
            $(window).scrollTop(scroll); // ДОБАВЛЕНО
        }
        if (!data.events_count) {
            $('#stream_get_more').hide();
        }
        $('#stream_get_more').removeClass('stream_loading');
        ls.hook.run('ls_stream_get_more_all_after',[lastId, data]);
        this.isBusy = false;
    }.bind(this));
};


Вот бы теперь это «прикрутить» в объекте ajax для всех методов сразу через хуки.
  • avatar lifecom
  • 0
Хоть как-то разбудить сообщество))
По сути решение неполноценное. т.к. мы лишаемся новой фичи.
Я попытался вставить сюда var scroll = $(window).scrollTop();
А после подгрузки опять вернуть это значение $(window).scrollTop(scroll);
Но почему-то не работает. Может поможете? ;)
  • avatar lifecom
  • 0
И, кстати, залогиниться сюда удалось только через edge ;)
  • avatar lifecom
  • 0
Использую браузер Vivaldi (Chromium-based).
Как это ни парадоксально — но картинки все равно грузятся. Скрипт вроде отрабатывает. Я даже попробовал не подключать lazyload(images); — и даже в этом случае они грузятся, хоть и не отображаются (т.к. у них уже нет src).
Хотя описание DOMContentLoaded говорить об обратном ¯\_(ツ)_/¯


Попробовал другие браузеры (все последних версий):
Firefox — картинки грузятся сразу
Chrome — картинки грузятся сразу
Opera — картинки грузятся сразу
MS Edge — и о чудо! Все отработало как надо!


Видимо браузеры «чудят»…
  • avatar lifecom
  • 1
Затестил, поэтому распишу детальнее решение sersar :
Эту строку нужно заменить на эту
  • avatar lifecom
  • 0
Спасибо! Примерно так и сделал, предварительно скопировал таблицу в базу.
Я так понял это запрос внутри одной базы. А между базами можно делать запрос?
Если указывать так, сработает?:
ls_103.prefix_topic_content ls_103_bckp.prefix_topic_content
Нотайсы исчезают с собачкой, но без нее они же почему-то появляются. Поэтому решил изучить причину появления нойтайсов, мне показалось, что здесь описывается аналогичная проблема
В логах было много таких нотайсов. Плагинов много. Судя по содержимому topic_extra, туда пишет плагин mainpreview
Немного ошибся, точнее так:
protected function extractExtra() {
    if (is_null($this->aExtra)) {
        $aFixExtra = preg_replace_callback ( '!s:\d+:"(.*?)";!s', function($match) {
            return "s:" . strlen($match[1]) . ':"' . $match[1] . '";';
        }, $this->getExtra() );
        $aExtra = unserialize($aFixExtra);
        $this->aExtra = is_array($aExtra) ? $aExtra : array();
    }
}
Сделал пока так в этом участке:
protected function extractExtra() {
    if (is_null($this->aExtra)) {
        $aExtra = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {      
            return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
        }, $aExtra );
        $aExtra = unserialize($this->getExtra());
        $this->aExtra = is_array($aExtra) ? $aExtra : array();
    }
}

Вроде исчезли нотайсы