এখনও অবধি, আমি ড্রুপাল 7 এ এই 3 টি ফাংশনটি পেরিয়ে এসেছি, তবে আমি সত্যিই নিশ্চিত নই যে তাদের মধ্যে পার্থক্য কী এবং কোন ব্লক প্রিপ্রসেস ফাংশনে নোড আইডি পাওয়ার জন্য আরও বেশি বরাদ্দ।
আপনি আমাকে কিছু অন্তর্দৃষ্টি দিতে পারেন?
এখনও অবধি, আমি ড্রুপাল 7 এ এই 3 টি ফাংশনটি পেরিয়ে এসেছি, তবে আমি সত্যিই নিশ্চিত নই যে তাদের মধ্যে পার্থক্য কী এবং কোন ব্লক প্রিপ্রসেস ফাংশনে নোড আইডি পাওয়ার জন্য আরও বেশি বরাদ্দ।
আপনি আমাকে কিছু অন্তর্দৃষ্টি দিতে পারেন?
উত্তর:
আমি তাদের মধ্যে পার্থক্য কি সত্যিই নিশ্চিত
menu_get_object()
নোড / ১ দেখায়, তারপরে নোডের জন্য নোড অবজেক্টটি ফিরিয়ে দেবে যার আইডি 1; যদি পৃষ্ঠাটি দেখানো হচ্ছে উদাহরণ.com/ menu_get_object('user')
user/1 হয় তবে তার আইডি 1 ব্যবহারকারীর জন্য ব্যবহারকারীর অবজেক্ট ফিরিয়ে দেবে। node_load
বর্তমান পথের একটি অংশের সাথে সম্পর্কিত কোনও বস্তু লোড করার জন্য ফাংশন নামের একটি অ্যারে (যেমন ) বলা হবেdrupal_lookup_path("homepage")
তা ফিরে আসবে "node/1"
। পাথ এলিয়াসগুলি কোনও নোড পাথের সাথেই নয়, কোনও অভ্যন্তরীণ পাথের সাথে সম্পর্কিত হতে পারে।এবং যা কোনও ব্লক প্রিপ্রোসেস ফাংশনে নোড আইডি পাওয়ার জন্য আরও বেশি বরাদ্দযুক্ত।
আপনি যা দেখতে চান তা যদি বর্তমানে প্রদর্শিত নোডের নোড আইডি হয় তবে আপনাকে কেবল নিম্নলিখিত কোডটি ব্যবহার করতে হবে:
if (arg(0) == 'node') {
$nid = arg(1);
}
যদি আপনাকে নোড অবজেক্টটি পেতে হয় তবে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:
if ($node = menu_get_object()) {
// Use the node object.
}
এই স্নিপেটগুলির মধ্যে দ্বিতীয়টি ভাল, কারণ এটি অভ্যন্তরীণ পথগুলির জন্য যেমন নোড / 1 / রিভিশন / 3 / ভিউয়ের জন্য সঠিক নোড বস্তুটি দেয়।
মনে রাখবেন যে কিছু পূর্ব প্রস্তুতি ফাংশন যেমন পৃষ্ঠার জন্য বা নোডের ইতিমধ্যে একটি রয়েছে $variables['node']
। এর অর্থ হ'ল সেই ক্ষেত্রে, কোন ফাংশনটি ব্যবহার করবেন তা চিন্তা না করে আপনার কেবলমাত্র আপনার প্রিপ্রোসেস ফাংশনে নিম্নলিখিত স্নিপেট ব্যবহার করতে হবে।
if (isset($variables['node'])) {
// Check the node ID or other properties.
}
অন্যান্য প্রিপ্রোসেস ফাংশনগুলির জন্য নোড অবজেক্ট সহ কোনও ভেরিয়েবল আছে কিনা তা দেখতে ডকুমেন্টেশন চেক করুন। উদাহরণস্বরূপ, এটি সেই ক্ষেত্রে template_preprocess_comment()
যা $variables['node']
মন্তব্যের জন্য প্রিপ্রোসেস ফাংশনগুলিতে উপলব্ধ করে।
এটি কীভাবে দ্রুপাল কোরের টেমপ্লেট_প্রিয়সেস_পৃষ্ঠায় সম্পন্ন হয়েছে :
থিম.ইনকের 2267 লাইন এবং তারপরে :
if ($node = menu_get_object()) {
$variables['node'] = $node;
}
টেম্পলেট_প্রসেস_পৃষ্ঠা মেনু_জেট_বজেক্টটি ব্যবহার করে । এর পরে নোডটি সংজ্ঞায়িত করা এবং $ node-> nid পাওয়ার বিষয়টি খতিয়ে দেখার বিষয়।
একটি জিনিস যা আপনাকে সাবধানে রাখতে হবে তা হ'ল পাথ ওরফে।
drupal_get_normal_path($path)
বর্তমান পথটি সিস্টেম ভেরিয়েবলটি ব্যবহার করতে $_SERVER["REQUEST_URI"]
(আপনি যদি নোড পৃষ্ঠায় থাকেন তবে আপনি কল করতে পারেন $node->uri['path']
, এটি একটি নন-ওরফে পাথ ফিরে আসবে Then আবার আপনি যদি নোড পৃষ্ঠায় থাকেন তবে আপনি কেবল ব্যবহার করতে পারেন $node->nid
))
এটি নোড / এক্সএক্সএক্সএক্স ফিরে আসবে
তাই কিছু চেষ্টা করুন
$node_path = explode('/', drupal_get_normal_path($path));
$nid = $node_path[1];
arg(1);
এটি করার কোনও খারাপ উপায় নয়। আরগ () অভ্যন্তরীণ পথে কাজ করে, তাই এটি পথের উপাধিতে প্রভাবিত হবে না।
menu_get_object
(যা কেবল এটির মতোই menu_get_item
ভাল so েকে দেয় )।
if (arg(0) == 'node' && is_numeric(arg(1)))
তাহলে arg(1)
প্রায় 99% আপনাকে নোড আইডি ফিরিয়ে দেবে। তবে এককভাবে arg(1)
আপনাকে অন্যান্য অনেক আইডিও ফিরিয়ে দিতে পারে।
ড্রুপাল 8 এ, আপনি রাউটিংটিতে যা আছে তার উপর ভিত্তি করে url আর্গুমেন্টগুলি পেতে পারেন get
আইডিটি একা পেতে:
$nid = \Drupal::routeMatch()->getRawParameter('node');
আপনি যদি নোড বস্তুটি লোড করার পরিকল্পনা করেন তবে আপনি কেবল এটি এইভাবে পেতে পারেন:
$node = \Drupal::routeMatch()->getParameter('node');
প্যারামিটারের নামগুলি খুঁজতে, আপনি এটি ব্যবহার করতে পারেন:
$possible_parameters = \Drupal::routeMatch()->getParameters();