Хак AJAX загрузка страниц категорий новостей работает почти на всех версиях Dle. Он устанавливается только в шаблон, поэтому если вы захотите обновить движок на новую версию, то проблем не возникнет.
Суть работы хака:
Вы зашли на страницу, где выводится список новостей с навигацией. После полной загрузки страницы начинает работать специальный java-script код. Код ищет на странице элемент навигации и всё существующее заменяет на одну ссылку «Загрузить ещё». При нажатии на эту самую кнопку, посылается AJAX запрос к сайту, идёт подгрузка полной версии следующей страницы. После получения кода страницы, идёт выборка основного контента (из тега { content }). После выборки контента, он добавляется к текущему, тем самым показывая новые новости. Также хак автоматически меняет адрес в строке браузера, чтобы при обновлении страницы, пользователь видел последние полученные новости. Если движок посылает ошибку 404 или другую, тем самым кнопка становится не активной и на ней написано «Новостей больше нет».
Установка:
Откройте файл main.tpl текущего шаблона и перед закрывающимся тегом:
Добавьте:
[aviable=main|cat]
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( "Идёт загрузка..." );
$.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( "Загрузить ещё" );
history.pushState( {}, "", lastExtNewsUrl );
},
error: function( xhr, ajaxOptions, thrownError ){
// Можно по номеру ошибки определять, но в любом случае ответ не тот, показывать нечего, страхуемся )))
$( "#dle-content ." + mainClassNewsNavigation ).html( "Новостей больше нет" );
},
dataType: "html",
type: "POST"
});
}
$( document ).ready(
function(){
$( "#dle-content ." + mainClassNewsNavigation ).html( "Загрузить ещё" );
}
);
[/aviable]
Ну и небольшие настройки модуля:
Собственно настраиваете страницы, на которых будет работать навигация (можно например добавить на закладки, теги, архив и т.д.)
[aviable=main|cat]
Название класса основного элемента в файле шаблона navigation.tpl
var mainClassNewsNavigation = "navigation";
Можно также переместить код в отдельный js файл, и на странице подгружать примерно так:
[aviable=main|cat][/aviable]
Версия DLE: 7.х-9.x
Автор: Rezer
Сайт автора: rezer.net
166 Просмотров
Благодарностей: 0
0