হুক_ইনিট () এখনও ব্যবহৃত হয়? যদি এটি আর ব্যবহার না করা হয় তবে আমি কীভাবে কোড প্রয়োগকারী হুক_ইনিট () রূপান্তর করব?


10

ড্রুপাল.আর.পি. এপিআই-তে সন্ধান করলাম, আমি লক্ষ্য করেছি যে হুক_ইনিট () দ্রুপাল ৮ এর জন্য নথিভুক্ত নয় the পরিবর্তনের রেকর্ডের দিকে তাকালে বুটস্ট্র্যাপ হুকের আর অস্তিত্ব পাওয়া যায়নি , যা সমস্ত 'বুটস্ট্র্যাপ' হুকগুলি থেকে মুক্তি পেতে নির্দেশ করে , যেখানে বুটস্ট্র্যাপ হুকগুলি বলা হয় hook_boot()এবং hook_exit(); কিছুই সম্পর্কে বলা হয় না hook_init()

আমি ড্রুপাল 8 উত্সে হুক_ইনিট অনুসন্ধান করেছি এবং আমি নিম্নলিখিত কোডটি পেয়েছি। প্রথমটি 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()ড্রুপাল 8 এ এখনও ব্যবহৃত হয়? যদি এটি আর ব্যবহার না করা হয় তবে আমি কীভাবে ড্রুপাল 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();   
  ...
}

কীভাবে ['# সংযুক্ত] [' জেএস] ফাংশন ইনিশিয়াল মাইমোডুলে ব্যবহার করবেন? একবারে ফাংশনে কোনও $ var, $ পৃষ্ঠা বা অন্য কোনও যুক্তি নেই।
নেহা

@ নেহা - আপনি করবেন না এই উত্তরটি আরও উন্নত স্টাফগুলির জন্য কীভাবে হুক এন ডি প্রতিস্থাপন করবেন তা কপি করে। তবে লাইব্রেরি সংযুক্ত করার জন্য আপনি ব্যবহার করেন hook_page_attachmentsবা hook_page_attachments_alter
লেম্যানেক্স

5

হ্যাঁ, hook_init()দ্রুপাল ৮-তে ব্যবহৃত হয় না তবে আপনার যদি প্রয়োজন হয় drupal_add_js()বা drupal_add_css()আপনি তার hook_page_build()পরিবর্তে ব্যবহার করতে পারেন ( দ্রষ্টব্য : এই হুকটি দ্রুপাল 8.0.0-বিটা 3 এ পরিবর্তনের রেকর্ডে সরিয়ে ফেলা হয়েছে ), এটি ড্রুপাল al-তেও কার্যকর useful

উদাহরণস্বরূপ, সিএসএস শৈলী এবং জাভাস্ক্রিপ্ট কোড 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);

আপনার যদি অনুরোধ / প্রতিক্রিয়াটিতে আরও জটিল শ্রবণ করার দরকার পড়ে তবে আপনি একটি ড্রুপাল 8 স্টাইলের কার্নেল ইভেন্ট শ্রোতাকে হুক_ইনিট () সরানোতে নথিভুক্ত হিসাবে সংজ্ঞায়িত করতে পারেন ।


4
আপনার কখনই দ্রুপাল_এডিডি_জেএস / ড্রুপাল_এডিডি_সিএসএস ব্যবহার করা উচিত নয় - এমনকি দ্রুপাল in এ এগুলি আরও ভাল এড়ানো যায় - আরও ভাল # সংযুক্ত ব্যবহার। আমি এই অংশটি সরিয়েছি

1
@chx, drupal_process_attachedপৃষ্ঠাগুলির প্রয়োজনীয় সংযোজন করতে drupal_add_css / js ব্যবহার করেcall_user_func('drupal_add_' . $type, $data, $options);
ডেভিড থমাস

1
হ্যাঁ কিন্তু drupal_process_attachedদাবানল পর ক্যাশে রেন্ডার প্রাপ্ত করা হয়। আপনি যদি তা করেন #attachedতবে আপনার সিএসএস / জেএস যোগ করা হবে এমনকি যখন রেন্ডার ক্যাশে ব্যবহার করা হয়।

2
উপস্থিত হুক_পেজ_বিল্ড আর ডি 8 তে কোনও জিনিস নয়?
ডিজিটগোফার

4

হুক_পেজ_বিল্ড () এখানে হুক_পেজ_এটাচমেন্টস () পরিবর্তন রেকর্ডের পক্ষে অবচয় করা হয়েছে

উদাহরণ:

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

লাইব্রেরির নাম হল লাইব্রেরির নাম, আপনার মডিউলটির মাইমডিউল.লাইব্রিজ.আইএমএল সংজ্ঞায়িত

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.