Вы здесь

Как программно заполнить поле с неограниченным количеством значений?

0

Добрый день, у меня программно создаётся/обновляется пользователь на сайте, и по ходу создания заполняются дополнительные поля. Когда поле имеет одно значение всё достаточно просто

      Create user
      'field_user_title_subdepartment' => array(LANGUAGE_NONE => array(array('value' => $data->title_subdepartment))),
      'field_user_phone' => array(LANGUAGE_NONE => array(array('value' => $data->phone))),
      'field_user_hash' => array(LANGUAGE_NONE => array(array('value' => $data->hash))),

      Update user
      $user_fields->field_user_title_subdepartment['und'][0]['value'] = $data->title_subdepartment;
      $user_fields->field_user_phone['und'][0]['value'] = $data->phone;
      $user_fields->field_user_hash['und'][0]['value'] = $data->hash;      

А теперь стала задача программно заполнить поле Роли (текстовое поле с неограниченным количеством значений)
Причём у меня задача состоит из двух подзадач, данные которые приходят для заполнения представляют собой большую строку, где значение разделяются символом | , т.е. например на входе:

Администратор|Модератор|Эксперт

Мне нужно его разбить как бы в перечень значений, и занести их при создании или изменении пользователя (в случае изменения, нужно старые значения все удалить и просто вставить новые)

Строку на входе получается я explode-ю, а дальше как то циклом нужно поместить в поле

$input_roles = 'Администратор|Модератор|Эксперт';
$array_roles = explode('|', $input_roles);
foreach ($array_roles as $role)
{
 ...
}
Версия Drupal: 
7.x
Категория: 
Field API
Вопрос задан 03.09.2019 - 14:56

Ответы

0

Пример кода:

// id пользователя, которому назначаются роли.
$uid = 3;

$role_names = array(
  'Администратор',
  'Модератор',
  'Эксперт',
);

foreach ($role_names as $role_name) {
  $role = user_role_load_by_name($role_name);
  if ($role) {
    user_multiple_role_edit(array($uid), 'add_role', $role->rid);
  }
}
Ответ дан 26.11.2019 - 18:38