Извлечение данных из таблиц с помощью класса Request

Request::getTab($blockInfo, $tdd, $xprefix=null)

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

  • Возвращает многомерный массив, аналогичный массиву $tab в переменных шаблона.
  • $blockInfo — параметры блока. Это массив с тремя обязательными элементами ['id'=>..., 'src-block-id'=>..., 'tpl'=>...], в качестве значений которых берутся, соответственно, регулярный номер блока, номер исходного блока и имя шаблона. Этот массив можно получить с помощью метода Blox::getBlockInfo().

  • $tdd — массив всех переменных дескриптора. Этот массив можно получить с помощью метода Tdd::get().

  • $xprefix — префикс переменных дескриптора (строка). Если передается "x", то метод будет применяется к экстраданным.

Именно с помощью этого метода в системе автоматически извлекаются данные всех блоков, которые отображаются на текущей странице. Поэтому собственно данный метод применять и не приходится — нужно только сделать необходимые запросы ко всем блокам, как это описано на странице Класс Request. Данный метод обычно применяется для извлечения данных произвольного блока.

Пример:

# Нужны данные только о персонах возрастом более 25 лет. 
# Сортировать сначала по фамилии, затем по имени.
$personsBlockId = 9;
Request::add('block='.$personsBlockId.'&pick[3][gt]=25&sort[1]=asc&sort[2]=asc');
...
$personsBlockId = 9;
$blockInfo2 = Blox::getBlockInfo($personsBlockId);
$tdd2 = Tdd::get($blockInfo2);
# Извлечь таблицу
$tab2 = Request::getTab($blockInfo2, $tdd2);

Не забывайте о том, что на выборку данных блока влияют параметры, заданные в дескрипторе шаблона. При этом, метод Request::add перебивает эти параметры.

Request::getTable($table, $sampleName=null, $recordIdColumn=null, $xSql=null)

Метод для извлечения данных из любой таблицы с учетом предварительно сформированных запросов к этой таблице.

С помощью метода Request::getTable() можно извлекать данные из всех таблиц, в том числе из таблиц шаблонов (с префиксом $), хотя в последнем случае метод Request::getTab() предоставляет больше возможностей.

  • Возвращает многомерный массив. Первый ключ – последовательный номер (начиная с 0), второй ключ – имя столбца таблицы.
  • $table — имя таблицы.

  • $sampleName — идентификатор запроса (произвольная строка). Данный параметр применяется, когда к таблице необходимо сделать какие-то запросы. Причем, сами запросы можно формировать в других скриптах. Не используйте только цифры, так как в этом случае запрос будет интерпретирован, как запрос к блоку с этим номером.

  • $recordIdColumn — имя ключевого поля. Этот параметр используется только для извлечения одной записи (и соседних) по запросу "single".

  • $xSql — дополнительное условие в SQL запросе. Строка должна начинаться со слова: AND ...

Для формирования запросов к таблице перед ее извлечением можно использовать весь арсенал средств, применяемый при запросах к блокам. Имеются в виду запросы sort, pick, limit, part, backward, search, single, которые можно сделать как напрямую с помощью метода Request::add(), так и через URL.

Для того чтобы сформировать запрос к произвольной таблице и извлечь данные с помощью метода Request::getTable(), нужно следовать двум правилам:

  • Вместо номеров полей нужно использовать имена колонок.

  • Вместо номеров блоков нужно указывать произвольный идентификатор запроса

Пример: В системной таблице users найти всех пользователей с определенным почтовым ящиком

echo '
<a href="?page=22&block=users2&p[email]=info@bloxcms.net">
    Найти пользователей с таким эл.адресом
</a>';
. . .
Request::add('block=users2&limit=50'); // Выводить по частям по 50 шт
$users = Request::getTable(Blox::info('db','prefix').'users', 'users2'); // Извлечение

См. также