Предобработчики обновления данных применяются, если необходимо произвести обработку редактируемых данных перед их сохранением в базе данных. Это касается как данных, введенных штатно (через окно редактирования), так и данных отправленных с публичных форм.
Предобработчики пишутся на языке PHP.
Файл скрипта должен иметь расширение .tuh (template data update handler) и имя, совпадающее с именем шаблона.
Номер редактируемого блока можно узнать через: $_GET['block']
Номер редактируемой записи можно узнать через: $_GET['rec']
Данные формы: $_POST['dat'] или $_POST['data'] при сохранении в многозаписном режиме. Именно данные этих массивов обычно подвергаются изменениям, и передаются далее в систему.
Если среди редактируемых данных есть данные типа file, то есть, закачивается файл, то передается еще и массив $_FILES['dat'].
Экстраданные
При сохранении экстраданных, передается такой же массив $_POST['dat'], как и при обновлении обычных данных.
Разница только в том, что дополнительно передается url-параметр "&xprefix=x". В файле *.tuh разные режимы сохранения можно различать так:
if ($_GET['xprefix'] == 'x') {
// Обработать экстраданные
} else {
// Обработать основные данные
}
Данные секретных полей
Если поле было секретным, то оно будет отсутствовать в окне редактирования даже в скрытом виде, значит данное этого поля будет отсутствовать и в массиве $_POST['dat'].
Если вам нужны секретные данные, то их придется извлекать специально. Все "старые" данные извлечь можно так:
$dat2 = Dat::get(
[
'src-block-id' => $_GET['block'],
'tpl' => 'текущийШаблон'
],
['rec' => $_GET['rec']]
);
Многозаписное редактирование
При сохранении данных, поступающих из окна редактирования в многозаписном режиме, вместо массивов $_POST['dat'] и $_FILES['dat'] поступают массивы $_POST['data'] и $_FILES['data']:
if (!$_GET['xprefix']) {
if ($_POST['dat']) {
// Однозаписный режим
} elseif ($_POST['data']) {
// Многозаписный режим
}
}
Если после выполнения предобработчика, на шаблон необходимо передать дополнительные данные, то они должны быть собраны в массиве $udat (update data).
Чтобы отменить сохранение переданных данных, в предобработчик нужно внести код, показанный ниже.
$udat['unsave'] = true;
Переданные данные доступны через массив с таким же именем $udat во всех php-файлах шаблона: tpl, tplh, tdd, tddh.