আমি কীভাবে ইউআরএল থেকে নোড আইডি পেতে পারি?


47

এখনও অবধি, আমি ড্রুপাল 7 এ এই 3 টি ফাংশনটি পেরিয়ে এসেছি, তবে আমি সত্যিই নিশ্চিত নই যে তাদের মধ্যে পার্থক্য কী এবং কোন ব্লক প্রিপ্রসেস ফাংশনে নোড আইডি পাওয়ার জন্য আরও বেশি বরাদ্দ।

আপনি আমাকে কিছু অন্তর্দৃষ্টি দিতে পারেন?


আপনি কি node.tpl.php বা এই জাতীয় কিছুতে করছেন? যদি হ্যাঁ, আপনি $ node-> nid ব্যবহার করতে পারেন।
বার্ট

না আমি ব্লক প্রিপ্রোসেস ফাংশনে এটি করছি না, যদিও ব্লকটি নোড পৃষ্ঠায় মুদ্রিত হয়ে যায়।
সিল্কএডমিন

উত্তর:


63

আমি তাদের মধ্যে পার্থক্য কি সত্যিই নিশ্চিত

  • মেনু_জেট_বজেক্ট () বর্তমানে প্রদর্শিত পৃষ্ঠার সাথে সম্পর্কিত অবজেক্টটি প্রদান করে। কোডটি যদি মৃত্যুদন্ড কার্যকর করা হয় যখন দ্রুপাল উদাহরণস্বরূপ পৃষ্ঠা / menu_get_object()নোড / ১ দেখায়, তারপরে নোডের জন্য নোড অবজেক্টটি ফিরিয়ে দেবে যার আইডি 1; যদি পৃষ্ঠাটি দেখানো হচ্ছে উদাহরণ.com/ menu_get_object('user')user/1 হয় তবে তার আইডি 1 ব্যবহারকারীর জন্য ব্যবহারকারীর অবজেক্ট ফিরিয়ে দেবে।
  • menu_get_item () "মেনু_আউটার" সারণীতে থাকা প্রতিটি ক্ষেত্রের জন্য একটি সূচকযুক্ত একটি অ্যারে প্রদান করে। এটা অন্তর্ভুক্ত:
    • পাথ: মেনু কলব্যাকের বর্তমান পথ
    • load_funifications: 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']মন্তব্যের জন্য প্রিপ্রোসেস ফাংশনগুলিতে উপলব্ধ করে।


7

এটি কীভাবে দ্রুপাল কোরের টেমপ্লেট_প্রিয়সেস_পৃষ্ঠায় সম্পন্ন হয়েছে :

থিম.ইনকের 2267 লাইন এবং তারপরে :

if ($node = menu_get_object()) {
    $variables['node'] = $node;
}

টেম্পলেট_প্রসেস_পৃষ্ঠা মেনু_জেট_বজেক্টটি ব্যবহার করে । এর পরে নোডটি সংজ্ঞায়িত করা এবং $ node-> nid পাওয়ার বিষয়টি খতিয়ে দেখার বিষয়।


4

একটি জিনিস যা আপনাকে সাবধানে রাখতে হবে তা হ'ল পাথ ওরফে।

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];

3
arg(1);

এটি করার কোনও খারাপ উপায় নয়। আরগ () অভ্যন্তরীণ পথে কাজ করে, তাই এটি পথের উপাধিতে প্রভাবিত হবে না।


এটি সত্য, এটি পথের এলিয়াস দ্বারা প্রভাবিত হবে না। তবে আপনি যদি নোড / এক্সএক্সএক্সএক্সএক্সএক্সে থাকেন তবে আপনি কেবল $ node-> nid ব্যবহার করতে পারেন। @ ফ্রাঞ্চ, আপনি আর কোথায় ব্যবহার করবেন (1) এবং আপনি যা চান তা ফিরে আসবে?
আইস্ট্রিকার 13

আপনি যদি একটি মডিউল হুক হয় তবে আপনার নোডের অ্যাক্সেস থাকবে না। ভিউ আর্গুমেন্ট এছাড়াও একটি উদাহরণ হতে পারে।
জেরেমি ফরাসী

ধন্যবাদ জেরেমি এবং ইস্রাটিকার, আমি আমার প্রশ্নটি আপডেট করে দিয়েছি এটি আরও পরিষ্কার হতে পারে .. যদিও আমি আপনার উভয় সমাধানের চেষ্টা করব, ধন্যবাদ
সিল্কএডমিন

1
আরগ () ব্যবহার করা খুব খারাপ ধারণা, আপনি নিজেকে একটি পথের সাথে আবদ্ধ করছেন, ব্যবহার করুন menu_get_object(যা কেবল এটির মতোই menu_get_itemভাল so েকে দেয় )।

if (arg(0) == 'node' && is_numeric(arg(1)))তাহলে arg(1)প্রায় 99% আপনাকে নোড আইডি ফিরিয়ে দেবে। তবে এককভাবে arg(1)আপনাকে অন্যান্য অনেক আইডিও ফিরিয়ে দিতে পারে।
লেইম্যানেক্স

2

ড্রুপাল 8 এ, আপনি রাউটিংটিতে যা আছে তার উপর ভিত্তি করে url আর্গুমেন্টগুলি পেতে পারেন get

আইডিটি একা পেতে:

$nid = \Drupal::routeMatch()->getRawParameter('node');

আপনি যদি নোড বস্তুটি লোড করার পরিকল্পনা করেন তবে আপনি কেবল এটি এইভাবে পেতে পারেন:

$node = \Drupal::routeMatch()->getParameter('node');

প্যারামিটারের নামগুলি খুঁজতে, আপনি এটি ব্যবহার করতে পারেন:

$possible_parameters = \Drupal::routeMatch()->getParameters();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.