फ़ील्ड फ़ील्ड में प्रोग्राम के अनुसार फ़ील्ड जोड़ें


15

मैंने "फ़ील्ड समूह" मॉड्यूल का उपयोग किया है और बैकेंड में कुछ समूह बनाए हैं। अब मैं प्रोग्राम के लिए एक फील्ड को ग्रुप में जोड़ना चाहता हूं। मैं उसे कैसे कर सकता हूँ।

मैं Hook_form_alter का उपयोग कर रहा हूं, मैंने देखा है कि प्रत्येक फ़ील्ड में एक 'und'attribute है जिसमें फ़ील्ड समूह वह है जो सूचीबद्ध है, लेकिन यदि कोई' und 'सरणी बनाता है और फ़ील्ड समूह का नाम इसमें जोड़ा जाता है, तो यह काम नहीं करता है ।

मैं इसे कैसे करूं?


1
आप field_group API का उपयोग कर सकते हैं। चेकआउट हुक_फ़ील्ड_ग्रुप_बिल्डर_पर_रेंडर () ( drupal.org/node/1017962 )
कोडिनथेले

जवाबों:


20

यह थोड़ा पुराना है, लेकिन मैं एक ही काम करना चाहता था और वेब पर इसका जवाब नहीं पा सकता था। मैं इसे अपने आप से बाहर लगा रहा।

मान लीजिए कि आपने "Group_product_fields" नाम के साथ CMS इंटरफ़ेस के माध्यम से एक फ़ील्ड समूह बनाया है। आपने उस समूह में कुछ फ़ील्ड जोड़े हैं।

अब आपके पास प्रोग्राम के रूप में हुक_फॉर्म_ल्टर के माध्यम से एक नया फ़ील्ड शामिल किया जा रहा है। आप उस फ़ील्ड को "group_product_fields" में जोड़ना चाहते हैं। यहाँ एक उदाहरण है कि क्षेत्र क्या हो सकता है:

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

अब आपको केवल उस नए फ़ील्ड को फ़ील्ड समूह में जोड़ने की आवश्यकता है। ऐसा करने के लिए, हुक_फॉर्म_लटर के नीचे की रेखा जोड़ें। इसे अपने अंदर कहीं भी रखा जा सकता है।

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

बस इतना ही। आप अपनी इच्छानुसार फील्ड वेट को समायोजित कर सकते हैं। लेकिन अंत में यह वास्तव में सरल है। :)


यह स्वीकृत उत्तर होना चाहिए, आईएमओ।
मंटा

6

प्रोग्राम के बाद फ़ील्ड को फ़ील्ड समूह में जोड़ने का उद्धरण :

$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
मैं रूप बदलना चाहता हूँ!
एसए मलिक

3
फिर मैं यह नहीं देखता कि आप फील्ड ग्रुप मॉड्यूल का उपयोग क्यों करना चाहते हैं? बस एक फ़ील्डसेट परिभाषित करें और अपने खेतों को वहां स्थानांतरित करें। उदाहरण के लिए: drupal.stackexchange.com/questions/4049/…
Maciej Zgadzaj

हम इसका उपयोग कर सकते हैं 'mode' => 'form'या 'mode' => 'default'इसके बजाय 'mode' => 'full', या बिल्कुल भी छोड़ modeसकते हैं। कोई भी दृश्य_मासिक_नाम, धन्यवाद @ माईक फेश
ग्रेसमैन

यह फ़ील्ड परिभाषाओं को फिर से परिभाषित करने का एक तरीका प्रदान करता है, एक form_alter करने के लिए नहीं - न कि ओपी क्या पूछ रहा है।
अनारोनबूमन

1

निश्चित नहीं है कि यह आपके लिए कैसे काम करता है। क्योंकि सरणी कुंजी नाम डेटाबेस फ़ील्ड नाम के साथ मेल खाना चाहिए। और वो हैं:

| Unit_type | varchar (32)
| बंडल | varchar (128)

| मोड | varchar (128)

मुझे इसे काम करने के लिए निम्न प्रारूप का उपयोग करना होगा। मुझे पता है अगर मैं यहाँ मूर्खतापूर्ण कुछ कर रहा हूँ।

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

1

Hook_field_group_build_pre_render_alter () पर एक नज़र डालें।

यह आपको अपने समूहों की संरचना को प्रोग्रामेटिक रूप से बदलने का अवसर प्रदान करता है।

उदाहरण के लिए, फ़ील्ड "example_field" को समूह "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

सबसे पहले, अपने फ़ील्ड समूह मशीन का नाम CMS पैनल में खोजें, फिर अपने फॉर्म में बदलाव करें

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

एक instanst के लिए, मैंने User form field groupफ़ील्ड समूह में एक कस्टम फ़ील्ड मेल जोड़ा है :

$form['#group_children']['mail'] = 'group_user_form_field_group';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.