Файл ∗.tuh (предобработчик обновления данных)

Предобработчики обновления данных применяются, если необходимо произвести обработку редактируемых данных перед их сохранением в базе данных. Это касается как данных, введенных штатно (через окно редактирования), так и данных отправленных с публичных форм.

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

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

  • Файл скрипта должен иметь расширение .tuh (template data update handler) и имя, совпадающее с именем шаблона.

  • Номер редактируемого блока можно узнать через: $_GET['block']

  • Номер редактируемой записи можно узнать через: $_GET['rec']

  • Данные формы: $_POST['dat']. Именно данные этого массива, обычно и подвергаются изменениям, и передаются дальше в систему.

    Если среди редактируемых данных есть данные типа file, то есть, закачивается файл, то передается еще и массив $_FILES['dat'].

    Экстраданные
    При сохранении экстраданных, передается такой же массив $_POST['dat'], как и при обновлении обычных данных. Разница только в том, что дополнительно передается url-параметр "&prefix=x". В файле .tuh разные режимы сохранения можно различать так:

    if ($_GET['prefix'] == 'x') {
    // Обработать экстраданные
    } else {
    // Обработать основные данные
    }

    Данные скрытых полей
    Если поле было скрыто в окне редактирования, до данное этого поля будет отсутствовать в массиве $_POST['dat']. В этом случае старые данные придется извлекать специально:

    $dat2 = Dat::get(
    [
    'srcBlockId' => $_GET['block'], 
    'tpl' => 'текущийШаблон'
    ], 
    ['rec' => $_GET['rec']]
    );

    Многозаписное редактирование
    При сохранении данных, поступающих из окна редактирования в многозаписном режиме, вместо массивов $_POST['dat'] и $_FILES['dat'] поступают массивы $_POST['data'] и $_FILES['data']:

    if ($_POST['dat']) {
        // Однозаписный режим
    } elseif ($_POST['data']) {
        // Многозаписный режим
    }
    
  • Если после выполнения предобработчика, на шаблон необходимо передать дополнительные данные, то они должны быть собраны в массиве $udat (update data).

  • Чтобы отменить сохранение переданных данных, в предобработчик нужно внести код, показанный ниже.

    $udat['unsave'] = true;
    Без этого кода все записи, в том числе ошибочные, будут вноситься в базу данных.
  • Переданные данные доступны через массив с таким же именем $udat во всех php-файлах шаблона: tpl, tplh, tdd, tddh.

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


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


См. также