AJAX навигация в теге custom » Techno-Co — Всё для вебмастера, для создание сайтов с нуля. {title}

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

Не буду ходить вокруг да около и сразу отвечу на всех мучающий вопрос — как сделать 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» невозможен.Заметьте, я не говорю, что навигация в принципе не возможна. Ее можно легко реализовать, но с предзаданными параметрами в самом скрипте. Т.е. к примеру используем код вывода:

{content category="2" from="0" limit="6" template="short_custom"}

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',
 )
)

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

Автор: Sander

Комментарии 0