मैं कस्टम हुक कैसे बनाऊं और उपयोग करूं?


10

मैंने यहां एक प्रश्न पोस्ट किया , जिसमें एक सुझाव था, लेकिन कोई जवाब नहीं। क्या किसी को ड्रुपल 8 में एक कस्टम हुक को लागू करने के बारे में कोई सलाह है जो अन्य मॉड्यूल को सामग्री की तालिका को अपडेट करने की अनुमति देगा जो कि एक मूल मॉड्यूल द्वारा बनाई गई है? सामग्री की तालिका एक अनियंत्रित सूची होगी।


2
के तहत खंड पर एक नज़र डालें "एक हुक परिभाषित करने के लिए:" यहाँ , कि मदद करता है?
क्लाइव

केवल आंशिक रूप से। यह बताता है कि उपयोग करने के लिए बच्चे के कार्य के लिए एक हुक कैसे बनाया जाए, लेकिन मूल मॉड्यूल कैसे सामग्री प्रदान करता है, इस पर कुछ भी नहीं। क्या पेरेंट कंटेंट को जोड़ने, कहने के लिए, $ आउटपुट ['table_of_contents'] का उपयोग करता है और फिर पेरेंट का हुक बच्चे से लौटाए गए डेटा को इस एरे में भेजता है?
केविन Nowaczyk

2
@KevinNowaczyk यह हुक के उद्देश्य पर निर्भर करता है। एक हुक प्रतिपादन के लिए विशिष्ट नहीं है, लेकिन इसके लिए इस्तेमाल किया जा सकता है। यदि आप सामग्री प्रदान करने के लिए एक कस्टम हुक बनाना चाहते हैं और आप हुक को उस स्थान पर लगाते हैं जहाँ आपको सामग्री की आवश्यकता है, तो यह काम करेगा। और क्योंकि हुक कस्टम और आपके फ़ंक्शन के लिए नया है, इसलिए आपको यह परिभाषित करना होगा कि हुक को अपने परिणाम कैसे प्रदान करने चाहिए। फिर यदि आप अपने माता-पिता के रेंडर फ़ंक्शन के दौरान हुक का उपयोग करते हैं, तो आप परिणाम को एक उपयोगी प्रारूप में प्राप्त कर सकते हैं।
नियोग 734

जवाबों:


8

यह खंड मूल मॉड्यूल में एक नियंत्रक में रहता है:

$plugin_items = [];
// Call modules that implement the hook, and let them add items.
\Drupal::moduleHandler()->alter('flot_examples_toc', $plugin_items);
if (count($plugin_items > 0)) {
  $output['plugins'] = [
    '#title' => 'Plugins',
    '#theme' => 'item_list',
    '#items' => $plugin_items,
  ];
}

और यह बच्चे [मॉड्यूल] .मॉड्यूल फ़ाइल में रहता है।

use Drupal\Core\Url;

function mymodule_flot_examples_toc_alter(&$item_list) {
  $options = [
    ':one' => Url::fromRoute('flot_spider_examples.example')->toString(),
  ];
  $item_list[] = t('<a href=":one">Spider Chart</a> (with spider plugin)', $options);
}

अभिभावक एक सरणी बनाता है और इसे संदर्भ द्वारा बच्चों को भेजता है। वे इसमें तत्वों को जोड़कर सरणी को बदल सकते हैं। अभिभावक इसे रेंडर सरणी में जोड़ता है।


5

बस सादगी के लिए यदि आप अन्य डेवलपर्स के लिए ड्रुपल 8 में कस्टम हुक का उपयोग करना और बनाना चाहते हैं

दूसरों को mymodule.api.php फ़ाइल में अपने हुक के उपयोग को परिभाषित करने में मदद करने के लिए यह हुक किसी भी आवश्यक चीज़ पर कार्य कर सकता है।

उदाहरण:

 // my hook 
 function hook_mymodule_alter_something(array &$data) {
   // here others will make a module that will call this to alter "$data"
 }

तब जब आपके मॉड्यूल में आवश्यक हो।

 \Drupal::moduleHandler()->invokeAll('mymodule_alter_something', [&$data]);

फिर दूसरे डेवलपर कॉल करके इसका उपयोग कर सकते हैं

function MYOTHERMODULE_mymodule_alter_something($data) {
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.