Пример каталога товаров:
ключевые данные хранятся в скрытом поле

Весь каталог будет находиться на одной странице. Страница устроена так: слева идет список категорий товара, справа - данные о товарах в выбранной категории.

Корневому блоку назначьте шаблон catalog_. Двум остальным блокам нужно назначить шаблоны по умолчанию. Блоку слева системой будет предложен шаблон catalog_categories, а блоку справа — catalog_goods:

Корневой шаблон (шаблон страницы)

catalog_.tpl
<?php
echo "
    {$dat['edit']}
    <table>
    <tr>
        <td>$dat[1]</td>
        <td>$dat[2]</td>
    </tr>
    </table>
";
?>
catalog_.tdd
<?php

$types = [
    1=>"block template('catalog_categories')",
    2=>"block template('catalog_goods')",
];

?>

Шаблон для категорий товара

catalog_categories.tpl
<?php

# Блок для данных о товаре
# (с шаблоном catalog_goods)
$goodsBlock = 3;

if (empty($tab))
    return;

echo "<ul>";
foreach ($tab as $dat)
{
    echo "<li>";
    echo $dat['edit'];
    echo "<a href='?page=$page";

    # Запрос к другому блоку:
    echo "&block=$goodsBlock";

    # Из того блока будут извлечены записи,
    # данные которых в поле 3 равны номеру
    # записи текущено блока.
    # Номер записи здесь играет роль
    # идентификатора категории.
    echo "&p[3]={$dat['rec']}'>";
    # Выше приведана короткая форма записи
    # pick-запроса. Стандартная форма - ниже:
    # echo "&pick[3][eq]={$dat['rec']}'>";

    echo $dat[1];
    echo "</a>";
    echo "</li>";
}
echo "</ul>";
?>
catalog_categories.tdd
<?php

$titles[1] = 'Категория товара';
$types[1] = 'varchar(255)';

$params['multi-record'] = true;

?>

Шаблон для данных о товаре

catalog_goods.tpl
<?php

if (empty($tab))
    return;

echo "<table>";
foreach ($tab as $dat)
{
    echo "
    <tr>
    <td>
        {$dat['edit']}
        $dat[1]
    </td>
    <td>
        $dat[2]
    </td>
    </tr>";
}
echo "</table>";

?>
catalog_goods.tdd
<?php

# Этот блок
$goodsBlock = 3;

$titles[1] = 'Название товара';
$titles[2] = 'Цена';

$types[1] = 'varchar(255)';
$types[2] = 'decimal(6,2)';
$types[3] = 'int';# ID категории

$params['multi-record'] = true;

# При создании новой записи,
# в поле 3 будет записан идентификатор
# категории товара, который был передан
# из блока с шаблоном catalog_categories 
$defaults[3] =
Request::get($goodsBlock,'pick', 3, 'eq');

# Поле 3 скрыть от редактирования 
$fields['hidden'] = [3];

# Только при поступлении запроса
# к полю 3, будет произведена выборка
# (т.е. нужно щелкнуть ссылке из списка
# категорий) 
$params['pick']['key-fields'] = [3];

?>

Примечания

  • В некоторых шаблонах и дескрипторах необходимо указать номер блока с данными о товаре в переменной $goodsBlock, которая введена для простоты изложения. Сравните этот пример с аналогичным примером, где номер блока вписывать вручную не нужно.