Alan Grubuna Programlı Alan Ekleme


15

"Field Group" modülünü kullandım ve arka uçta bazı gruplar oluşturdum. Şimdi programlı olarak gruba bir alan eklemek istiyorum. Bunu nasıl yapabilirim.

Hook_form_alter kullanıyorum, her alanın ait olduğu alan grubunun listelendiği bir 'und'ribribute'a sahip olduğunu fark ettim, ancak bir create ve' und 'dizisi ve buna bir alan grubu adı eklerseniz, çalışmaz .

Bunu nasıl yapmalıyım?


1
Field_group API'sını kullanabilirsiniz. Checkout hook_field_group_build_pre_render_alter () ( drupal.org/node/1017962 )
codeinthehole

Yanıtlar:


20

Bu biraz eski, ama aynı şeyi yapmak istedim ve web'de bir cevap bulamadım. Sonunda kendim anladım.

Diyelim ki CMS arayüzü üzerinden "group_product_fields" adıyla bir alan grubu oluşturdunuz. Bu gruba bazı alanlar eklediniz.

Artık formda hook_form_alter aracılığıyla programa dahil edilen yeni bir alanınız var. Bu alanı "group_product_fields" alanına eklemek istiyorsunuz. Alanın ne olabileceğine bir örnek:

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

Şimdi tek yapmanız gereken bu yeni alanı alan grubuna eklemek. Bunu yapmak için aşağıdaki satırı hook_form_alter öğesine ekleyin. İçinde herhangi bir yere yerleştirilebilir.

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

Bu kadar. Alan ağırlığını istediğiniz gibi konumlandırmak için ayarlamak isteyebilirsiniz. Ama sonunda bu gerçekten basit. :)


Bu kabul edilen cevap olmalı, IMO.
m.stenta

6

Bir alan grubuna programlı olarak alan ekledikten sonra alıntı :

$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
Formu değiştirmek istiyorum!
SA Malik

3
O zaman neden Field Group modülünü kullanmak istediğinizi anlamıyorum? Sadece bir alan kümesi tanımlayın ve alanlarınızı oraya taşıyın. Örneğin: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj

Biz kullanabilir 'mode' => 'form'veya 'mode' => 'default'yerine 'mode' => 'full'ya da sadece ihmal modehiç. Herhangi bir view_mode_name, teşekkürler @Maiq Fash
graceman9

Bu, OP'nin istediği şeyi değil, form tanımlarını değil alan tanımlarını yeniden tanımlamanın bir yolunu sunar.
aaronbauman

1

Sizin için nasıl çalıştığından emin değilim. Çünkü dizi anahtarı adı, veritabanı alanı adıyla eşleşmelidir. Ve onlar:

| varlık_türü | varchar (32)
| demet | varchar (128)

| modu | varchar (128)

Çalıştırmak için aşağıdaki biçimi kullanmalıyım. aptalca bir şey yapıyorsam bana haber ver.

$groups = field_group_read_groups(array(
  'entity_type' => 'node',
  'bundle' => 'bundle type',
  'mode' => 'view_mode_name'));

1

Hook_field_group_build_pre_render_alter () 'a bakınız.

Bu, gruplarınızın yapısını programlı olarak değiştirme fırsatı sunar.

Örneğin, alan "example_field" hareket halinde kök formu elemanından grubu "group_example":

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

İlk olarak, CMS panelinde alan grubu makine adınızı bulun, ardından formunuzda değiştirin

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

bir instanst için, User form field groupalan grubuna özel bir alan postası ekledim :

$form['#group_children']['mail'] = 'group_user_form_field_group';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.