 
Как передать данные с одного блока на другой
В системе Blox CMS блоки независимы и изолированны друг от друга.
Любые переменные, объявленные в блоке, действуют только в этом блоке.
Как же обеспечить передачу данных от одного блока к другому при генерации страницы?
Что касается передачи данных на блок другой страницы, то здесь никаких проблем нет – эти методы описаны в статье "Методы передачи данных с одной страницы на другую"
В случае передачи данных с одного блока на другой блок в пределах одной страницы дело обстоит не так просто. Вы не сможете передать данные (даже в виде глобальной переменной) на шаблон, файл которого уже был вызван.
Поэтому, нужно знать последовательность, в которой вызываются файлы шаблонов.
В статье "Как генерируется страница" описывается весь процесс отображения страницы. Из этого описания можно построить блок-схему последовательности вызова дескрипторов и шаблонов при генерации html-кода блока, содержащего вложенные блоки.
Последовательность исполнения файлов при генерации html-кода блока, содержащего вложенные блоки

- Дескриптор дочернего (вложенного) блока вызывается после дескриптора родительского блока.
- Шаблон дочернего блока вызывается до шаблона родительского блока.
- Чем выше в коде дескриптора объявляется block-данное (с помощью массива types), тем раньше вызываются соответствующие файлы (как дескриптора, так и шаблона).
Пример, иллюстрирующий последний пункт:
.tdd
# Файлы этого блока будут вызваны раньше
$types[2] = "block template('menu')";
# Номер поля не оказывает никакого влияния на порядок вызова блоков
$types[1] = "block template('content')";
То есть, чтобы передавать данные с одной ветви древа блоков на другую ветвь, нужно начальный блок объявлять в дескрипторе выше.
Все, что было сказано в отношении файлов шаблонов (tpl), относится и к файлам обработчиков вывода (oh). Нужно только помнить, что файл обработчика вызывается непосредственно перед вызовом шаблона.
Хотим обратить ваше внимание, на то, что с дополнительными глобальными переменными можно работать не только в шаблонах, но и в дескрипторах. В частности, с помощью этих переменных можно управлять параметрами шаблона.
Можно даже управлять параметрами самих данных.
Внимание! Речь идет только о параметрах идентификационных данных. Не следует затрагивать строки кода, в которых объявляются обычные данные (MySQL), так как это будет приводить к изменению таблиц базы данных.
См. также
|