Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Можно ли сделать топ новостей с подгрузкой следующих?

Можно ли сделать топ новостей с подгрузкой следующих?


     18.02.2016    Все вопросы » Общие вопросы    1945

вопрос
Можно ли сделать топ новостей с подгрузкой следующих? Топ выводится через custom. Сделать кнопочку при нажатии которой бы подгружались следующие новости. Можно ли такое реализовать? если да, то как?

16 комментариев

zip
Юзер

zip - 18 февраля 2016 19:37 -

Спасибо, но там постраничная навигация. А как сделать кнопку, например показать еще?

pavel31
Юзер

pavel31 - 18 февраля 2016 22:49 -

А что Вам мешает это сделать так же, как это сделано в модуле Fast PM или вы совсем не разбираетесь в php и javascript??

zip
Юзер

zip - 18 февраля 2016 23:55 -

pavel31, Если я бы разбирался, то не писал бы сюда. В общем попробовал внедрить такой вот код:

<script language="javascript" type="text/javascript">
    var lastExtNewsUrl = "";
    var lastExtNewsPage = 0;
    var mainClassNewsNavigation = "navigation"; // navigation.tpl - название класса основного элемента
    function loadExtNews(){
        
        if( lastExtNewsUrl )
            {
                var url = lastExtNewsUrl.replace( "/page/" + lastExtNewsPage, "/page/" + ( lastExtNewsPage + 1 ) ) + "";
                lastExtNewsPage++;
            }
                else
            {
                var url = location.href;
                url = url.replace( new RegExp( "#(.*)", "g" ), "" ) + "";
                
                var RegExpC = new RegExp( "/page/([0-9]+)", "g" );
                if( url.match( RegExpC ) )
                    {
                        var page = url.match( /page\/[0-9]{1,50}/ ) + "";
                        page = parseInt( page.match( /[0-9]{1,50}/ ) );
                        var newPage = page + 1;
                        url = url.replace( "/page/" + page, "/page/" + newPage ) + "";
                        lastExtNewsPage = newPage;
                    }
                        else
                    {
                        url = url + "page/2/";
                        lastExtNewsPage = 2;
                    }
            }
        
        lastExtNewsUrl = url;
        
        $( "#dle-content ." + mainClassNewsNavigation + " a" ).html( "<span>Идёт загрузка...</span>" );
        
        $.ajax({
            url: url,
            data: "",
            success: function( data ){
                var parser = new DOMParser();
                var doc = parser.parseFromString( data, "text/html" );
                $( "#dle-content ." + mainClassNewsNavigation ).remove();
                $( "#dle-content" ).html( $( "#dle-content" ).html() + doc.getElementById( "dle-content" ).innerHTML );                    
                $( "#dle-content ." + mainClassNewsNavigation ).html( "<a href=\"#\" onclick=\"loadExtNews(); return false;\" class=\"loadExtNews\"><span>Загрузить ещё</span></a>" );
                
                history.pushState( {}, "", lastExtNewsUrl );
            },
            error: function( xhr, ajaxOptions, thrownError ){
                // Можно по номеру ошибки определять, но в любом случае ответ не тот, показывать нечего, страхуемся )))
                $( "#dle-content ." + mainClassNewsNavigation ).html( "<a href=\"#\" onclick=\"return false;\" class=\"loadExtNews\"><span>Новостей больше нет</span></a>" );
            },
            dataType: "html",
            type: "POST"
        });
    }
    $( document ).ready(
        function(){
            $( "#dle-content ." + mainClassNewsNavigation ).html( "<a href=\"#\" onclick=\"loadExtNews(); return false;\" class=\"loadExtNews\"><span>Загрузить ещё</span></a>" );
        }
    );
</script>

<div class="navigation" align="center" ><div class="prev">[prev-link]Предыдущая[/prev-link]</div> {pages} <div class="next">[next-link]Следующая[/next-link]</div></div>


Но, он почему-то не работает. Только в lastnews и на основных новостях, хотя этот код у меня стоит на другом сайте и все там работает. Даже не знаю, как можно еще сделать.

pavel31
Юзер

pavel31 - 19 февраля 2016 00:37 -

Попробуйте сделать так:

<?php
$perpage = 10; // количество выводимых новостей
$cstart = intval($_POST['page']);
if($cstart<0) $cstart = 0;
$perpage = $perpage * $cstart;

// LIMIT в Sql запросе
$limit = "LIMIT {$cstart},{$perpage}";

// счетчик страниц
$count = $db->super_query("SELECT count(*) as count FROM ".USERPREFIX."_pm");
if($count['count'] > $perpage) {
    // вывод кнопки Показать ещё
    $navigation .= "\n<a href=\"#\" onclick=\"more_content();return false;\">Показать еще</a>";
    // в переменной $navigation будет хранится кнопка Показать ещё
}
?>

<script type="text/javascript">
// сброс на начальную страницу
var page = 0;
// функция Показать ещё
function more_content(){
    // переходим на новую страницу
    page += 1;
    $.post(dle_root+"engine/ajax/main.php",{page:page},function(data){
        $(".content").html(data); // копируем контент из файла main.php в класс content
    });
}
// В класс content будет выведен контент из ajax файла main.php
</script>

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

zip
Юзер

zip - 19 февраля 2016 00:45 -

Может, что-то не так делаю. Но, так тоже не получается.

zip
Юзер

zip - 19 февраля 2016 14:19 -

В Боковой колонке, ни как не хочет работать.

zip
Юзер

zip - 19 февраля 2016 14:35 -

В файле custom_navigation.php уже ведь прописана постраничная навигация, т.к она отличается от той, что на сайте. И поэтому ни как не меняется. Нельзя ли просто в этом файле, заменить код на нужный?

