$defaults — значения по умолчанию

Иногда бывает необходимо, чтобы при создании новой записи, какое-то поле приобретало определенное значение по умолчанию.

Значение по умолчанию – через тип данного

Помня о том, что тип данного, объявленного в дескрипторе, есть ничто иное, как тип столбца таблицы 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';
Это уменьшит объем памяти, занимаемый числом сразу в два раза.

Значение по умолчанию – через массив $defaults

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

$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-параметр &defaults

Чтобы передать значение по умолчанию через URL, необходимо взять стандартную ссылку (кнопку) редактирования новой записи "?edit&block=99&rec=new", и к ее URL прибавить параметр-массив &defaults с номерами полей в ключах.

Если новая запись относится к текущему блоку, то в качестве базового URL лучше взять переменную шаблона $edit, так как в URL могут быть и другие параметры.

Пример

<a href="<?=$edit['new-rec']['href']?>&defaults[9]=5&defaults[3]=0">Создать новую запись</a>

См. также