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

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

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

  • Предобработчики пишутся на языке 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.

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


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


См. также