14.12.13, 13:12
1 комментарий
  DLE Хаки

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">&#123;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',
 )
)



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

Автор: Sander

Реклама

Комментарии

  1. Katrin 14 декабря 2013 16:33                    

    Сосем не понятно и запутано. scratch

Напишите своё мнение

  • acuteaggressiveair_kissangel
    badbbbeachbeee
    biggrinbig_bossblumblush
    boastbombboredombye
    clappingcraycrazycurtsey
    dancedashdeclarediablo
    diroldon-t_mentiondownloaddrinks
    first_moveflirtfocusfool
    friendsgive_heartgive_rosegood
    hangheartheathelp
    hihunterhystericireful
    kingkisslaughlazy
    lolmail1mambaman_in_love
    mdamega_shokmoilmosking
    musicneanegativenew_russian
    okon_the_quietpardonparting
    partypilotpioneerpleasantry
    popcormpranksterprevedpunish
    roflrtfmrussiansad
    sarcasticscarescratchsearch
    secretsensoredshokshout
    slowsmilesmokesoldier
    soldier_girlsorryspitefulspruce_up
    stinkersuicidesunsuperstition
    swoonteasetenderthanks
    thisto_pick_ones_noseto_take_umbragetreaten
    umnikunknwvampirevava
    victorywackowhistlewink
    wizardyahooyesyu
    e101e102e103e104
    e105e106e107e108
    e109e110e111e112
    e113e114e115e116
    e117e118e119e120
    e121e122e123e124
    e125e126e127e128
    e129e130e131e132
    e133e134e135e136
    e137e138e139e140
    e141e142e143e144
    e145e146e147e148
    e149e150e151e152
    e153e154e155e156
    e157e158e159e160
    e161e162e163e164
    e165e166e167e168
    e169e170e171e172
    e173e174e175e176
    e177e178e179e180
    e181e182e183e184
    e185e186e187e188
    e189e190e191e192
    e193e194e195e196
    e197e198e199e200
    e201e202e203e204