আমি কীভাবে বর্তমান নোড আইডি পাব?


51

ড্রুপাল In-তে, আমি বর্তমানে প্রদর্শিত নোডের নোড আইডিটি পেতে চাইলে (যেমন node/145) আমি এটি arg()ফাংশন সহ পেতে পারি । এই ক্ষেত্রে, arg(1)145 ফেরত আসবে।

ড্রুপাল 8 এ আমি কীভাবে তা অর্জন করতে পারি?

উত্তর:


103

প্যারামিটারটি যখন আপনি এটি অ্যাক্সেস পেয়েছেন তখন nid থেকে পূর্ণ নোড অবজেক্টে আপকাস করা হবে, সুতরাং:

$node = \Drupal::routeMatch()->getParameter('node');
if ($node instanceof \Drupal\node\NodeInterface) {
  // You can get nid and anything else you need from the node object.
  $nid = $node->id();
}

দেখুন পরিবর্তন রেকর্ড আরও তথ্যের জন্য।


4
আমি আপনাকে যুক্ত করতে চাই এটির সাথে সাবধানতা অবলম্বন করতে - দ্রুপাল :: রুটম্যাচ () -> গেটপ্যারামিটার ('নোড'); নোড পুনর্বিবেচনার পৃষ্ঠাগুলি মুছে ফেলার জন্য 1 আইটেমের একটি অ্যারে (নোড আইডি) ফিরিয়ে দেবে, সুতরাং আপনি যদি কোনও পদটিকে কল্পনা করেন তবে আপনি "মারাত্মক ত্রুটি: কোনও সদস্য ফাংশনটিতে কল করুন টাইপ (যেমন ফাংশন ত্রুটি) হিসাবে মারাত্মক ত্রুটি পাবেন ( ) স্ট্রিং এ "।
জেফ বার্নজ

আমি যদি পরিদর্শন করি তবে আমি কীভাবে পরামিতি পেতে পারি /taxonomy/term/{tid}?
আশ্বিনপি

এটি কি কার্যকরী প্রতিস্থাপনের জন্য menu_get_object?
ফ্র্যাঙ্ক রবার্ট অ্যান্ডারসন

খুব হ্যাঁ @ ফ্র্যাঙ্ক। এটি অবশ্যই কিছুটা পৃথক, তবে আপনি যদি এমন কোনও প্রসঙ্গে ফেলে যান যা কোন সত্তা পৃষ্ঠাটি (যদি থাকে তবে) এটি জানেন না তবে এটি
ক্লাইভ

1
@ আশ্বিনপি {}আপনার রুটে আপনি যা লিখবেন তা প্যারামিটারটি । ট্যাক্সনোমির পদগুলির জন্য রুট পরামিতি বলা হয় taxonomy_term, রুটের সংজ্ঞা /taxonomy/term/{taxonomy_term}। এখানে আপনি এটি এটি পেতে পারেন \Drupal::routeMatch()->getParameter('taxonomy_term')
Jdrupal

17

এটি ব্যবহার করা সঠিক \Drupal::routeMatch()->getParameter('node')। আপনার যদি কেবল নোড আইডি প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন \Drupal::routeMatch()->getRawParameter('node')


4

আপনি যদি কাস্টম ব্লক ব্যবহার করছেন বা তৈরি করছেন তবে বর্তমান ইউআরএল নোড আইডি পেতে আপনাকে এই কোডটি অনুসরণ করতে হবে।

// add libraries
use Drupal\Core\Cache\Cache;  

// code to get nid

$node = \Drupal::routeMatch()->getParameter('node');
  $node->id()  // get current node id (current url node id)


// for cache

public function getCacheTags() {
  //With this when your node change your block will rebuild
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
  //if there is node add its cachetag
    return Cache::mergeTags(parent::getCacheTags(), array('node:' . $node->id()));
  } else {
    //Return default tags instead.
    return parent::getCacheTags();
  }
}

public function getCacheContexts() {
  //if you depends on \Drupal::routeMatch()
  //you must set context of this block with 'route' context tag.
  //Every new route this block will rebuild
  return Cache::mergeContexts(parent::getCacheContexts(), array('route'));
}

এই পোস্টে কোন মানে হয় না। কারও পক্ষে এই কোডটি কোথায় যায় তা জানার উপায় নেই।
লেস্টার পিবডি

2

নোডের পূর্বরূপ পৃষ্ঠায় নোট করুন, নিম্নলিখিতটি কাজ করে না:

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

নোডের পূর্বরূপ পৃষ্ঠার জন্য আপনাকে এইভাবে নোডটি লোড করতে হবে:

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

নোড পূর্বরূপ পৃষ্ঠায় নোড অবজেক্টটি কীভাবে লোড করবেন?

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