क्या हुक_इनिट () अभी भी उपयोग किया जाता है? यदि इसका अब उपयोग नहीं किया जाता है, तो मैं कोड को हुक_इनिट () कैसे लागू करूं?


10

Drupal.org API को देखते हुए, मैंने देखा कि हुक_इनिट () Drupal 8 के लिए प्रलेखित नहीं है। बदले हुए रिकॉर्ड को देखते हुए, मैंने पाया कि बूटस्ट्रैप हुक अब मौजूद नहीं है , जो सभी 'बूटस्ट्रैप' हुक से छुटकारा पाने के लिए इंगित करता है , जहां बूटस्ट्रैप हुक कहा जाता है hook_boot()और hook_exit(); कुछ भी नहीं कहा जाता है hook_init()

मैंने Drupal 8 स्रोत में hook_init की खोज की, और मुझे निम्नलिखित कोड मिला। पहले hook_init()एक टिप्पणी में किए गए एक संदर्भ है ; अन्य दो एक hook_init()कार्यान्वयन प्रतीत होते हैं , लेकिन वे दोनों एक पैरामीटर प्राप्त करते हैं जिसकी मुझे उम्मीद नहीं है।

function overlay_enable() {
  if (strpos(current_path(), 'admin/modules') === 0) {
    // Flag for a redirect to <front>#overlay=admin/modules on hook_init().
    $_SESSION['overlay_enable_redirect'] = 1;
  }
}
/**
 * Implements hook_init().
 */
function phptemplate_init($template) {
  $file = dirname($template->filename) . '/' . $template->name . '.theme';
  if (file_exists($file)) {
    include_once DRUPAL_ROOT . '/' . $file;
  }
}
/**
 * Implements hook_init().
 */
function twig_init($template) {
  $file = dirname($template->filename) . '/' . $template->name . '.theme';
  if (file_exists($file)) {
    include_once DRUPAL_ROOT . '/' . $file;
  }
}

मैंने भी किसी फंक्शन के लिए आमंत्रित किया, hook_init()लेकिन मुझे कोई नहीं मिला।

है hook_init()अभी भी Drupal 8 में प्रयोग किया जाता? यदि इसका उपयोग नहीं किया जाता है, तो मैं Drupal 7 कोड को hook_init()कैसे लागू करूं?

जवाबों:


6

शायद यह बदल गया है क्योंकि इस सवाल का आखिरी जवाब दिया गया था। लेकिन मुझे लगता है कि hook_initइवेंट सब्सक्राइबर बनाने के लिए और 'रिक्वेस्ट' को जोड़ने के लिए पसंदीदा तरीका अपनाया जा रहा है । यहां बताया गया है कि आप ऐसा कैसे करते हैं जो इसे उपयोगी लग सकता है।

उदाहरण सेवाएं

services:
  init_subscriber:
    class:   Drupal\mymodule\EventSubscriber\MyModuleSubscriber
    arguments: ['@current_user'] // <- optional args
    tags:
      - {name: event_subscriber} // <- Required Tag

फिर आप EventSubscriberInterface( src/EventSubscriberनिर्देशिका में नई फ़ाइल ) को लागू करेंगे और कार्यान्वित विधि में getSubscribedEventsआप कुछ ऐसा कर सकते हैं ...

/**
 * {@inheritdoc}
 */
public static function getSubscribedEvents() {
  $events[KernelEvents::REQUEST][] = array('initializeMyModule');
  return $events;
}

और तदनुसार विधि जोड़ें

/**
 * MyModule
 *
 * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
 *   The event to process.
 */
public function initializeMyModule(GetResponseEvent $event) {
  $request = $event->getRequest();   
  ...
}

फ़ंक्शन initializeMyModule में ['#attached] [' js] का उपयोग कैसे करें? SInce फ़ंक्शन में कोई $ var, $ पेज या somether तर्क नहीं है।
नेहा

@ स्नेहा - तुम नहीं। यह उत्तर अधिक उन्नत सामान के लिए हुक इनिट को बदलने के तरीके का सामना करता है। लेकिन आपके द्वारा उपयोग किए जाने वाले पुस्तकालयों को संलग्न करने के लिए hook_page_attachmentsया hook_page_attachments_alter
लीमैनएक्स

5

हाँ, hook_init()Drupal 8 में उपयोग नहीं किया जाता है। यदि आपको ज़रूरत है drupal_add_js()या drupal_add_css()आप hook_page_build()इसके बजाय उपयोग कर सकते हैं ( ध्यान दें : यह हुक Drupal 8.0.0-beta3 में परिवर्तन रिकॉर्ड देखें ) को हटा दिया गया था , जो Drupal 7 में इसके लिए भी उपयोगी है।

उदाहरण के लिए, सीएसएस शैलियों और जावास्क्रिप्ट कोड का hook_page_build()उपयोग करके जोड़ा जा सकता है $page['#attached']

 $path = drupal_get_path('module', 'MY_MODULE');
 $page['#attached']['js'][$path . '/my_module.js'] = array('scope' => 'footer');
 $page['#attached']['css'][$path . '/my_module.base.css'] = array('every_page' => TRUE);

यदि आपको वहां अनुरोध / प्रतिक्रिया को सुनने के लिए अधिक जटिल करने की आवश्यकता है, तो आप एक Drupal 8 शैली कर्नेल ईवेंट श्रोता को हुक_इनिट () हटाए गए दस्तावेज़ के रूप में परिभाषित कर सकते हैं ।


4
आपको कभी भी ड्रुपल_डड_ज / ड्रुपल_डीडी_एसके का उपयोग नहीं करना चाहिए - यहां तक ​​कि ड्रुपल 7 में भी वे बेहतर परहेज करते हैं - बेहतर उपयोग # सट्टा। मैंने इस हिस्से को हटा दिया।

1
@chx, drupal_process_attachedपेज अपेक्षित जोड़ने के लिए drupal_add_css / js का भी उपयोग करता हैcall_user_func('drupal_add_' . $type, $data, $options);
David Thomas

1
हां, लेकिन रेंडर कैश के पुनः प्राप्त होने के बादdrupal_process_attached आग लग जाती है। यदि आप करते हैं तो आपके CSS / JS को रेंडर कैश का उपयोग करने पर भी जोड़ा जाएगा। #attached

2
लगता है कि हुक_पेज_बिल्डिंग अब डी 8 में कोई बात नहीं है?
डिजिटोफर

4

यहां hook_page_attachments () परिवर्तन रिकॉर्ड के पक्ष में hook_page_build () पदावनत किया गया है

उदाहरण:

function MYMODULE_page_attachments(array &$attachments) {
  $attachments ['#attached']['library'][] = 'modulename/libraryname';
}

लाइब्रेरीनाम लाइब्रेरी का नाम है, जो आपके मॉड्यूल के mymodule.lbooks.yml में परिभाषित है

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