it-mot-dan-vi.com

Nhận URL Joomla hiện tại

Đoạn mã sau hoạt động trong Joomla 1.6, nhưng nó xuất hiện 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ế

    //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?

24
RustyJoomla

[~ # ~] 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();
?>

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


TRẢ LỜI GỐC

Xóa &

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

<?php echo $absolute_url; ?>

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

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

Kể từ PHP 5, toán tử mới tự động trả về một tham chiếu, do đó, việc 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à một 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

36
fruppel

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();
6
Ahmad Balavipour

CẬP NHẬT :JUri hiện cũng không được 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(); không được dùng nữa. Phương pháp đúng để lấy URL hiện tại là:

$uri = JUri::getInstance();
echo  $uri->toString();
5
Søren Beck Jensen

Dựa vào phương thức toString để lấy URL hiện tại là sai. Phương thức toString không dành 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 phương thức getFragment 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 đó.

0
itoctopus