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?


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. :)


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

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

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

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';
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.