пользовательская вставка крючка получает значения формы?
Я определил поле myField
через поля администратора/настройки/управления. Затем я реализовал hook_user_insert, потому что я хочу что-то сделать с этим полем после регистрации пользователя. Как я могу получить доступ к значению myField
? Я пытался использовать $edit['field_myField']
, но я получаю массив.
Любая помощь будет признательна.
3 answers
Мой вам совет - установите модуль devel, а затем запустите этот код:
function MY_MODULE_user_insert(&$edit, $account, $category) {
dsm($edit);
dsm($account);
}
Создайте нового пользователя, и вы увидите вывод со структурой переменных $edit и $account - это невероятно поможет вам узнать структуру данных.
Данные полей хранятся в массивах.
Вот пример информации об учетной записи пользователя, которую я сохраняю из информации, полученной в другом месте:
$roles = user_roles();
$userinfo = array(
'name' => $name,
'pass' => user_password(),
'init' => $name,
'status' => 1,
'access' => REQUEST_TIME,
'roles' => array(array_search('student', $roles) => 1),
'field_first_name' => array(LANGUAGE_NONE => array( 0 => array('value' => $ldap_details['first_name']))),
'field_last_name' => array(LANGUAGE_NONE => array( 0 => array('value' => $ldap_details['last_name']))),
'field_secret_number' => array(LANGUAGE_NONE => array( 0 => array('value' => $ldap_details['secret_number']))),
'mail' => $ldap_details['mail'],
);
Таким образом, как вы можете видеть, данные поля хранятся в виде:
array(LANGUAGE_KEY => array(INDEX => array('value' => 'SOMETHING HERE')));
Вы просто получаете доступ/устанавливаете его, как и любой массив PHP.
Вы можете застрять, если обнаружите, что ваши поля отсутствуют в записи пользователя - прикрепленные поля загружаются неохотно. вам нужно вызвать функцию, чтобы убедиться, что они прикреплены к сущности пользователя:
// For speed, typically Drupal does not attach additional fields to $user
// objects, if they are not found we request attached fields now.
if (!isset($account->field_first_name ) || !isset($account->field_last_name)) {
field_attach_load('user', array($account->uid => $account));
}
Вам нужно использовать что-то вроде:
$edit['field_myField'][$edit['language']][0]['value']
Но вам действительно следует использовать dsm($edit); таким образом, вы правильно получите структуру массива