Nhận URL Joomla hiện tại


25

Đoạn mã sau hoạt động trong Joomla 1.6, nhưng nó đưa ra lỗi Strict Standard trong 3.x:

Tiêu chuẩn nghiêm ngặt: Chỉ các biến nên được chỉ định bằng tham chiếu

    //Get the full URL for sharing purposes
    $uri = & JFactory::getURI();
    $absolute_url = $uri->toString();

    <?php echo $absolute_url; ?>

Làm thế nào tôi có thể làm cho mã hoạt động mà không có lỗi trong Joomla 3.x?


Btw. nó không phụ thuộc vào phiên bản Joomla mà là phiên bản PHP. Gán các biến theo tham chiếu không được dùng trong PHP
turson

3
Chỉ cần một lưu ý cho bất kỳ ai tìm kiếm câu trả lời cho điều này, để có được URL ĐẦY ĐỦ , không sử dụng JUri::current()vì nó sẽ không trả về bất kỳ tham số truy vấn nào. Đơn giản chỉ cần sử dụng những gì được mô tả trong câu trả lời được chấp nhận dưới đây: j Joomla.stackexchange.com/a/4295/168
Lodder

Câu trả lời:


36

CẬP NHẬT

Câu trả lời cho câu hỏi chính là: JFactory :: getUri () không được dùng nữa, hãy sử dụng JUri trực tiếp như thế này:

<?php 
$uri = JUri::getInstance(); 
echo $uri->toString();

// or simpler:

echo JUri::getInstance();
?>

Các lỗi Tiêu chuẩn nghiêm ngặt là do &trước đây JFactory::getURI();. Bạn có thể tìm thêm thông tin về điều đó dưới đây.


CÂU TRẢ LỜI

Xóa &

//Get the full URL for sharing purposes
$uri = JFactory::getURI();
$absolute_url = $uri->toString();

<?php echo $absolute_url; ?>

Với PHP5, newtoán tử tự động trả về một tham chiếu, vì vậy '&' không còn cần thiết nữa.

Từ hướng dẫn sử dụng PHP chính thức:

Kể từ PHP 5, toán tử mới tự động trả về một tham chiếu, do đó, gán kết quả mới bằng kết quả tham chiếu trong thông báo E_DEPRECATED trong PHP 5.3 trở lên và thông báo E_STRICT trong các phiên bản trước.

nguồn: http://php.net/manual/en/lingu.operators.assocate.php


xem câu trả lời của tôi ở đây-> stackoverflow.com/questions/23702983/ từ
ezcodr

8

Theo hướng dẫn Joomla , bạn có thể nhận URL hiện tại bằng chức năng này:

JUri::current();

4
JUri :: current () trả về URI yêu cầu hiện tại mà không cần các phần truy vấn hoặc đoạn . Ví dụ: nếu bạn truy cập URL sau: localhost / j Joomla3 / index.php / thành phần / người dùng /? View = nhắc JUri :: current () sẽ trả về: localhost / j Joomla3 / index.php / thành phần / người dùng
fruppel

5

CẬP NHẬT: JUri bây giờ cũng không dùng nữa. Cách chính xác bây giờ là như sau:

$uri = Joomla\CMS\Uri\Uri::getInstance();
echo  $uri->toString();

Tin nhắn cũ mà bây giờ cũng không dùng nữa:

JFactory::getURI();bị phản đối Phương pháp đúng để lấy URL hiện tại là:

$uri = JUri::getInstance();
echo  $uri->toString();

0

Dựa vào toStringphương pháp để lấy URL hiện tại là sai. Các toStringphương pháp không có nghĩa là cho điều đó. Sau đây là cách tiếp cận bằng chứng tốt hơn, sạch hơn và trong tương lai để truy xuất URL hiện tại:

$objJURI = JFactory::getURI();
$strQuery = '';
if (!empty($objJURI->getQuery()))
    $strQuery = '?'.$objJURI->getQuery();
$strFragment = '';
if ((!empty($objJURI->getFragment())) && ($objJURI->getFragment() != '#'))
    $strFragment = $objJURI->getFragment();
$currentURL = $objJURI->current().$strQuery.$strFragment;

Lưu ý rằng getFragmentphương thức sẽ trả về phần sau dấu hiệu số, nhưng dường như có một lỗi cốt lõi ngăn nó làm điều đó.


Cái này sai. Nó sẽ hiển thị index.php&option=com_foo&view=bar. Nó sẽ là ?sauindex.php
Lodder

2
Nó hoàn toàn hợp pháp để sử dụng toString. Đây là một phương thức công khai và được sử dụng nhiều bởi chính lớp JUri. Ngay cả bình luận phương thức cũng nói "Trả về chuỗi uri đầy đủ.". Sử dụng JFactory :: getUri (); không được chấp nhận và chắc chắn "sai nhiều hơn".
fruppel
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.