Comment ajouter des champs supplémentaires au profil utilisateur?

22

Je voudrais ajouter des champs supplémentaires au profil utilisateur. J'aimerais que l'utilisateur puisse modifier presque toutes les informations que je stocke dans la base de données à son sujet. J'ai quelques idées: il est peut-être possible de faire en utilisant le formulaire api.

Alexey
la source
blog de détail est ici: goo.gl/zxBTBY
Suresh Kamrushi

Réponses:

23

Un moyen d'ajouter des champs utilisateur par code afin que vous puissiez les mettre dans votre module.

J'ai trouvé ceci: field_create_field avec dans les commentaires un moyen de créer un champ pour votre utilisateur lors de l'activation de votre module:

/**
 * 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);
  }
}
MOUCHE
la source
1
J'ai trouvé cette page très utile qui explique comment exporter des champs créés avec l'interface utilisateur. Cette exportation peut ensuite être utilisée avec field_create_field et field_create_instance pour tout faire par programmation
Whisky
Merci, c'était très utile - avez-vous une idée de la façon d'attribuer automatiquement le poids également?
inertialmedia
vous pouvez ajouter 'weight' => '1',au tableau de widgets dans le $instanceje vais l'ajouter dans ma réponse.
FLY
Pour les cas complexes, il est utile d'ajouter d' abord le champ manuellement /admin/config/people/accounts/fields, puis utilisez l' inspecteur champs sur /admin/config/development/field-inspectorpour exporter les tableaux de définition d'exemple sur le terrain et sur le terrain pour une utilisation dans le code comme ci - dessus.
tanius
Pour garder la base de données propre, vous pouvez également implémenter un hook_uninstall pour supprimer le champ. function MYMODULE_uninstall() {field_delete_field('field_myField');}
dxvargas
35

J'ai trouvé la page difficile à trouver, mais dans / admin / config / people / accounts / fields, vous pouvez ajouter des champs aux utilisateurs.

Attiks
la source
2
Merci, mais puis-je le faire en utilisant le formulaire api? J'ai besoin de plus de fonctionnalités.
Alexey
qu'est-ce que tu veux faire, ce n'est pas possible avec les champs?
Attiks
J'ai déjà créé mes propres champs dans la table Drupal users. Les "champs" créent de nouveaux champs en dehors de la table users.
Alexey
c'est comme ça que drupal fonctionne, pourquoi voulez-vous stocker les champs dans la table des utilisateurs?
Attiks
C'est une façon plus pratique de le faire à mon avis. Soit dit en passant, afin d'ajouter des champs supplémentaires que j'utilisehook_form_alter(&$form, &$form_state, $form_id)
Alexey
5

Le profil en D7 est un peu bizarre. Le module profile2 peut faire ce dont vous avez besoin.

Jeremy French
la source
4

Dans Drupal 7, utilisez ce processus pour ajouter un champ nouveau ou existant avec différents types de champs (tels que Image, champ Tags, etc.) au profil utilisateur:

  1. Activez le module Field UI .
  2. Allez dans " Admin → Configuration → Personnes: Paramètres du compte " dans le menu administrateur, puis dans " Gérer les champs " (le deuxième onglet).

    (Alternativement, utilisez le chemin direct dans l'URL:) /admin/config/people/accounts/fields.

  3. Remplissez la ligne "Ajouter un nouveau champ" ou "Ajouter un champ existant" au bas du formulaire et cliquez sur "Enregistrer".
Chanuka Asanka
la source
1

Quel type de champs souhaitez-vous ajouter?

  • S'il s'agit d'un site de réseautage social et que vous ajoutez des champs de paramètres de confidentialité, utilisez le module Confidentialité par utilisateur .
  • Si vous souhaitez ajouter des onglets ou des champs d'accordéon, utilisez le module field_group pour ajouter de nouveaux groupes sur les champs du compte utilisateur (URL: / admin / config / people / accounts / fields).
  • Et si vous voulez différents champs pour différents rôles, utilisez le module profile2 .
Druvision
la source