Хак Хак AJAX навигация для тега Custom
Хак предназначен для сайтов в которых вывод новостей на главной с помощью тега Custom но как правило такие сайты не имеют своей навигации по страницам. И тут вам на помощь замечательный хак от Sander. Даанный метод заключается в том, что в момент создания самого Custom блока идет перехват и обработка его параметров с последующим сохранением в сессии. Таким образом мы получаем полноценно работающую навигацию и полностью скрытый от пользователя код. Но как и любой костыль, этот тоже имеет определенный минус. Т.к. параметры хранятся в сессии, то по истечении времени хранения сессии пользователю надо будет обновить страницу сайта, чтобы навигация работала и блок отображался.
Для установки проделываем несколько действий
Открыть файл engine/modules/functions.php
Найти строку:
$sql_select .= " WHERE ".implode(' AND ', $where)." ORDER BY " . $fixed . $news_sort . " " . $news_msort . " LIMIT " . $custom_from . "," . $custom_limit;
ПЕРЕД ней вставить:
if(preg_match("#idblock=['\"](.+?)['\"]#i",$param_str,$match)){
$_SESSION['custom_'.$match[1]] = array("string"=>$param_str,"where"=>implode(' AND ', $where));
}
В папке engine/ajax/ создать файл custom.php с содержимым:
custom.php
В папке engine/modules/ создать файл custom_navigation.php с содержимым:
custom_navigation.php
В любом подключенном к шаблону JS файле прописать код функции:
function custom_navigation(id,p){
$.get(dle_root+"engine/ajax/custom.php",{id:id,page:p},function(d){
$("#"+id).html(d);
});
return false;
}
И основная часть - шаблон:
<div id="custom-ajax-test">
{custom category="8" from="0" limit="5" idblock="custom-ajax-test"}
{include file="engine/modules/custom_navigation.php?id=custom-ajax-test"}
</div>
Обратите внимание, что custom-ajax-test повторяется 3 раза. Это и есть ID блока в котором будут меняться страницы.
Так же последние 3 параметра тега custom являются строго обязательными к заполнению, в том числе from="0"
Настройку стилей и шаблонов возложу на ваши хрупкие плечи. Уверен, вы справитесь ;)
С уважением,
Олег Александрович a.k.a. Sander