Класс Request

Request — это класс для прямого управления запросами к блокам.

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

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

Например, в каталоге товаров могут быть такие блоки: блок навигации (меню), товарный блок, блок сопутствующих товаров, блок аналогичных товаров, и одновременно ко все блокам нужно производить соответствующие запросы.

Как построить запросы в этом случае? Во-первых, первичные запросы обычно формируются в ссылках блока навигации. Во-вторых, нужно решить, к какому блоку будут идти запросы непосредственно через URL. В случае с каталогом товаров, самый естественный вариант — это товарный блок.

При щелчке по пункту меню должно меняться не только содержимое товарного блока, но и все остальные блоки, в том числе и сам блок навигации. Как раз, с помощью класса Request и создаются запросы к остальным блокам. При этом, соответствующие коды нужно вносить в дескриптора (.tddh) или обработчика дескриптора (.tddh), так как они вызываются до формирования блока из шаблона (.tpl), то есть до извлечения данных из базы данных.

Request::get($blockId=null, $filter=null, $x1=null, $x2=null)

Метод для получения запросов. Можно применять до четырех параметров. Примеры:

Request::get() — получение массива всех запросов ко всем блокам страницы.

Request::get($block) — получение всех запросов к указанному блоку.

Request::get($block, 'search') — получение параметров поискового запроса к указанному блоку. Параметр $filter может принимать следующие значения: 'backward', 'limit', 'part', 'pick', 'search', 'single', 'sort'.

Параметры запросов можно уточнять, применяя третий и четвертый параметры, где это возможно. Например:
Request::get(2, 'pick', 1, 'eq') — получение значения, переданного с помощью URL-запроса: 'block=2&pick[1][eq]=99' или 'block=2&p[1]=99'.

Входные данные (последовательность параметров) метода Request::get() и выходные данные (возвращаемый массив) имеют в своем роде (иерархически) одинаковую структуру.

Некоторые данные запросов

Request::get($block, 'part', 'current')Номер выбранной (текущей) части
Request::get($block, 'part', 'num-of-parts')Количество частей, на которые были разбиты все записи
Request::get($block, 'part', 'num-of-recs')Общее количество записей (во всех частях)
Request::get($block, 'part', 'prev')Номер предыдущей части
Request::get($block, 'part', 'next')Номер следующей части
Request::get($block, 'part', 'default')Номер части, открываемой по умолчанию, то есть, без запроса part.
При $params['part']['numbering']='desc' значение этой переменной равно Request::get($block, 'part', 'num-of-parts'), в остальных случаях значение равно 1. Пример
Request::get($block, 'part', 'last')Номер части, находящейся в конце пагинации,
в противоположность переменной Request::get($block, 'part', 'default').
Request::get($block, 'part', 'parts')Массив с номерами всех частей по порядку
Request::get($block, 'part', 'limit')Ограничение на число отображаемых записей.
Совпадает с параметром дескриптора: $params['part']['limit']. Однако, если был url-запрос limit, то его значение становится равным значению этой переменной.
Request::get($block, 'search', 'where')Где искать: в начале слов, в любом месте или в начале текстов
Request::get($block, 'search', 'highlight')Выделять найденные поисковые слова.
Request::get($block, 'search', 'fields')Массив полей, поисковые слова которых объединяются в один общий запрос. Используется обычно, когда одно поле ввода используется для нескольких полей.
Request::get($block, 'search', 'words', НомерПоля)Все поисковые слова данного поля в виде массива слов.
Request::get($block, 'search', 'patterns', НомерПоля)Массив паттернов для поиска среди текста данного поля (поставить в качестве первого параметра функции preg_replace)
Request::get($block, 'search', 'replacements', НомерПоля)Массив строк для замены текста данного поля (поставить в качестве второго параметра функции preg_replace)
Request::get($block, 'single')Номер запрошенной записи
Request::get($block, 'backward')Если эта переменная истинна, значит записи отображаются в обратном порядке.


Request::remove($blockId=null, $filter=null, $x1=null, $x2=null)

Удаление определенных запросов или их элементов. Параметры такие же, как у метода Request::get().

Пример: Request::remove('block=2&p[1]');


Request::set($requests)

Метод используется для формирования запросов к блокам.

Request::set()
Если опустить параметр, то будут обработаны глобальные запросы GET и POST, впрочем, разработчику сайта специально этого делать не нужно – система делает это автоматически.

Request::set($requests)
Как только вы вызовите данный метод с параметром, все запросы ко всем блокам будут сброшены. Отсюда следует, что для того чтобы просто сбросить все запросы, достаточно передать пустой параметр: Request::set(''). При этом, на страничке у каждого блока будут выведены все записи (без фильтров).

Если вы собираетесь только добавить какой-то запрос, используйте метод Request::add(), описанный ниже.

Request::add($requests)

Метод служит для добавления запросов к существующим (или их замене, при совпадении). Пример: Request::add('block=1&part=2');

Входные данные для методов Request::set() и Request::add()

В приведенных выше методах в качестве параметра применяется переменная $requests. Допустимы три формата этой переменной:
  1. Строка url-параметров запросов специальной выборки записей.
    Request::add('block=2&p[1]=99&limit=10');
    Request::add('block=3&part=1');
    
    • Применяется для запроса только к одному блоку за один вызов метода.
    • Параметр block указывать обязательно!
    • Все возможные параметры запросов: 'backward', 'limit', 'part', 'p', 'pick', 's', 'script', 'search', 'single', 'sort'.
  2. Массив упрощенный
    Request::add([
        2=>[
            'p'=>[1=>99],
            'limit'=>10,
        ],
        3=>['part'=>1],
    ]);
    • Массив представляет собой простую трансляцию строкового запроса (см. выше) в массив. Единственная особенность — параметр block выведен в качестве ключа верхнего уровня.
    • Можно применять для запросов к любому числу блоков.
  3. Массив полный
    Request::add([
        2=>[
            'pick'=>[1=>['eq'=>99]],
            'part'=>['limit'=>10],
        ],
        3=>['part'=>['current'=>1]],
    ]);
    • Структура массива совпадает со структурой массива, возвращаемого методом Request::get() и со структурой переменной шаблона $request .
    • Этим способом можно изменять дополнительные параметры запроса, недоступные предыдущими двумя способами.

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


Request::convertToQuery($request)

Метод используется для формирования параметров URL из массива запросов, относящихся к определенному блоку.
Параметр $request - массив без ключа "блок", следовательно параметр &block в полученной строке будет отсутствовать – его нужно записывать отдельно. Пример:
$filtersQuery = Request::convertToQuery(Request::get($blockId));
$href = '?edit&block='.$blockId.$filtersQuery;

См. также Url::arrayToQuery()


См. также