AJAX навигация в теге custom для DLE

AJAX навигация в теге custom

AJAX навигация в теге custom

Данный вопрос уже многих интересует, неоднократно задавали вопросы по этой теме, однако вразумительного ответа никто нигде не получил.
Не буду ходить вокруг да около и сразу отвечу на всех мучающий вопрос - как сделать AJAX навигацию в теге {custom}.
Ответ прост и лаконичен - никак!

А теперь займемся словоблудием и рассуждениями.
Прежде всего стоит понимать принцип работы тега {custom} и его особенности. В мануале довольно подробно описаны все задаваемые параметры, мне для примера хватит и двух. Допустим надо вывести 6 новостей из второй категории:
{content category="2" limit="6"}

При компиляции шаблона, регулярка разбивает эту строку на составляющие, т.е. мы из шаблона передаем значения переменных в обработчик:
$category=2;
$limit=6;

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

Перейдем к AJAX стороне вопроса. Чтобы сформировать "следующую" шестерку новостей в шаблоне мы бы использовали подобную запись:
{content category="2" from="6" limit="6"}

Кстати, один из вариантов реализации "псевдо-AJAX" навигации - это изначальное формирование нескольких таких блоков с разными значениями параметра from="". В некоторых случаях подобный вариант и подойдет, когда место под блок строго определено, а хочется чтобы там было больше новостей. Но о настоящей навигации тут нет и речи, это лишь табы с ограниченным количеством страниц.

Но вернемся к идее полноценной навигации. Чтобы скрипт по AJAX запросу мог сформировать следующие 6 новостей и выдал их в шаблон, он (скрипт) должет получить значения заданных параметров или взять их где-то внутри средствами движка. Но т.к. движок нигде не хранит значения параметров заданных в custom остается один вариант - передача этих параметров из шаблона, например так:
$.get(dle_root+"engine/ajax/custom.php",{category:'2',from:6,limit:6},function(data){...});

С одной стороны все прекрасно и замечательно. В итоге мы получим полноценно работающую навигацию, AJAX подгрузку и прочие плюшки. Однако не стоит забывать о главной стороне вопроса - БЕЗОПАСНОСТЬ! Любой злоумышленник, а такие будут (!), вплоть от недоброжелателей до любопытных детей, сможет вручную задать любой из параметров принимаемых custom-ом, но пожалуй самое неприятное - возможность создать перегрузку mysql-а. Достаточно будет прописать так:
$.get(dle_root+"engine/ajax/custom.php",{category:'1-999',from:0,limit:999999},function(data){...});

Конечно, в обработчике можно наставить ограничений на limit, на category и на все прочие параметры, но об универсальности не будет и речи.
Вот еще простой пример:
$.get(dle_root+"engine/ajax/custom.php",{category:'1',template:"main"},function(data){...});

И в кустоме будет использоваться шаблон главной страницы, и полноценный рип не за горами. Даже не рип, а полная копия шаблона.

Так что в полноценном понимании "AJAX в теге custom" невозможен.
Заметьте, я не говорю, что навигация в принципе не возможна. Ее можно легко реализовать, но с предзаданными параметрами в самом скрипте. Т.е. к примеру используем код вывода:
<div id="block_1">{content category="2" from="0" limit="6" template="short_custom"}</div>

JS:
$.get(dle_root+"engine/ajax/custom.php",{id:"block_1",page:2},function(data){...});
В php передается только 2 параметра.

В PHP файле:
$custom = array(
 'block_id' => array(
  'category' => '2',
  'from' => '0',
  'limit' => '6',
  'template' => 'short_custom',
 )
)


Но этот метод как раз то, что называют "костыль". Есть и другие варианты, однако все они будут так же являться костылями. Вполне возможно, что чуть позже напишу статью по реализации навигации по одному из костыльных методов.
На этом пока все, надеюсь я не зря мозолил пальцы и писал эту статью :)

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (1)
  1. foto
    Посетитель 25 декабря 2013 20:59 #
    Спасибо за статьтю, жду следующих твоих статей. А вообще хотелось-бы увидеть хак, благодаря которому можно било-бы выводить картинки с помощью тега, без вставки изображения в краткую или полную новость и доп.поля!
    0
Добавить комментарий

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

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

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