NID (या नोड ऑब्जेक्ट) से पथ उपनाम प्राप्त करें


22

मेरे पास एक नोड ऑब्जेक्ट है, और मैं ड्रुपल 8 में दिए गए मार्ग को प्राप्त करने के लिए इसका उपयोग करने की कोशिश कर रहा हूं।

drupal_lookup_path()Drupal 7 में था , लेकिन मैं Drupal 8 के लिए कोई समकक्ष या दस्तावेज नहीं देख रहा हूं।

नोड ऑब्जेक्ट से पथ प्राप्त करने के लिए नया "Drupal" तरीका क्या है?

क्या यह कुछ सरल होगा $node->get('path')?

यह एक साधारण प्रश्न की तरह लगता है, लेकिन मैं अभी इस पर कोई प्रलेखन नहीं ढूंढ रहा हूँ।

सूचना मुझे वर्तमान मार्ग के लिए मार्ग उपनाम नहीं चाहिए; मैं नोड ऑब्जेक्ट या नोड आईडी को देखते हुए एक मनमाना नोड के लिए मार्ग उपनाम चाहता हूं।



मुझे लगता है कि यह एक डुप्लिकेट हो सकता है, लिंक किए गए प्रश्न की जांच करें बहुत सारे उत्तर हैं।
केविन

दूसरे प्रश्न के उत्तर में कहा गया है कि वर्तमान पथ के लिए पथ को कैसे प्राप्त किया जाए, न कि उस नोड के लिए जिसके लिए ओपी नोड आईडी को जानता है।
kiamlaluno

यह डुप्लिकेट नहीं है - मुझे वर्तमान रास्ता नहीं चाहिए। मैं एक मनमाना नोड ऑब्जेक्ट या एनआईडी दिया गया रास्ता चाहता हूं।
जैक रयान

हां, यह कोई डुप्लिकेट नहीं है, मेरा जवाब देखें।
4k4

जवाबों:


43

नोड आईडी उपयोग के लिए पथ प्राप्त करने के लिए AliasManager :: getAliasByPath :

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

3
हां, यह सही लगता है और मेरे समाधान से अधिक सरल है। धन्यवाद!
जैक रयान

19

Url का उपयोग करने के बारे में क्या :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();

5
IIRC, इसके बीच और अलियासेंगर का उपयोग करने का प्राथमिक अंतर यह है कि इससे यह भी सुनिश्चित होगा कि आउटबाउंड पथ प्रोसेसर चलता है, जबकि अलियासमान केवल उर्फ ​​लुकअप करता है। आप Urlवस्तु को सीधे भी प्राप्त कर सकते हैं $node->toUrl()
mpdonadio

1
ज्यादा बेहतर उपाय।
पैट्रिक

16

यदि आपके पास केवल एनआईडी है, तो 4k4 का समाधान

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

बहुत अच्छा काम करता है। लेकिन अगर आपके पास पहले से ही नोड ऑब्जेक्ट है तो आप एक या दो कदम छोड़ सकते हैं। नोड्स ने वास्तव में urls प्राप्त करने के तरीकों में बनाया है।

$node->toUrl()->toString();

नोड का उपनाम दिया गया url लौटाएगा।

toUrl () एक url ऑब्जेक्ट देता है। यहां देखें https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

औरString () url ऑब्जेक्ट का एक तरीका है जो url के स्ट्रिंग प्रतिनिधित्व को लौटाता है।


9
ध्यान दें कि $node->toUrl()->setAbsolute()->toString()पूर्ण URL लौटाएगा, साझा करने के लिए उपयोगी आदि
टिम

2

यदि आप path.alias_storageउस नोड के लिए कोई पथ नहीं मिला, तो आप अन्य विवरणों या बूलियन झूठी की एक सरणी वापस करने के लिए लोड विधि का उपयोग कर सकते हैं ।

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);


2

नोड ऑब्जेक्ट से नोड URL प्राप्त करने का सर्वोत्तम तरीका-

  • निरपेक्ष पथ : $ नोड-> tolrl () -> setAbsolute () -> toString ();
  • सापेक्ष पथ : $ नोड-> tolrl () -> toString ();

यह नोड लैंग्वेज को भी हैंडल करेगा।


0

यदि आप भाषाओं द्वारा नोड उर्फ ​​यूआरएल प्राप्त करना चाहते हैं तो इस तरह भाषा का उपयोग करना न भूलें।

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

यदि आप इसे कक्षा में उपयोग कर रहे हैं तो निर्भरता इंजेक्शन का सही उपयोग करना न भूलें।


-5

मैं और अधिक "ड्रुपलेस" समाधान की उम्मीद कर रहा था, लेकिन यहां मैंने खुद को काम करने के लिए बनाया है:

  function getPathFromNID($nid) {
    $db = \Drupal::database();

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.