Thêm trường vào nhóm trường theo chương trình


15

Tôi đã sử dụng mô-đun "Nhóm trường" và tạo một số nhóm trong phụ trợ. Bây giờ tôi muốn lập trình thêm một lĩnh vực vào nhóm. Làm thế nào tôi có thể làm điều đó.

Tôi đang sử dụng Hook_form_alter, tôi nhận thấy rằng mọi trường đều có 'không thuộc tính trong đó nhóm trường thuộc về nó được liệt kê, nhưng nếu một mảng tạo và' und 'và thêm tên nhóm trường vào nó, nó không hoạt động .

Tôi nên làm thế nào?


1
Bạn có thể sử dụng API trường_group. Thanh toán hook_field_group_build_pre numnder_alter () ( drupal.org/node/1017962 )
codeinthehole

Câu trả lời:


19

Điều này hơi cũ, nhưng tôi muốn làm điều tương tự và không thể tìm thấy câu trả lời trên web. Tôi đã kết thúc việc tìm ra nó một mình.

Giả sử bạn đã tạo một nhóm trường thông qua giao diện CMS với tên "group_product_fields". Bạn đã thêm một số lĩnh vực vào nhóm đó.

Bây giờ bạn có một trường mới được đưa vào biểu mẫu theo chương trình thông qua hook_form_alter. Bạn muốn thêm trường đó vào "group_product_fields". Dưới đây là một ví dụ về trường có thể là gì:

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

Tất cả những gì bạn cần làm bây giờ là thêm trường mới đó vào nhóm trường. Để làm điều đó, thêm dòng dưới đây vào hook_form_alter. Nó có thể được đặt bất cứ nơi nào bên trong nó.

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

Đó là tất cả. Bạn có thể muốn điều chỉnh trọng lượng trường cho nó được định vị theo ý muốn. Nhưng cuối cùng điều này thực sự đơn giản. :)


Đây phải là câu trả lời được chấp nhận, IMO.
m.stenta

6

Trích dẫn sau khi lập trình thêm các trường vào một nhóm trường :

$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
Tôi muốn thay đổi hình thức!
SA Malik

3
Sau đó, tôi không thấy lý do tại sao bạn muốn sử dụng mô-đun Field Group? Chỉ cần xác định một (các) trường và di chuyển các trường của bạn ở đó. Ví dụ: drupal.stackexchange.com/questions / 4049 / từ
Maciej Zgadzaj

Chúng ta có thể sử dụng 'mode' => 'form'hoặc 'mode' => 'default'thay vì 'mode' => 'full', hoặc chỉ bỏ qua modetất cả. Mọi lượt xem_mode_name, cảm ơn @Maiq Fash
graceman9

Điều này cung cấp một cách để xác định lại các định nghĩa trường, không thực hiện form_alter - không phải những gì OP đang yêu cầu.
aaronbauman

1

Không chắc làm thế nào nó làm việc cho bạn. Bởi vì tên khóa mảng phải khớp với tên trường cơ sở dữ liệu. Và họ là:

| thực thể | varar (32)
| bó | varar (128)

| chế độ | varar (128)

Tôi phải sử dụng định dạng sau để làm cho nó hoạt động. cho tôi biết nếu tôi đang làm điều gì đó ngớ ngẩn ở đây.

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

1

Hãy xem hook_field_group_build_pre numnder_alter ().

Điều này cung cấp cho bạn một cơ hội để thay đổi cấu trúc của các nhóm của bạn theo chương trình.

Ví dụ: di chuyển trường "example_field" vào nhóm "group_example" từ phần tử biểu mẫu gốc:

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

Đầu tiên, tìm tên máy nhóm trường của bạn trong bảng CMS sau đó trong biểu mẫu của bạn thay đổi

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

Đối với một instanst, tôi đã thêm một thư trường tùy chỉnh vào User form field groupnhóm trường:

$form['#group_children']['mail'] = 'group_user_form_field_group';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.