$ This-> baseurl được định nghĩa trong j Joomla ở đâu?


14

Tôi đã hỏi câu hỏi này trên stackoverflow.com trước (câu hỏi ở đây ). Trong các bình luận bạn có thể đọc rằng sẽ tốt hơn nếu tôi hỏi câu hỏi đó ở đây.

Trên trang web j Joomla của tôi tôi đang sử dụng echo $this->baseurl;nhưng nó trả về url chứa "/index.php". Tôi muốn thay đổi điều này để xóa "/index.php" khỏi basurl. Nhưng tôi không thể tìm thấy dòng định nghĩa của $this->baseurl;.

Tôi đã tìm thấy chủ đề này nhưng điều này dựa trên mẫu của chủ sở hữu câu hỏi và trong mẫu của tôi không có cái gì đó như thế này.

Gợi ý rất cảm kích :)

Câu trả lời:


14

$this->baseurl;về cơ bản là các phím tắt cho JUri::base(). Nó nhận URL mà bạn đã chỉ định làm live_sitebiến trong tệp configure.php . Nếu cái này không có giá trị, thì nó sẽ sử dụng một số phép thuật PHP dựa trên một vài biến.

Vì vậy, hãy chạy một vài thử nghiệm. Vui lòng báo cáo kết quả lại:

Kiểm tra 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';
?>

Bài kiểm tra 2:

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

Bài kiểm tra 3:

Trong Cấu hình toàn cầu (phụ trợ Joomla), hãy thử đặt lại URL thành . Nếu điều này không hiệu quả thì hãy đọc Bước 1 , 25 của phần Apache trên trang này và thử lại.


Bài kiểm tra 4:

Ở đầu tệp index.php của mẫu của bạn , hãy thêm vào như sau

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

Chào, cảm ơn cho câu trả lời của bạn. Tôi đã thay đổi live_sitebiến trong tệp configure.php thành url của mình (không có gì thay đổi). Dưới đây là kết quả: Quy tắc 1: my-url.com Quy tắc 2: /index.php Quy tắc 3: / Quy tắc 4: /index.php
Therk

@Therk - ok, và trong Cấu hình toàn cầu của bạn, bạn có bật tính năng viết lại URL không?
Lodder

@Therk - xem bài kiểm tra 2 trong câu trả lời của tôi
Lodder

ý bạn là mod_rewrite? Điều này bị tắt trong cấu hình Joomla.
Therk

Bài kiểm tra 2: echo JUri::base()trả về " myurl.com " và echo JUri::base(true)không trả về gì
Therk

8

Đây $this->baseurl;là một phím tắt được sử dụng từ bên trong một mẫu, thay vì gọi JURI:base();phương thức của lớp JURI. Nó là một phần của cốt lõi và bạn có thể tìm thấy nó tại/libraries/joomla/environment/uri.php (~line 218).

Nếu bạn nhìn vào phương thức, bạn sẽ thấy nó kiểm tra trong tệp cấu hình để xem $live_urlbiến đó có được xác định không. Nếu có, nó sẽ trả về URL này, nếu không, nó sẽ trải qua một số kiểm tra khác và trả về URI cơ sở thực tế của bạn.

Rất có thể bạn có biến live_url được xác định trong configuration.phpđó bao gồm index.phpở cuối. Kiểm tra ở đó ...

Một khả năng khác là hệ thống mẫu / mẫu hiện tại của bạn có một nơi nào đó xác định thuộc $this->baseurltính. Bạn có thể dễ dàng ghi đè $this->baseurlbên trong mẫu của mình bằng cách xác định lại mẫu ở đầu index.phptệp của mẫu, như:$this->baseurl = JURI::base();

* Cập nhật:

  • Tôi đã đề cập đến nơi bạn có thể tìm thấy phương thức, nhưng điều này không có nghĩa là bạn nên đến đó và thực hiện bất kỳ sửa đổi nào cho cốt lõi. Điều đó chỉ dành cho mục đích thông tin.

Cập nhật 2 - để tham khảo trong tương lai

Để hoàn thành thông tin được đưa ra trong bài đăng này, tham số JURI::base($pathonly boolean)lấy một đối số, $pathonlyđó là kiểu dữ liệu boolean - falselà mặc định.

Với $pathonly = true, nó sẽ chỉ trả lại đường dẫn đến trang web.

Ví dụ:

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

Lưu ý rằng khi $ pathonly = true , dấu gạch chéo ở cuối đường dẫn URI bị chặn.


Cảm ơn câu trả lời của bạn, tôi tìm thấy phương pháp. Tôi có nên tránh để thay đổi bất cứ điều gì ở đó? Trong tệp configure.php, tôi đã xác định biến live_sitelà url của mình và không có gì nữa (tôi không thêm index.php ở đâu đó).
Therk

Có, không có gì để thay đổi trong cốt lõi. Ngoại lệ duy nhất là nếu người khác đã làm một cái gì đó ở đó trước đây ... điều này đã khiến chức năng hoạt động theo cách này. Bạn có thực sự cần xác định biến live_url trong cấu hình của mình không? Thường là không cần thiết.
FFrewin

Được rồi :) Không vấn đề gì nếu tôi xác định biến live_url. Nó không thay đổi bất cứ điều gì ... Index.php luôn xuất hiện. Tôi có thể khắc phục sự cố bằng cách sử dụng mã nhưng điều này sẽ rất hack và cực kỳ xấu và tôi không muốn làm điều này. Vì vậy, tôi muốn sửa đổi cơ sở rằng index.php không có trong đó.
Therk

Một cách khác và nhanh chóng là xác định biến cơ sở tùy chỉnh của bạn bên trong mẫu của bạn và sử dụng biến này. $ mybaseurl = JURI: cơ sở (đúng); tiếng vang $ mybaseurl;
FFrewin

Và một điều nữa bạn có thể kiểm tra là nếu việc thay đổi mẫu của bạn có ảnh hưởng gì đến $ this-> baseurl.
FFrewin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.