Советы по pick-навигации

  1. Как сделать запрос выборки к нескольким блокам одновременно?

    В Blox CMS запросы специальной выборки единовременно можно делать только к одному блоку страницы, то есть, в URL указывается только один конкретный блок: href='?page=$page&block=$block&ЗапросСпецВыборки'

    Но параллельные запросы к другим блокам можно создать искусственно. Нужно просто взять необходимые данные с помощью метода Request::get(), и сформировать запрос к другому блоку с помощью Request::add(). Пример: шаблон для комментариев блога. См. также статью Как сделать запросы к нескольким блокам в одном URL?

  2. Как сделать однозаписный шаблон?

    Шаблоны, предназначенные для pick-навигации, должны быть только многозаписными. Но как быть, когда нужен однозаписный шаблон (когда в блоке нужно отображать только одну запись)?

    Для этого ничего особого делать не нужно. Во-первых, шаблон для pick-навигации, естественно, объявляется многозаписным, то есть, в дескрипторе шаблона должен присутствовать параметр multi-record. Однако, код самого шаблона (.tpl) пишется, как однозаписный, то есть, без перебора (с помощью оператора foreach).

    К чему это приведет? Когда у пользователя еще нет ни одной записи, он будет видеть кнопку новой записи. После создания новой записи, он будет видеть только эту запись (удовлетворять запросу будет только эта одна запись), а кнопку новой записи больше не увидит, так как перебора записей нет. Естественно, при этом на блок не должно накладываться условие обратного порядка выборки, иначе в режиме редактора будет отображаться только кнопка новой записи.

  3. Индексация полей pick-запросов

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

    .tdd
    <?php 
        $keys = 'INDEX(dat1, dat2)';
    ?>

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

    .tdd
    <?php 
        $keys = 'UNIQUE INDEX(dat1, dat2, `rec-id`, `block-id`)';
    ?>
    Так как в одной таблице базы данных могут быть записи из разных блоков, здесь добавлены названия полей для номеров записей и блоков,