जूमला में $ यह कहां से परिभाषित किया गया है?


14

मैंने सबसे पहले stackoverflow.com पर यह प्रश्न पूछा ( यहाँ प्रश्न )। टिप्पणियों में आप पढ़ सकते हैं कि यह बेहतर होगा यदि मैं उस प्रश्न को यहां पूछूं।

मेरी जूमला वेबसाइट पर मैं उपयोग कर रहा हूं, echo $this->baseurl;लेकिन यह "/index.php" युक्त url लौटाता है। मैं बेसल से "/index.php" को हटाने के लिए इसे बदलना चाहता हूं। लेकिन मुझे इसकी परिभाषा रेखा नहीं मिल रही है $this->baseurl;

मुझे यह थ्रेड मिला लेकिन यह प्रश्न स्वामी के टेम्पलेट पर आधारित है और मेरे टेम्पलेट में ऐसा कुछ नहीं है।

सुझाव बहुत सराहना की :)

जवाबों:


14

$this->baseurl;मूल रूप से के लिए शॉर्टकट है JUri::base()। इसे वह URL मिलता है, जिसे आपने live_siteअपने कॉन्फ़िगरेशन . php फ़ाइल में चर के रूप में निर्दिष्ट किया है । यदि इसका कोई मूल्य नहीं है, तो यह कुछ चर पर आधारित कुछ PHP जादू का उपयोग करेगा।

तो, कुछ परीक्षण चलाने देता है। कृपया परिणाम वापस रिपोर्ट करें:

टेस्ट 1:

<?php
  echo 'Rule 1: ' . JUri::base() . '\n';
  echo 'Rule 2: ' . $_SERVER['PHP_SELF'] . '\n';
  echo 'Rule 3: ' . $_SERVER['REQUEST_URI'] . '\n';
  echo 'Rule 4: ' . $_SERVER['SCRIPT_NAME'] . '\n';
?>

टेस्ट 2:

<?php
    echo JUri::base();
    echo JUri::base(true);
?>

टेस्ट 3:

ग्लोबल कॉन्फ़िगरेशन (जूमला बैकएंड) में, URL पुनर्लेखन को यस में सेट करने का प्रयास करें । इस तो काम नहीं करता है कदम को पढ़ने के 1 , 2 और 5 के इस पेज पर अपाचे अनुभाग , और फिर कोशिश करें।


टेस्ट 4:

अपने टेम्पलेट के index.php फ़ाइल के शीर्ष पर , निम्न जोड़ें

<?php
    $this->baseurl = JUri::base();
?>

नमस्कार, आपके जवाब के लिए धन्यवाद। मैंने live_siteअपने url के लिए कॉन्फ़िगरेशन .php फ़ाइल में चर को बदल दिया (कुछ भी नहीं बदला)। यहाँ परिणाम हैं: नियम 1: my-url.com नियम 2: /index.php नियम 3: / नियम 4: /index.php
थीक

@Therk - ठीक है, और आपके वैश्विक कॉन्फ़िगरेशन में, क्या आपके पास URL पुनर्लेखन बंद है?
20

@Therk - मेरे उत्तर में टेस्ट 2 देखें
Lodder

आपका मतलब mod_rewrite है? यह जूमला कॉन्फ़िगरेशन में बंद है।
थेर्क

टेस्ट 2: echo JUri::base()" myurl.com " echo JUri::base(true)लौटाता है और कुछ भी नहीं लौटाता है
21

8

$this->baseurl;एक शॉर्टकट एक टेम्पलेट के अंदर से इस्तेमाल किया जा रहा है, इसके बजाय बुलाने की है JURI:base();विधि, जूरी वर्ग की। यह कोर का हिस्सा है और आप इसे पा सकते हैं/libraries/joomla/environment/uri.php (~line 218).

