DLRequest

    DLRequest - запуск сниппетов с параметрами из get/post

    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:

    [+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:
    [+keepParams+] [+params+]
    ` & param.ownerTPL=`@CODE: ` & param.tpl=`@CODE: ` &sortBy.tpl=`@CODE: ` &display.ownerTPL=`@CODE: ` &keepTpl=`@CODE: ` !] </div> [+pages+]

    После & пробелы стоят, потому что иначе редактор подменяет символы.

    Автор: Pathologic