मुझे वर्तमान नोड आईडी कैसे मिलेगी?


51

Drupal 7 में, यदि मैं वर्तमान में प्रदर्शित नोड (उदाहरण 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
मैं बस आपको इसके साथ जोड़ना चाहता हूं - मुझे बस स्टिंग मिला है जहां \ Drupal :: pathMatch () -> getParameter ('नोड'); नोड पुनरीक्षण हटाए गए पृष्ठों पर 1 आइटम (नोड आईडी) की एक सरणी लौटाएगा, इसलिए यदि आप किसी वस्तु को एक वस्तु मानते हैं तो आपको एक घातक त्रुटि मिलेगी जैसे कि "घातक त्रुटि: सदस्य फ़ंक्शन को कॉल करें getType ( ) स्ट्रिंग पर "।
जेफ बर्नज़

अगर मैंने दौरा किया, तो मुझे पैरामीटर कैसे मिल सकता है /taxonomy/term/{tid}?
अश्विन

क्या यह एक कार्यात्मक प्रतिस्थापन है menu_get_object?
फ्रैंक रॉबर्ट एंडरसन

बहुत बहुत हाँ @ फ्रेंक। यह निश्चित रूप से कुछ अलग है, लेकिन यदि आप कोई संदर्भ क्या इकाई पेज (यदि हो तो) उस पर है, यह पता लगाने के लिए सिफारिश की तरीका है पता नहीं है कि में गिरा रहे हैं
क्लाइव

1
@AshwinP पैरामीटर जो भी आप {}अपने मार्ग में अंदर लिखते हैं । टैक्सोनॉमी शब्दों के लिए मार्ग पैरामाटर को taxonomy_termमार्ग परिभाषा कहा जाता है /taxonomy/term/{taxonomy_term}। यहाँ आप इस तरह प्राप्त कर सकते हैं \Drupal::routeMatch()->getParameter('taxonomy_term')
जद्रूपाल

17

इसका उपयोग करना सही है \Drupal::routeMatch()->getParameter('node')। यदि आपको केवल नोड आईडी की आवश्यकता है, तो आप उपयोग कर सकते हैं \Drupal::routeMatch()->getRawParameter('node')


4

यदि आप कस्टम ब्लॉक का उपयोग या निर्माण कर रहे हैं तो आपको वर्तमान url नोड आईडी प्राप्त करने के लिए इस कोड का पालन करना होगा।

// 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();

नोड पूर्वावलोकन पृष्ठ में नोड ऑब्जेक्ट लोड करने के लिए कैसे?

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