Как правильно указать source для machine name
Опубликовано пт, 07/08/2015 - 10:21
Что такое machine name в курсе, я думаю, многие. Его мы можем встретить, например, при создании нового словаря таксономии.
Form API предоставляет нам специальный тип machine_name. Все хорошо, если вы используете первый уровень иерархии, т.е. есть такая структура
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$form['text'] = array( '#type' => 'textfield', '#title' => t('Text'), '#description' => t('Human-readable name.'), '#default_value' => '', '#required' => TRUE, '#maxlength' => 64, ); $form['machine_name'] = array( '#type' => 'machine_name', '#title' => t('Name'), '#title_display' => 'invisible', '#size' => 15, '#description' => t('A unique machine-readable name containing letters, numbers, and underscores.'), '#maxlength' => 26, '#machine_name' => array( 'source' => array('text'), 'exists' => '_MY_CALLBACK_FOR_CHECKING_MACHINE_NAME', 'standalone' => TRUE, 'label' => '', ), ); |
Но если структура древовидная (вложенная), то возникает вопрос как правильно указать имя источника (текстового поля) для элемента machine_name. Например,
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$form['profile'] = array( '#type' => 'fieldset', '#title' => t('Settings'), ); $form['profile']['text'] = array( '#type' => 'textfield', '#title' => t('Text'), '#description' => t('Human-readable name.'), '#default_value' => '', '#required' => TRUE, '#maxlength' => 64, ); |
В приведенном примере выше родительским элементом является fieldset с ключом 'profile', а элемент к которому прицеплено machine_name - текстовое поле с ключом 'text'. Поэтому мы указываем массив, состоящий из ключей элементов в той последовательности, в которой они находятся в иерархической структуре.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$form['profile']['machine_name'] = array( '#type' => 'machine_name', '#title' => t('Name'), '#title_display' => 'invisible', '#size' => 15, '#description' => t('A unique machine-readable name containing letters, numbers, and underscores.'), '#maxlength' => 26, '#machine_name' => array( 'source' => array('profile', 'text'), 'exists' => '_MY_CALLBACK_FOR_CHECKING_MACHINE_NAME', 'standalone' => TRUE, 'label' => '', ), ); |
Ниже приведено изображение вышеописанной формы.
Дополнительная информация по статье
- Form API machine_name- описание machine_name на официальном сайте.