Как добавить дополнительные поля в профиль пользователя?

22

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

Алексей
источник
подробный блог здесь: goo.gl/zxBTBY
Суреш Камруши

Ответы:

23

Способ добавления пользовательских полей по коду, чтобы вы могли поместить это в свой модуль.

Я нашел это: field_create_field в комментариях способ создать поле для вашего пользователя при включении вашего модуля:

/**
 * Implementation of hook_enable().
 */
function MYMODULE_enable() {
  // Check if our field is not already created.
  if (!field_info_field('field_myField')) {
    $field = array(
        'field_name' => 'field_myField', 
        'type' => 'text', 
    );
    field_create_field($field);

    // Create the instance on the bundle.
    $instance = array(
        'field_name' => 'field_myField', 
        'entity_type' => 'user', 
        'label' => 'My Field Name', 
        'bundle' => 'user', 
        // If you don't set the "required" property then the field wont be required by default.
        'required' => TRUE,
        'settings' => array(
           // Here you inform either or not you want this field showing up on the registration form.
            'user_register_form' => 1,
        ),
        'widget' => array(
            'type' => 'textfield',
            'weight' => '1',
        ), 
    );
    field_create_instance($instance);
  }
}
FLY
источник
1
Я нашел эту очень полезную страницу, которая объясняет, как экспортировать поля, созданные с помощью пользовательского интерфейса. Этот экспорт может затем использоваться с field_create_field и field_create_instance, чтобы делать все программно
Виски
Спасибо, это было очень полезно - есть идея, как автоматически назначать вес?
Inertialmedia
Вы можете добавить 'weight' => '1',в массив виджетов в $instanceЯ добавлю его в моем ответе.
FLY
В сложных случаях, полезно сначала добавить поле вручную /admin/config/people/accounts/fields, а затем использовать полевой инспектор по /admin/config/development/field-inspectorэкспортировать массивы определения экземпляра поля и поля для использования в коде , как выше.
Танус
Чтобы сохранить БД в чистоте, вы также можете реализовать hook_uninstall для удаления поля. function MYMODULE_uninstall() {field_delete_field('field_myField');}
dxvargas
35

Мне было трудно найти страницу, но в / admin / config / people / account / fields вы можете добавлять поля пользователям.

Attiks
источник
2
Спасибо, но я могу сделать это, используя форму API? Мне нужно больше функциональности.
Алексей
что вы хотите сделать, что невозможно с полями?
Аттикс
Я уже создал свои собственные поля в таблице Drupal users. «Поля» создают новые поля вне таблицы users.
Алексей
Вот как работает Drupal, почему вы хотите хранить поля внутри таблицы пользователей?
Аттикс
Это более удобный способ сделать это, по моему мнению. Кстати, чтобы добавить дополнительные поля, я используюhook_form_alter(&$form, &$form_state, $form_id)
Алексей
5

Профиль в D7 немного странный. Модуль profile2 может делать то, что вам нужно.

Джереми Френч
источник
4

В Drupal 7 используйте этот процесс для добавления нового или существующего поля с различными типами полей (например, «Изображение», «Теги» и т. Д.) В профиль пользователя:

  1. Включите модуль Field UI .
  2. Перейдите в « Администрирование → Конфигурация → Люди: Настройки учетной записи » в меню администратора, а затем в « Управление полями » (вторая вкладка).

    (В качестве альтернативы используйте прямой путь в URL:) /admin/config/people/accounts/fields.

  3. Заполните строку «Добавить новое поле» или «Добавить существующее поле» внизу формы и нажмите «Сохранить».
Ханука Асанка
источник
1

Какие поля вы хотите добавить?

  • Если это сайт социальной сети, и вы добавляете поля настроек конфиденциальности, используйте модуль Privacy Per User .
  • Если вы хотите добавить вкладки или поля аккордеона, используйте модуль field_group для добавления новых групп в поля учетной записи пользователя (URL: / admin / config / people / account / fields).
  • А если вам нужны разные поля для разных ролей, используйте модуль profile2 .
Druvision
источник