मैं एक पथ उपनाम से नोड आईडी कैसे प्राप्त कर सकता हूं?


16

मैं एनआईडी प्राप्त करने में सक्षम होना चाहता हूं लेकिन मेरे पास एकमात्र जानकारी http://example.com/this-is-the-alias है

अगर मैं पृष्ठ पर नहीं हूं तो क्या उस उपनाम के लिए / नोड / * का आंतरिक रास्ता पाने का कोई तरीका है? या वहाँ एक रास्ता है कि तुरंत उर्फ ​​से नीद पाने के लिए?

जवाबों:


25

मुझे यकीन नहीं है कि अगर कोई सीधा कार्य होता है, लेकिन एक मार्ग आंतरिक मार्ग को देखने के लिए पथ उपनाम प्रबंधक सेवा का उपयोग करना है, तो उस पर ऑब्जेक्ट लोड करने के लिए एक मान्य नोड आईडी के लिए इसे फिर से शुरू करें:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}

4
किसी कारण के लिए, $pathकभी-कभी बराबर होता है /this-is-the-alias। एक बार जब रूट पथ ( node/{id}) एक और उर्फ ​​# माइग्रेशनस्ट्रगल था, लेकिन यह अन्य उपनामों के साथ भी मौजूद था।
क्रिस हैप्पी

7

किसी इकाई को प्राप्त करने और लोड करने के लिए आप निम्न कोड का उपयोग कर सकते हैं और इसके मूल्यों तक पहुंच बना सकते हैं।

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

संदर्भ


1

Devel मॉड्यूल स्थापित करें और फिर devel टूलबार आइटम वर्तमान रूट जानकारी का उपयोग करें

इसका परिणाम इस url में है, जिसे आप सीधे टाइप कर सकते हैं और क्वेरी पैरामीटर के रूप में अपने ड्रूपल इंस्टॉलेशन के लिए ज्ञात कोई भी पथ प्रदान कर सकते हैं:

/devel/routes/item?path=alias

जब यह एक नोड होता है तो आप सूचीबद्ध रूट चर के अंत में कच्चे मापदंडों में नोड आईडी पाते हैं।

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