अनुवादित नोड का मार्ग कैसे प्राप्त करें?


10

मैंने Drupal 7 में एक बहुभाषी साइट स्थापित की है। एक टेम्पलेट में मुझे एक विशिष्ट सामग्री नोड के लिए लिंक जोड़ने की आवश्यकता है। इस नोड में अनुवाद और पथ उपनाम जैसे हैं:

node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)

url()वर्तमान भाषा में सामग्री नोड के अन्य संस्करण के लिए लिंक प्राप्त करने के लिए मैं जिस टेम्पलेट को कॉल करना चाहूंगा ।

जर्मन पेज पर इसे /de/pathalias_deअंग्रेजी पेज पर लिंक करना चाहिए/en/pathalias_en

मैंने कई बदलावों की कोशिश की है, जैसे कि nid को कॉल करना, उपनाम को कॉल करना, वर्तमान भाषा ऑब्जेक्ट को पास करना url()

क्या यह कुछ url()करने में सक्षम होना चाहिए या मुझे एक अलग फ़ंक्शन की आवश्यकता है? धन्यवाद!

जवाबों:


14

"सामग्री अनुवाद" मॉड्यूल के स्रोत को देखने के बाद मैं इस समाधान के साथ आया हूं:

    global $language;
    $translations = translation_path_get_translations("node/42");
    /*
    Returns the paths of all translations of a node, based on its Drupal path:
    array(2) {
        ["de"]=>string(7) "node/42"
        ["en"]=>string(7) "node/43"
    }
    */
    print l(t('Link Title'), $translations[$language->language]); //l() will return the alias to node/42

यह लिंक को सही नोड उपनाम के लिए आउटपुट करेगा। काम करता है और अत्यधिक जटिल नहीं है - फिर भी आश्चर्य होता है कि क्या कोई फ़ंक्शन है जो पहले से ही ऐसा करता है।


2
या $translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));नोड आईडी के बजाय उपनाम के लिए खोज करने के लिए उपयोग करें, यह अधिक लचीला है। आपको सही भाषा पास करनी होगी।
डूडेरू

5
global $language;

$translation_node = translation_path_get_translations("42");

$nid = $translation_node[$language->language]->nid;

$path = "node/{$nid}";

2
Drupal उत्तर में आपका स्वागत है! जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, आपके कोड के साथ आवश्यक स्पष्टीकरण शामिल करना बेहतर होगा।
मोलॉट 9/20

4

Drupal_get_path_alias fuction पर एक नज़र डालें

आंतरिक Drupal पथ को देखते हुए, व्यवस्थापक द्वारा निर्धारित उपनाम लौटाएं।

यदि कोई पथ प्रदान नहीं किया गया है, तो फ़ंक्शन वर्तमान पृष्ठ का उपनाम वापस कर देगा।

पैरामीटर

$ पथ: एक आंतरिक Drupal पथ।

$ path_language: पथ को देखने के लिए एक वैकल्पिक भाषा कोड।

जैसा कि आप बाहर कर सकते हैं यह एक path_language पैरामीटर लेता है। इसलिए आप वर्तमान भाषा का पता लगा सकते हैं और फिर इस फ़ंक्शन को पास कर सकते हैं।

या बस मल्टीलिंक मॉड्यूल का उपयोग करें

  1. बहु भाषा साइटों के लिए डिज़ाइन किया गया। विशेष रूप से उन साइटों के लिए प्रासंगिक है जहां सभी सामग्री सभी भाषाओं में उपलब्ध नहीं है, या बाद के समय में उपलब्ध (अनुवादित) हो सकती है।
  2. आपको अन्य नोड्स में आसानी से इन-कॉन्टेंट लिंक बनाने की अनुमति देता है, और वे लिंक स्वचालित रूप से अपडेट किए गए नोड्स के उपयुक्त अनुवादित संस्करण को इंगित करने के लिए अपडेट करते हैं, जब उपलब्ध हो।

1
drupal_get_path_alias()किसी दिए गए नोड के अनुवादों की खोज नहीं करेंगे, केवल दिए गए भाषा में पहले से ही उपनामों के लिए । मुझे एक और समाधान मिला, मेरा जवाब नीचे देखें।
डूडेरू

3

उपरोक्त उत्तर में से कोई भी i18n_path का सही उपयोग नहीं करता है। यदि आप अनुवादित नोड से लिंक करना चाहते हैं, तो आपको बस i18n_path मॉड्यूल को सक्षम करना चाहिए और इस प्रकार पथ को प्रारूपित करना चाहिए,

drupal_get_path_alias('node/'.$node->nid, $node->language);

2

आपको संभवतः लिंक फ़ंक्शन का उपयोग करना चाहिए । यह आपको भाषा को एक पैरामीटर के रूप में पारित करने की अनुमति देता है और यह Drupal के साथ एक लिंक बनाने के लिए उपयुक्त कार्य है।


l()url()आंतरिक रूप से उपयोग करता है इसलिए इस मामले में कोई फर्क नहीं पड़ता।
डूडेरू

1

अनुवाद पुनर्निर्देशन का उपयोग करके आप भाषा उपसर्ग के साथ नोड से लिंक कर सकते हैं।

यह वही है जो यह कहता है:

अनुवाद पुनर्निर्देशित मॉड्यूल अनुरोधित भाषा में पृष्ठ के अनुवाद के लिए अनाम उपयोगकर्ताओं (वेब ​​क्रॉलर्स सहित) को पुनर्निर्देशित करता है, यदि यह मौजूद है, तो 301 रीडायरेक्ट कोड का उपयोग करके। उदाहरण के लिए, यदि अनुरोध / डे / नोड / 23 के लिए है और नोड / 23 एक अंग्रेजी पेज से मेल खाता है, तो उपयोगकर्ता मौजूद होने पर अंग्रेजी नोड के जर्मन अनुवाद पर पुनर्निर्देशित किया जाएगा। यदि अनुवाद मौजूद नहीं है, तो स्रोत नोड सामग्री प्रदर्शित होती है।

उदाहरण के लिए यदि nid 22 अंग्रेजी संस्करण के लिए है और इसमें फ्रेंच और जर्मन हैं तो आप बस उन्हें fr / नोड / 22 और de / नोड / 22 के रूप में लिंक कर सकते हैं। यह 22 अनुवादित संस्करण का कोई भी हिस्सा हो सकता है।

यदि जापानी के लिए विशेष रूप से अनुवाद नहीं किया गया है, तो आप ja / node / 22 को बेनामी उपयोगकर्ताओं के लिए 404 देंगे।


0

सही उपसर्ग पथ प्राप्त करने के लिए, मैं उपयोग करता हूं:

$node_url = url(drupal_get_path_alias('node/' . $row->nid));

Drupal_get_path_alias () केवल उर्फ ​​लौटाता है, url () वह है जो उपसर्ग ("en /") जोड़ता है।

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