пользовательская вставка крючка получает значения формы?


Я определил поле myField через поля администратора/настройки/управления. Затем я реализовал hook_user_insert, потому что я хочу что-то сделать с этим полем после регистрации пользователя. Как я могу получить доступ к значению myField? Я пытался использовать $edit['field_myField'], но я получаю массив.

Любая помощь будет признательна.

Author: ivan.freire, 2012-07-25

3 answers

Мой вам совет - установите модуль devel, а затем запустите этот код:

function MY_MODULE_user_insert(&$edit, $account, $category) {
  dsm($edit);
  dsm($account);
}

Создайте нового пользователя, и вы увидите вывод со структурой переменных $edit и $account - это невероятно поможет вам узнать структуру данных.

 2
Author: Eugene Fidelin, 2012-07-26 13:47:59

Данные полей хранятся в массивах.

Вот пример информации об учетной записи пользователя, которую я сохраняю из информации, полученной в другом месте:

 $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));
}
 2
Author: tenken, 2012-07-26 02:57:01

Вам нужно использовать что-то вроде:

$edit['field_myField'][$edit['language']][0]['value']

Но вам действительно следует использовать dsm($edit); таким образом, вы правильно получите структуру массива

 1
Author: Colin Shipton, 2013-07-18 15:53:35