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


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);
  }
}

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 вы можете добавлять поля пользователям.


2
Спасибо, но я могу сделать это, используя форму API? Мне нужно больше функциональности.
— Алексей

что вы хотите сделать, что невозможно с полями?
— Аттикс

Я уже создал свои собственные поля в таблице Drupal users. «Поля» создают новые поля вне таблицы users.
— Алексей

Вот как работает Drupal, почему вы хотите хранить поля внутри таблицы пользователей?
— Аттикс

Это более удобный способ сделать это, по моему мнению. Кстати, чтобы добавить дополнительные поля, я используюhook_form_alter(&$form, &$form_state, $form_id)
— Алексей


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 .
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.