$ this-> baseurl ถูกกำหนดใน joomla ที่ไหน?


14

ฉันถามคำถามนี้ใน stackoverflow.com ก่อน (คำถามที่นี่ ) ในความคิดเห็นที่คุณสามารถอ่านได้จะดีกว่าถ้าฉันถามคำถามที่นี่

บนเว็บไซต์ joomla ของฉันที่ใช้อยู่echo $this->baseurl;แต่จะคืนค่า URL ที่มี "/index.php" ฉันต้องการเปลี่ยนสิ่งนี้เพื่อลบ "/index.php" จาก baseurl $this->baseurl;แต่ฉันไม่สามารถหาสายนิยามของ

ฉันพบกระทู้นี้แต่สิ่งนี้อิงจากเทมเพลตของเจ้าของคำถามและในเทมเพลตของฉันไม่มีอะไรเช่นนี้

คำแนะนำชื่นชมมาก :)

คำตอบ:


14

$this->baseurl;JUri::base()เป็นพื้นทางลัดสำหรับ ได้รับ URL ที่คุณระบุเป็นlive_siteตัวแปรในไฟล์configuration.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:

ในการกำหนดค่าทั่วโลก (Joomla แบ็กเอนด์) ลองตั้งค่าURL เขียนใหม่จะใช่ หากวิธีนี้ใช้ไม่ได้ให้อ่านขั้นตอนที่1 , 2และ5ของApache ในหน้านี้แล้วลองอีกครั้ง


ทดสอบ 4:

ที่ด้านบนของไฟล์index.phpของแม่แบบของคุณเพิ่มต่อไปนี้

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

สวัสดีขอบคุณสำหรับคำตอบของคุณ ฉันเปลี่ยนlive_siteตัวแปรในไฟล์ configuration.php เป็น url ของฉัน (ไม่มีอะไรเปลี่ยนแปลง) นี่คือผลลัพธ์: กฎข้อที่ 1: my-url.com กฎข้อที่ 2: /index.php กฎข้อที่ 3: / กฎข้อที่ 4: /index.php
Therk

@Therk - ok และใน Global Configuration คุณได้ปิดการเขียน URL ใหม่หรือไม่?
Lodder

@Therk - ดูทดสอบ 2 ในคำตอบของฉัน
Lodder

คุณหมายถึง mod_rewrite? สิ่งนี้ถูกปิดในการกำหนดค่า Joomla
Therk

การทดสอบ 2: echo JUri::base()ส่งคืน " myurl.com " และecho JUri::base(true)ไม่ส่งคืนสิ่งใดเลย
Therk

8

$this->baseurl;เป็นทางลัดที่จะใช้จากภายในแม่แบบแทนการเรียกJURI:base();วิธีการของชนชั้น JURI มันเป็นส่วนหนึ่งของแกนกลางและคุณสามารถค้นหาได้ที่/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 จะถูกใช้


ขอบคุณสำหรับคำตอบของคุณฉันพบวิธี ฉันควรหลีกเลี่ยงการเปลี่ยนแปลงอะไรที่นั่นไหม? ในไฟล์ configuration.php ฉันกำหนดตัวแปรlive_siteเป็น url และไม่มีอะไรเพิ่มเติม (ฉันไม่ได้เพิ่ม index.php ไว้ที่อื่น)
Therk

ใช่ไม่มีอะไรเปลี่ยนแปลงในแกนกลาง ข้อยกเว้นเพียงอย่างเดียวคือถ้ามีคนอื่นทำบางสิ่งบางอย่างไปแล้วก่อนหน้านี้ ... ซึ่งทำให้ฟังก์ชันนี้ทำงานได้ คุณจำเป็นต้องกำหนดตัวแปร live_url ในการกำหนดค่าของคุณหรือไม่? มักไม่จำเป็น
FFrewin

โอเค :) มันไม่สำคัญว่าฉันจะกำหนดตัวแปร live_url มันไม่เปลี่ยนแปลงอะไรเลย ... index.php กำลังจะเกิดขึ้นเสมอ ฉันสามารถแก้ไขปัญหาด้วยการใช้รหัส แต่มันจะแฮ็กและน่าเกลียดมากและฉันไม่ต้องการทำสิ่งนี้ ดังนั้นฉันต้องการแก้ไข baseurl ที่ index.php ไม่ได้อยู่ในนั้น
Therk

ทางเลือกและวิธีที่รวดเร็วคือการกำหนดตัวแปร baseurl ของคุณเองภายในแม่แบบ $ mybaseurl = JURI: base (จริง); echo $ mybaseurl;
FFrewin

และอีกสิ่งหนึ่งที่คุณสามารถตรวจสอบได้คือการเปลี่ยนแม่แบบของคุณจะมีผลกับ $ this-> baseurl หรือไม่
FFrewin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.