यदि आप विधि को देखते हैं, तो आप देखेंगे कि यह कॉन्फ़िगरेशन फ़ाइल में जांचता है कि क्या $live_urlचर परिभाषित किया गया है। यदि हाँ तो यह इस URL को वापस कर देगा, अन्यथा यह कई अन्य जाँचों से गुजरेगा और आपका वास्तविक आधार URI लौटाएगा।

अधिकांश शायद आप live_url चर में परिभाषित अपने configuration.phpभी शामिल index.phpअंत में। वहां देखें ...

एक और संभावना यह है कि आपके वर्तमान टेम्पलेट / टेम्पलेट सिस्टम ने कहीं न कहीं $this->baseurlसंपत्ति को परिभाषित किया है। आप $this->baseurlअपने टेम्पलेट के index.phpफ़ाइल के शीर्ष पर इसे फिर से परिभाषित करके अपने टेम्पलेट के अंदर आसानी से ओवरराइड कर सकते हैं , जैसे:$this->baseurl = JURI::base();

*अपडेट करें:

  • मैंने उल्लेख किया कि आप विधि कहां से प्राप्त कर सकते हैं, लेकिन इसका मतलब यह नहीं है कि आपको वहां जाना चाहिए और कोर में कोई संशोधन करना चाहिए। वह केवल सूचनात्मक उद्देश्यों के लिए था।

अद्यतन 2 - भविष्य के संदर्भों के लिए

इस पोस्ट में दी गई जानकारी को पूरा करने के लिए, JURI::base($pathonly boolean)एक तर्क लेता है, $pathonlyजो एक बूलियन डेटा प्रकार है - falseडिफ़ॉल्ट है।

इसके साथ $pathonly = true, यह साइट के लिए केवल रास्ता लौटाएगा।

उदाहरण:

<?php echo JURI::base(); ?> Would echo something like: http:://localhost/joomla25/
<?php echo JURI::base(true); ?> Would echo: /joomla25

ध्यान दें कि जब $ pathonly = true , URI पथ के अंत में ट्रेलिंग स्लैश ommited है।


आपके उत्तर के लिए धन्यवाद, मुझे विधि मिल गई। क्या मुझे वहां कुछ भी बदलने से बचना चाहिए? कॉन्फ़िगरेशन live_site.php फ़ाइल में मैंने चर को अपने url के रूप में परिभाषित किया और इससे अधिक कुछ नहीं (मैंने index.php को कहीं नहीं जोड़ा)।
१०

हां कोर में बदलने के लिए कुछ नहीं। एकमात्र अपवाद यह है कि अगर किसी और ने पहले ही वहां कुछ किया है ... जिसके कारण फ़ंक्शन को इस तरह से काम करना पड़ा है। क्या आपको अपने विन्यास में live_url वैरिएबल को परिभाषित करने की आवश्यकता है? आमतौर पर जरूरत नहीं है।
FFrewin

ठीक है :) इससे कोई फर्क नहीं पड़ता कि मैं live_url वैरिएबल को परिभाषित करता हूं। यह कुछ भी नहीं बदलता है ... index.php हमेशा ऊपर आ रहा है। मैं कोड का उपयोग करके समस्या को ठीक कर सकता हूं, लेकिन यह बहुत हैकिया और बेहद बदसूरत होगा और मैं ऐसा नहीं करना चाहता। इसलिए मैं बेसुरल को संशोधित करना चाहता हूं कि index.php इसमें नहीं है।
थेरेक

एक वैकल्पिक और त्वरित तरीका यह है कि आप अपने टेम्पलेट के अंदर अपने कस्टम बेसल चर को परिभाषित करें और इसका उपयोग करें। $ mybaseurl = JURI: आधार (सच); गूंज $ mybaseurl;
FFrewin

और एक और चीज़ जो आप देख सकते हैं, वह यह है कि यदि आपके टेम्प्लेट को बदलने से $ इस-> बेसुरल पर कोई प्रभाव पड़ता है।
FFrewin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.