Для того, чтобы изменить значение какого то поля в профиле пользователя достаточно загрузить профиль пользователя, привести этот профиль к массиву, а потом с помощью field_set_value установить нужное поле, и, наконец сохранить внесенные изменения.

// Загружем профиль текущего пользователя в переменную $account 
$account = user_uid_optional_load();
 
// Делаем приведение к массиву
$edited_account = (array)$account;
 
// Устанавливаем значение нужного нам поля
field_set_value($edited_account['field_your_field_name'], 'Your field value');
 
// Сохраняем измения
user_save($account, $edited_account);

Если Вам нужно изменить профиль не текущего пользователя, а любого другого пользователя, то вместо user_uid_optional_load() используем user_uid_optional_load($uid), где $uid - это id нужного пользователя.

Комментарии

ИМХО, а почему не сделать более приятно? {code} $user_wrapper = entity_metadata_wrapper('user', entity_load_single('user', $uid)); // а дальше уж $user_wrapper->field_custom_field = $custom_value; $user_wrapper->save(); {code} И более того, если поля сложные и со ссылками на другие сущьшости {code} $user_wrapper->field_refference_field->field_inside_reference = $value; $user_wrapper->field_refference_field->save(); {code}

Каждое мнение имеет право на жизнь. Но почему так более приятно? Ну или какие преимущества?

Преимущество например в том, что если поле профиля это Collection Item, то ваш метод не работает. А через wrapper можно редактировать и дочерние сущности не особо углубляясь в то как их загружать и сохранять.

Первым на ум приходят модули с drupal.org, но я расскажу как это делается самостоятельно, написав небольшой модуль.

К чему это?

Подскажите пожалуйста, возможно ли программно изменить содержимое блока? Если да, то с помощью чего?

можете посмотреть здесь: https://api.drupal.org/api/drupal/modules!block!block.api.php/function/hook_block_view_alter/7

Первым на ум приходят модули с drupal.org, но я расскажу как это делается самостоятельно, написав небольшой модуль.

Добавить комментарий