Иногда бывает необходимо, чтобы при создании новой записи, какое-то поле приобретало определенное значение по умолчанию.
Помня о том, что тип данного, объявленного в дескрипторе, есть ничто иное, как тип столбца таблицы MySQL, значения по умолчанию можно задать следующим образом:
.tdd
$types[1] = 'int(6) default 0';
$types[2] = "varchar(100) default ''";
Кроме задания значения по умолчанию, рекомендуем оптимизировать столбцы базы данных. Во-первых, постарайтесь везде, где нет необходимости в значении NULL, прописать это явно:
$types[2] = "varchar(100) not null default ''";
Во-вторых, если в числовых данных не используются отрицательные величины, то пишите:
$types[1] = 'int(6) unsigned not null default 0';
Это уменьшит объем памяти, занимаемый числом сразу в два раза.
$types[3] = "date default '2009-12-31'";
Но задать таким же образом текущую дату вы уже не сможете. Более универсальным способом задания значения по умолчанию, в том числе переменного, является применение массива $defaults. С помощью массива $defaults текущую дату можно поставить так:
$types[3] = 'date';
$defaults[3] = date('Y-m-d');
А самый первый пример этой статьи можно переписать так:
.tdd
$types[1] = 'int(6)';
$types[2] = 'varchar(100)';
$defaults[1] = 0;
$defaults[2] = '';
Значения по умолчанию вы можете получать путем вычислений и любыми другими доступными в PHP способами. Чаще всего используются методы Blox::info() и Request::get(), так как обычные переменные шаблона в дескрипторе не доступны. В следующем примере в поле 4 будет записываться идентификатор пользователя, создавшего запись:
.tdd
$types[4] = 'int(6) unsigned not null default 0';
$defaults[4] = Blox::info('user','id');
Для сохранения в каком-либо поле идентификатора пользователя существует специальный параметр дескриптора: $params['user-id-field']
Чтобы передать значение по умолчанию через URL, необходимо взять стандартную ссылку (кнопку) редактирования новой записи "?edit&block=99&rec=new"
, и к ее URL прибавить параметр-массив &defaults с номерами полей в ключах.
Если новая запись относится к текущему блоку, то в качестве базового URL лучше взять переменную шаблона $edit, так как в URL могут быть и другие параметры.
Пример
<a href="<?=$edit['new-rec']['href']?>&defaults[9]=5&defaults[3]=0">Создать новую запись</a>