Файл ∗.tddh (предобработчик дескриптора)

Дескриптор — это обычный php-скрипт, который вызывается до извлечения данных из базы данных и подстановки этих данных в шаблон. Именно в этом файле задаются параметры выборки данных из базы данных. По этой причине через дескриптор можно программно управлять выборкой данных.

С другой стороны, в массиве $types дескриптора задается структура базы данных. И любые изменения этого массива вызовут изменения и в базе данных. Поэтому, программное изменение массива $types является крайне нежелательным! Оно будет к тому же и бесполезным, потому что любые изменения в массиве $types вступают в силу только в режиме администратора.

Эти обстоятельства, делают использование самого дескриптора в качестве конфигурационного и управляющего файла не очень удобным. Для этих целей лучше подойдет предобработчик дескриптора.

Правила написания предобработчиков дескрипторов

  • Предобработчики пишутся на языке PHP.

  • Файл скрипта должен иметь расширение .tddh и имя, совпадающее с именем шаблона.

  • Как и в самом дескрипторе, в обработчике дескриптора, доступен массив $blockInfo.

  • Данные, которые нужно передать в дескриптор, должны быть собраны в массиве $ddat. Под тем же именем массив будет доступен в дескрипторе.

  • В предобработчике дескриптора доступен массив $udat объявленный в предобработчике обновления данных (файл *.tuh).

С помощью массива $ddat в дескриптор можно передавать данные, и менять "на лету" любые переменные tdd-файла (кроме массива $types). Обычно в дескрипторе программно меняют массив $params.

Допустим, вы хотите, чтобы на страничке "Новости" выводились 10 новостей, а на главной странице, при использовании того же шаблона, только 3 новости. Коды файлов могут быть такими:

news.tddh
<?php
    $ddat['limit'] = ($_GET['page'] > 1) ? 10 : 3 ; // применен тернарный оператор
?>

news.tdd
<?php
    . . .
    $params['multi-record'] = true;
    $params['backward'] = true;
    $params['part']['limit'] = $ddat['limit'];
?>

Теперь любые изменения в файле .tddh, сразу отразятся на страничке без предварительного посещения ее в режиме администратора.

Кроме изменения переменных, можно выполнять любые сложные скрипты до извлечения данных из базы данных. Например, из дескриптора можно напрямую управлять запросами к блокам с помощью класса Request.

Внимание! Следите за тем, чтобы код в файле .tddh начинался с символов <?php, а не с пробелов или пустых строк. Аналогично, после закрывающего тега ?> также не должно быть никаких символов. Требования такие же, как для tdd-файлов (дескрипторов)

См. также