DLRequest - запуск сниппетов с параметрами из get/post
Сниппет разработан для замены Ditto с экстендером request по просьбе Extremum и на его же средства, за что большое спасибо.
Сниппет принимает значения из post или get-массива и использует их в качестве параметров для запуска другого сниппета. Изначально планировалась работа только с DocLister (отсюда и название), но в итоге можно вызывать любой сниппет. Тем не менее, наличие установленного DocLister'а обязательно.
DLRequest умеет не только передавать параметры, но и строить форму для управления этими самыми параметрами, без костылей типа:
<?php //[!selected? &field=`ditto_id1_sortDir` &value=`DESC`!] if ($_REQUEST[$field] == $value) { echo "selected"; }
Важный момент – возможные значения параметров задаются разработчиком, то есть если в форме для выбора количества документов на странице указано «10, 20, 50, 100», то подставить руками url?display=100500 не получится – такой параметр будет просто проигнорирован.
Предусмотрена также возможность сохранять значения параметров, которые передаются из браузера для других сниппетов, например, для DocLister это будет параметр page. То есть если в списке документов вы находитесь на странице 5, то после смены, например, направления сортировки, все равно останетесь на странице 5.
Теперь приведу пример вызова, из которого понятно, как это все работает:
[+paramsForm+] <div> [!DLRequest? &runSnippet=`DocLister` &parents=`2` &tpl=`@CODE:` & param.ownerTPL=`@CODE: ` & param.tpl=`@CODE: ` &sortBy.tpl=`@CODE: ` &display.ownerTPL=`@CODE: ` &keepTpl=`@CODE: ` !] </div> [+pages+][+id+]. [+pagetitle+]
` &paginate=`pages` &display=`0` &rqParams=`{ "sortBy":{ "id":"По id", "pagetitle":"По pagetitle" }, "sortDir":{ "asc":"По возрастанию", "desc":"По убыванию" }, "display":{ "1":"1 документ", "3":"3 документа", "5":"5 документов" } }` &rqParamsNames=`{ "sortBy":"Сортировать по", "sortDir":"Порядок", "display":"Результатов на странице" }` &selectedClassName=`selected` & paramsForm=`paramsForm` &keepParams=`page` & paramsOwnerTPL=`@CODE:
После & пробелы стоят, потому что иначе редактор подменяет символы.
Автор: Pathologic