Проблема передачи данных с одного блока на другой возникает при разработке страниц, состоящих из разных блоков, но выполняющих одну задачу.
В качестве исходного примера возьмем каталог товаров, описанный в другой статье. В шаблонах того примера нужно было указывать номер блока в двух других шаблонах (в переменной $goodsBlock).
Значение этой переменной становилось известным только после назначения шаблона. Такие ручные настройки нежелательны, поэтому постараемся избавиться от переменной настройки.
<?php echo " {$dat['edit']} <table> <tr> <td>$dat[1]</td> <td>$dat[2]</td> </tr> </table> "; ?>
<?php
$types = [
1 => "block('catalog_categories','new')",
2 => "block('catalog_goods','new')",
];
?>
<?php # Блок для данных о товаре $GLOBALS['catalog_goods'] = $block + 1; # Номер блока с шаблоном catalog_goods # больше на единицу номера текущего блока, # так как шаблон catalog_goods # назначается автоматически следом. if (empty($tab)) return; echo "<ul>"; foreach ($tab as $dat) { echo "<li>"; echo $dat['edit']; echo "<a href='?page=$page"; echo "&block=".$GLOBALS['catalog_goods']; echo "&p[3]={$dat['rec']}'>"; echo $dat[1]; echo "</a>"; echo "</li>"; } echo "</ul>"; ?>
<?php
$titles[1] = 'Категория товара';
$types[1] = 'varchar(255)';
$params['multi-record'] = true;
?>
<?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>"; ?>
<?php
$titles[1] = 'Название товара';
$titles[2] = 'Цена';
$types[1] = 'varchar(255)';
$types[2] = 'decimal(6,2)';
$types[3] = 'int';
$defaults[3] = .... код недописан ....
$params['multi-record'] = true;
$fields['hidden'] = [3];
$params['pick']['key-fields'] = [3];
?>
В этом случае, данные будут переданы во все шаблоны и дескрипторы комплекта. Напоминаем, что делать это лучше с помощью массива $GLOBALS.