मैं पैराग्राफ फ़ील्ड के भीतर मौजूद फ़ॉर्म फ़ील्ड के व्यवहार को कैसे बदलूँ?


18

Drupal 8 में पैराग्राफ मॉड्यूल का उपयोग करते हुए , मैं पैराग्राफ फ़ील्ड के भीतर निहित फॉर्म फ़ील्ड के व्यवहार को बदलने का प्रयास कर रहा हूं। यह इसलिए है कि मैं AJAX कॉलबैक जैसे व्यवहार जोड़ सकता हूं, राज्यों का उपयोग करके अन्य क्षेत्रों को छिपा सकता हूं आदि।

मैं इस फ़ंक्शन का उपयोग करके पैराग्राफ पैरेंट फ़ील्ड तक पहुँच सकता हूँ:

function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { 
}

लेकिन मैं पैराग्राफ के अंदर खेतों तक कैसे पहुंच सकता हूं?

मैंने कोशिश की hook_field_widget_form_alterलेकिन कोई फायदा नहीं हुआ।

मैं यह कैसे करु?

नोट: मैं अभी भी Drupal के विकास के लिए काफी नया हूँ।


अपने परिवर्तन में इसे आज़माएँ, kint($form);और इससे kint($form_id);आपको हुक आईडी परिवर्तन के लिए आईडी देना चाहिए और फिर आपको जो परिवर्तन करना चाहते हैं उसके लिए आपको सरणी पथ भी देना चाहिए।
डैनी इंग्लैंडर

जवाबों:


14

पैराग्राफ ^ 1.3 के बाद से आप हुक_फ़ील्ड_विजेट_WIDGET_TYPE_form_alter () का उपयोग कर सकते हैं (मैंने 8.2 संस्करण लिंक किया है क्योंकि हुक का उपयोग करने के बारे में एक अच्छी टिप्पणी है)।

आप निम्न उदाहरण में देख सकते हैं modules/contrib/paragraphs/tests/modules/paragraphs_test/paragraphs_test.module

/**  
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().  
 */  
function paragraphs_test_field_widget_entity_reference_paragraphs_form_alter(&$element, &$form_state, $context) {
  if ($element['#paragraph_type'] == 'altered_paragraph') {
    $element['subform']['field_text']['widget'][0]['#title'] = 'Altered title';
  }
}

6
ध्यान दें कि यदि आप "पैराग्राफ क्लासिक" के बजाय "पैराग्राफ एक्सपेरिमेंटल" विजेट का उपयोग कर रहे हैं, तो विजेट प्रकार केवल paragraphsइसके बजाय है entity_reference_paragraphs
डालिन

1
कुछ उपयोगी बातें (क्योंकि इन हुक को डीबग करना असंभव है):/* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
दलिन

1

उपयोग करने से hook_form_alterआप फ़ॉर्म में कुछ भी बदल सकते हैं, यहां तक ​​कि विजेट से आने वाले सामान भी। यह आसानी से थोड़ा गड़बड़ हो सकता है और विजेट्स के साथ गड़बड़ करने पर यह आसानी से टूट जाता है।

यदि आप विजेट को बदलना चाहते हैं, तो आप इसे अपना विजेट बना सकते हैं। विजेट प्लगइन्स (PHP वर्ग) होते हैं, ताकि आप अपने स्वयं के उपवर्ग को बना सकें और पूरी तरह से ओवरराइटिंग कार्यों या विस्तारित कार्यों द्वारा या तो बदल सकते हैं।

विजेट एनोटेशन सिस्टम का उपयोग करते हैं, इसलिए आपको कक्षा के ऊपर टिप्पणियों के रूप में नाम, आईडी आदि को परिभाषित करने की आवश्यकता होती है। सबसे आसान तरीका बस मूल विजेट को कॉपी करना है और इसे बदलना एक नया नाम और आईडी देना है, बाकी जैसा होना चाहिए वैसा ही होना चाहिए।

Drupal को नया प्लगइन खोजने के लिए कैश को साफ़ करना याद रखें।


-1

नहीं है पैराग्राफ मुद्दा कतार में इस के लिए एक पैच

यह नए हुक जोड़ता है:

hook_form_paragraphs_subform_alter()
hook_form_paragraphs_subform_TYPE_alter()
hook_form_paragraphs_subform_WIDGET_alter()
hook_form_paragraphs_subform_WIDGET_TYPE_alter()

1
इस टिप्पणी के अनुसार , उन हुक को कोर के पक्ष में नहीं जोड़ा गया था hook_field_widget_WIDGET_TYPE_form_alter()
powpow12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.