CONTENT MANAGEMENT SYSTEM
Blox Logo
Blox CMS — блочный метод сайтостроения
.
 
Blox Help

←→

Как передать данные с одного блока на другой

В системе Blox CMS блоки независимы и изолированны друг от друга. Любые переменные, объявленные в блоке, действуют только в этом блоке. Как же обеспечить передачу данных от одного блока к другому при генерации страницы?

Что касается передачи данных на блок другой страницы, то здесь никаких проблем нет – эти методы описаны в статье "Методы передачи данных с одной страницы на другую"

В случае передачи данных с одного блока на другой блок в пределах одной страницы дело обстоит не так просто. Вы не сможете передать данные (даже в виде глобальной переменной) на шаблон, файл которого уже был вызван.

Поэтому, нужно знать последовательность, в которой вызываются файлы шаблонов. В статье "Как генерируется страница" описывается весь процесс отображения страницы. Из этого описания можно построить блок-схему последовательности вызова дескрипторов и шаблонов при генерации html-кода блока, содержащего вложенные блоки.

Последовательность исполнения файлов
при генерации html-кода блока,
содержащего вложенные блоки


Последовательность исполнения файлов


  • Дескриптор дочернего (вложенного) блока вызывается после дескриптора родительского блока.
  • Шаблон дочернего блока вызывается до шаблона родительского блока.
  • Чем выше в коде дескриптора объявляется block-данное (с помощью массива types), тем раньше вызываются соответствующие файлы (как дескриптора, так и шаблона).

Пример, иллюстрирующий последний пункт:

.tdd

# Файлы этого блока будут вызваны раньше
$types[2] = "block template('menu')";

# Номер поля не оказывает никакого влияния на порядок вызова блоков
$types[1] = "block template('content')";
То есть, чтобы передавать данные с одной ветви древа блоков на другую ветвь, нужно начальный блок объявлять в дескрипторе выше.

Все, что было сказано в отношении файлов шаблонов (tpl), относится и к файлам обработчиков вывода (oh). Нужно только помнить, что файл обработчика вызывается непосредственно перед вызовом шаблона.

Хотим обратить ваше внимание, на то, что с дополнительными глобальными переменными можно работать не только в шаблонах, но и в дескрипторах. В частности, с помощью этих переменных можно управлять параметрами шаблона. Можно даже управлять параметрами самих данных.

Внимание! Речь идет только о параметрах идентификационных данных. Не следует затрагивать строки кода, в которых объявляются обычные данные (MySQL), так как это будет приводить к изменению таблиц базы данных.


См. также