Я просто не знаю, как это сделать.

zip
Юзер

zip - 19 февраля 2016 16:56 -

Неужели это такая трудная задача, что ни кто не может помочь?

в custom_navigation.php заменил на код:

<script type="text/javascript"> function nextPage() { var nextPage = $('#ajax-next-page a').attr('href'); ShowLoading(""); if (nextPage !== undefined) { $.ajax({ url: nextPage, success: function(data) { $('#ajax-next-page').remove(); $('#next-page').remove(); HideLoading(""); $('#dle-content').append($('#dle-content', data).html()); } }) } }; </script>

<center><a onclick="nextPage(); return false;" class="bbcodes" style="cursor: pointer">Показать еще</a></center><br /> <div id="ajax-next-page" style="display: none;">[next-link][/next-link]</div>


загрузка идет, но бесконечная. грузится и грузится, как будто зависает. Этот код помню работал на старых версиях DLE а здесь 10.6 и видимо здесь, не работает. Даже не знаю, что делать.

LazyDev
PHP-developer

LazyDev - 19 февраля 2016 17:08 -

zip, вы слишком требовательны.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

pavel31
Юзер

pavel31 - 20 февраля 2016 01:18 -

zip,
Я сделал так:
PHP файлы модуля

Java код вставьте в любой js файла в Вашем шаблоне

Код файла topnews.tpl оберните тегом <div>

<div class="content">
    код файла topnews.tpl
</div>

PHP файлы распакуйте в корневой каталог Вашего сайта
Если все сделаете правильно должно все заработать :)
Если будут проблемы с кодом пишите - помогу.

zip
Юзер

zip - 20 февраля 2016 09:26 -

Оказывается я ошибся это не topnews а лента новостей.

Вывод сделал так:

  <div id="custom-ajax-test">
    {custom template="shortstory-newsblock" category="2" from="0" limit="5" idblock="custom-ajax-test"}
    {include file="engine/modules/custom_navigation.php?id=custom-ajax-test"}
   </div>  


Как и мне предложили сделать.

zip
Юзер

zip - 20 февраля 2016 09:26 -

Дальше я попробовал внедрить в main.tpl такой код:

    [aviable=main|cat|lastnews]
<script language="javascript" type="text/javascript">
    var lastExtNewsUrl = "";
    var lastExtNewsPage = 0;
    var mainClassNewsNavigation = "navigation"; // navigation.tpl - название класса основного элемента
    function loadExtNews(){
        
        if( lastExtNewsUrl )
            {
                var url = lastExtNewsUrl.replace( "/page/" + lastExtNewsPage, "/page/" + ( lastExtNewsPage + 1 ) ) + "";
                lastExtNewsPage++;
            }
                else
            {
                var url = location.href;
                url = url.replace( new RegExp( "#(.*)", "g" ), "" ) + "";
                
                var RegExpC = new RegExp( "/page/([0-9]+)", "g" );
                if( url.match( RegExpC ) )
                    {
                        var page = url.match( /page\/[0-9]{1,50}/ ) + "";
                        page = parseInt( page.match( /[0-9]{1,50}/ ) );
                        var newPage = page + 1;
                        url = url.replace( "/page/" + page, "/page/" + newPage ) + "";
                        lastExtNewsPage = newPage;
                    }
                        else
                    {
                        url = url + "page/2/";
                        lastExtNewsPage = 2;
                    }
            }
        
        lastExtNewsUrl = url;
        
        $( "#dle-content ." + mainClassNewsNavigation + " a" ).html( "<span>Идёт загрузка...</span>" );
        
        $.ajax({
            url: url,
            data: "",
            success: function( data ){
                var parser = new DOMParser();
                var doc = parser.parseFromString( data, "text/html" );
                $( "#dle-content ." + mainClassNewsNavigation ).remove();
                $( "#dle-content" ).html( $( "#dle-content" ).html() + doc.getElementById( "dle-content" ).innerHTML );                    
                $( "#dle-content ." + mainClassNewsNavigation ).html( "<a href=\"#\" onclick=\"loadExtNews(); return false;\" class=\"loadExtNews\"><span>Загрузить ещё</span></a>" );
                
                history.pushState( {}, "", lastExtNewsUrl );
            },
            error: function( xhr, ajaxOptions, thrownError ){
                // Можно по номеру ошибки определять, но в любом случае ответ не тот, показывать нечего, страхуемся )))
                $( "#dle-content ." + mainClassNewsNavigation ).html( "<a href=\"#\" onclick=\"return false;\" class=\"loadExtNews\"><span>Новостей больше нет</span></a>" );
            },
            dataType: "html",
            type: "POST"
        });
    }
    $( document ).ready(
        function(){
            $( "#dle-content ." + mainClassNewsNavigation ).html( "<a href=\"#\" onclick=\"loadExtNews(); return false;\" class=\"loadExtNews\"><span>Загрузить ещё</span></a>" );
        }
    );
</script>
[/aviable]

zip
Юзер

zip - 20 февраля 2016 09:27 -

Но, опять ничего не вышло, постраничная навигация не изменилась на кнопочку показать еще.

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

Помогите разобраться буду очень признателен.

zip
Юзер

zip - 20 февраля 2016 09:29 -


вот картинка

zip
Юзер

zip - 20 февраля 2016 22:17 -

Сделал как Вы сказали, и в коде заменил на template="topnews"

<div id="custom-ajax-test">
    {custom template="topnews" category="2" from="0" limit="5" idblock="custom-ajax-test"}
    {include file="engine/modules/custom_navigation.php?id=custom-ajax-test"}
   </div>


И все равно ничего не изменилось (

zip
Юзер

zip - 23 февраля 2016 17:31 -

pavel31, Помогите пожалуйста разобраться.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх