Ajouter des champs au groupe de champs par programme

15

J'ai utilisé le module "Field Group" et créé des groupes en backend. Maintenant, je veux ajouter par programme un champ au groupe. Comment puis je faire ça.

J'utilise Hook_form_alter, j'ai remarqué que chaque champ a un attribut «und» dans lequel le groupe de champs auquel il appartient est répertorié, mais si un tableau create et «und» et lui ajoute un nom de groupe de champs, cela ne fonctionne pas .

Comment dois-je procéder?

SA Malik
la source
1
Vous pouvez utiliser l'API field_group. Checkout hook_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
code dans

Réponses:

20

C'est un peu vieux, mais je voulais faire la même chose et je n'ai pas trouvé de réponse sur le web. J'ai fini par le découvrir par moi-même.

Supposons que vous ayez créé un groupe de champs via l'interface CMS avec le nom "group_product_fields". Vous avez ajouté des champs à ce groupe.

Vous avez maintenant un nouveau champ inclus dans le formulaire par programmation via hook_form_alter. Vous souhaitez ajouter ce champ à "group_product_fields". Voici un exemple de ce que pourrait être le champ:

$form['new_product_field'] = array(
  '#type' => 'textfield',
  '#title' => t('New product field'),
  '#description' => t('Description for this new product field'),
);

Il ne vous reste plus qu'à ajouter ce nouveau champ au groupe de champs. Pour ce faire, ajoutez la ligne ci-dessous à hook_form_alter. Il peut être placé n'importe où à l'intérieur.

$form['#group_children']['new_product_field'] = 'group_product_fields';

C'est tout. Vous souhaiterez peut-être ajuster le poids du champ pour qu'il soit positionné comme vous le souhaitez. Mais au final, c'est vraiment simple. :)

Rafael Alencar
la source
Cela devrait être la réponse acceptée, OMI.
m.stenta
6

Citation après l' ajout par programme de champs à un groupe de champs :

$groups = field_group_read_groups(array(
  'entity_type' => 'node',
  'bundle'      => 'article',
  'mode'   => 'full'
));
$your_group = $groups['node']['article']['form']['group_your_group'];
$your_group->children[] = 'field_your_new_field';
field_group_group_save($your_group);
Maciej Zgadzaj
la source
3
Je veux modifier le formulaire!
SA Malik
3
Ensuite, je ne vois pas pourquoi vous souhaitez utiliser le module de groupe de champs? Définissez simplement un ou plusieurs jeux de champs et déplacez-y vos champs. Par exemple: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj
Nous pouvons utiliser 'mode' => 'form'ou 'mode' => 'default'au lieu de 'mode' => 'full', ou tout simplement omettre modedu tout. Any view_mode_name, thanks @Maiq Fash
graceman9
Cela fournit un moyen de redéfinir les définitions de champ, de ne pas faire un form_alter - pas ce que l'OP demande.
aaronbauman
1

Je ne sais pas comment cela a fonctionné pour vous. Parce que le nom de clé du tableau doit correspondre au nom du champ de la base de données. Et ils sont:

| type_entité | varchar (32)
| bundle | varchar (128)

| mode | varchar (128)

Je dois utiliser le format suivant pour le faire fonctionner. faites-moi savoir si je fais quelque chose de stupide ici.

$groups = field_group_read_groups(array(
  'entity_type' => 'node',
  'bundle' => 'bundle type',
  'mode' => 'view_mode_name'));
Tariq G
la source
1

Jetez un œil à hook_field_group_build_pre_render_alter ().

Cela vous offre la possibilité de modifier la structure de vos groupes par programme.

Par exemple, déplacez le champ "example_field" dans le groupe "group_example" de l'élément de formulaire racine:

function EXAMPLE_forms_field_group_build_pre_render_alter(&$form) {
  if (example_condition()) {
    $form['group_example'] = $form['group_example']['example_field'];
    unset($form['example_field']);
    // Further adjustments as necessary
  }
}
code dans le trou
la source
0

Tout d'abord, trouvez le nom de votre machine de groupe de champs dans le panneau CMS puis dans votre formulaire alter do

$form['#group_children']['FIELD_MACHINE_NAME'] = 'GROUP_MACHINE_NAME';

pour un instant, j'ai ajouté un mail de terrain personnalisé dans le User form field groupgroupe de champs:

$form['#group_children']['mail'] = 'group_user_form_field_group';
Yusef
la source