Ключевые поля pick-запросов

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

Параметр $params['pick']['key-fields'] изменяет режим выборки. Теперь, при осуществлении запроса, для всех полей, приведенных в этом массиве, в обязательном порядке должно быть указано какое-то условие. Иначе ни одна запись не будет извлечена.

Ключевые поля pick-запросов играют важную роль при pick-навигации.

В частности, следующий запрос покажет в блоке 55 только те записи, которые создал пользователь с идентификатором, равным 777.

.tdd
$params['pick']['key-fields'] = [5];

.tpl
<a href='?page=22&block=55&pick[5][eq]=777'>показать</a>

 

Внимание! Рассматриваемый в этой статье параметр $params['pick']['key-fields'] применяется редко, и стоит вопрос об отказе от него, так как существуют другие более универсальные способы не выводить данные блока при различных условиях (а не только при pick-запросах),
например, $params['template-files'] = [];
или лучше $fields['none'] = [2]; См. подробности

Примечания

  • Часто ключевые поля pick-запросов одновременно являются и скрытыми полями. Но обязательными можно сделать любое поле, например, поле select, которое хорошо подходит для условных запросов.
  • Если ключевое поле pick-запроса одновременно является и скрытым полем, предназначенным для идентификатора пользователя (user-id), то кнопка новой записи будет показана только в том случае, если был условный запрос (pick) с идентификатором самого пользователя, открывшего этот блок. Другими словами, пользователи смогут создавать новые записи только в своих разделах, даже те пользователи, которые имеют право редактировать все записи блока (администратор, редакторы сайта и блока).
  • В комплекте шаблонов пробного сайта, находящегося в дистрибутиве Blox CMS, находится файл ./robots.txt с директивами для поисковых роботов. Там, в частности, установлен запрет на индексацию страниц, открытых с помощью запроса pick (если записей много, то так ли иначе, обход всех записей будет произведен и с помощью запросов part). Но для тех страниц, где используются шаблоны с параметром $params['pick']['key-fields'] этот запрет лучше снять, так как в данном случае мы имеем не случайные pick-запросы, а pick-навигацию. Итак, в файле robots.txt выше строки:
    Disallow: /?*&pick[
    
    Нужно добавить еще одну строку, чтобы получилось следующее:
    Allow: /?page=22*&pick[
    Disallow: /?*&pick[
    
    или
    Allow: /?*&block=55&pick[
    Disallow: /?*&pick[
    
    где 22 – это идентификатор страницы, 55 – идентификатор блока, в дескрипторе шаблона которого есть параметр $params['pick']['key-fields'].

    Впрочем, редактирования файла robots.txt можно избежать, если для обращения именно к полям pick-запросов воспользоваться другой, короткой, формой записи pick-запроса.

  • Для более быстрого извлечения данных при pick-запросах, поля таблицы базы данных, к которым производятся запросы, можно сделать индексными. Это делается с помощью переменной дескриптора $keys.

    .tdd
    $params['pick']['key-fields'] = [2, 5];
    $keys =  'INDEX(dat1, dat5);
    
    Подробности читайте в статье Дополнительные настройки таблиц данных
  • При наличии параметра $params['pick']['key-fields'], например, в каталогах, ручная сортировка и сортировка по столбцам работают в рамках pick-запроса к ключевым полям, а не по всему блоку.