AJAX навигация в теге Custom - реализация для DLE

AJAX навигация в теге Custom - реализация

AJAX навигация в теге Custom - реализация

Не так давно я писал статью о невозможности ajax навигации в теге custom. Но так же я в ней упомянул о возможности создания этой самой навигации, но на костылях.
Вот решил поделиться с вами данной реализацией в качестве подарка. С Новым Годом!
Суть данного метода заключается в том, что в момент создания самого Custom блока идет перехват и обработка его параметров с последующим сохранением в сессии. Таким образом мы получаем полноценно работающую навигацию и полностью скрытый от пользователя код. Но как и любой костыль, этот тоже имеет определенный минус. Т.к. параметры хранятся в сессии, то по истечении времени хранения сессии пользователю надо будет обновить страницу сайта, чтобы навигация работала и блок отображался.

Собственно пример работы можете посмотреть у меня на демо сайте d101.sandev.pro
А так же добавил его тут, на sandev.pro в блоке Топ дня

Установка
Открыть файл 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 с содержимым:


В папке engine/modules/ создать файл 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">
	&#123;custom category="8" from="0" limit="5" idblock="custom-ajax-test"}
	&#123;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
Комментарии: (9)
  1. foto
    Посетитель 14 января 2014 23:21 #
    Sander. а как можно вывести навигацию в отдельный блок/место?
    +1
  2. foto
    Посетитель 6 февраля 2014 07:22 #
    Отличный хак! Спасибо!
    0
  3. foto
    Посетитель 9 февраля 2014 17:12 #
    i nikak ni ponel kak eta dabavit na plockpro
    mojet pamojite
    spasibo
    0
  4. foto
    Посетитель 24 февраля 2014 13:28 #
    Можете помочь с scrollto. Или примерно как ево прикрутить сюда?
    0
  5. foto
    Посетитель 8 мая 2017 13:52 #
    Круто! Но не подскажете как сделать чтобы выводились новости не затирая предыдущие и чтобы одна кнопка была "Ещё новости". Типа так, надеюсь понятен вопрос? Хочется сделать так, чтобы вывод был в виде подргрузки новостей, но чтобы сам пользователь нажимал кнопочку если хочет чтобы еще подгрузилась очередная следующая порция новостей.
    0
  6. foto
    Посетитель 23 апреля 2019 21:26 #
    Если честно, довольно странно читать в данной статье о необходимости применения каких-то костылей для Ajax пагинации в custom и тем более о невозможности сделать это в виде полноценного решения, как Вы пишете например, в этой статье - https://sandev.pro/web/50-ajax-navigaciya-v-tege-custom.html . На самом деле можно решить эту задачу намного проще, чем вы здесь описали, модуль правда платный - https://new-dev.ru/10-ajax-navigaciya-v-custom.html . В файл движка достаточно внести одну строчку, если же версии 13 и выше - там вообще используется система плагинов. Используется оформление "стандартной" пагинации DLE, не надо колдовать со стилями и т.п. Никаких недостатков не было замечено.
    0
    1. foto
      Администратор 24 апреля 2019 13:13 #
      Я встречал на сайтах решение с ajax навигацией в custom, в виде прописанного аттрибута:
      data-custom="тут строка параметров custom"

      Очень надеюсь, что в платном модуле не используется такой метод.

      PS. Этой статье 5 лет...
      0
  7. foto
    Гость 9 февраля 2020 03:17 #
    Доброй ночи!

    Прекрасно понимаю, что статья очень старая, но все модуль прекрасно работает и на 13 dle в части подгрузки именно блоков {custom}
    Но хотел спросить у ТС вот чем: модуль отрабатывает отлично параметров: category, нового categoryexclude, template, limit и order.
    Но вот толкнулся с загвоздкой - не могу научить его работать с параметром xfields (скажем xfields='year|2018' для дополнительного поля year или xfields='top' для признака топа в новостях).
    Знаю что копать нужно в сторону подключения функций связанных с выводом доп. полей, но вот куда не знаю.
    Возможно вы посоветуете более актуальные модули...
    Буду благодарен за помощь
    0
  8. foto
    Гость 6 октября 2023 14:21 #
    Для DLE 16 видимо уже не актуально?) ошибка в консоли ( GET site.ru/engine/ajax/custom.php?id=custom-ajax-test&page=2 404 (Not Found) )
    Может кто знает в чем дело?)
    0
Добавить комментарий

Внимание! Все сообщения касающиеся техподдержки будут удалены или проигнорированы

Attention! All messages asking for technical support will be removed or ignored

  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2024.
При копировании, ссылка на источник обязательна.