Dapatkan URL Joomla saat ini

25

Kode berikut berfungsi di Joomla 1.6, tetapi memunculkan kesalahan Standar Ketat di 3.x:

Standar Ketat: Hanya variabel yang harus ditetapkan oleh referensi

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

    <?php echo $absolute_url; ?>

Bagaimana saya bisa mendapatkan kode untuk bekerja tanpa kesalahan di Joomla 3.x?

RustyJoomla
sumber
Btw. tidak tergantung pada versi Joomla tetapi oleh versi PHP. Menetapkan variabel dengan referensi sudah ditinggalkan dalam PHP
turson
3
Hanya catatan untuk siapa saja yang mencari jawaban untuk ini, untuk mendapatkan URL LENGKAP , jangan gunakan JUri::current()karena tidak akan mengembalikan parameter kueri. Cukup gunakan apa yang dijelaskan dalam jawaban yang diterima di bawah ini: joomla.stackexchange.com/a/4295/168
Lodder
Terbaik untuk melihat api doc api.joomla.org/cms-3/classes/Joomla.CMS.Uri.Uri.html
Anant

Jawaban:

36

MEMPERBARUI

Jawaban untuk pertanyaan utama adalah: JFactory :: getUri () sudah usang, gunakan JUri langsung seperti ini:

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

// or simpler:

echo JUri::getInstance();
?>

The Standar Ketat kesalahan adalah karena &sebelum JFactory::getURI();. Anda dapat menemukan informasi lebih lanjut tentang itu di bawah ini.


JAWABAN ASLI

Hapus &

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

<?php echo $absolute_url; ?>

Dengan PHP5 newoperator secara otomatis mengembalikan referensi, sehingga tanda '&' tidak diperlukan lagi.

Dari manual PHP resmi:

Pada PHP 5, operator baru mengembalikan referensi secara otomatis, jadi menetapkan hasil baru dengan referensi menghasilkan pesan E_DEPRECATED di PHP 5.3 dan yang lebih baru, dan pesan E_STRICT di versi sebelumnya.

sumber: http://php.net/manual/en/language.operators.assignment.php

fruppel
sumber
lihat jawaban saya di sini-> stackoverflow.com/questions/23702983/…
ezcodr
5

UPDATE: JUri sekarang juga sudah usang. Cara yang benar sekarang adalah sebagai berikut:

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

Pesan lama yang sekarang juga sudah usang:

JFactory::getURI();sudah ditinggalkan. Metode yang benar untuk mendapatkan URL saat ini adalah:

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

Mengandalkan toStringmetode untuk mendapatkan URL saat ini salah. The toStringMetode ini tidak dimaksudkan untuk itu. Berikut ini adalah pendekatan bukti yang lebih baik, lebih bersih, dan akan datang untuk mengambil URL saat ini:

$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;

Perhatikan bahwa getFragmentmetode ini harus mengembalikan bagian setelah tanda angka, tetapi tampaknya ada bug inti yang mencegahnya melakukan hal itu.

itoctopus
sumber
Ini salah. Ini akan ditampilkan index.php&option=com_foo&view=bar. Seharusnya ?setelahindex.php
Lodder
2
Ini benar-benar sah untuk digunakan toString. Ini adalah metode umum dan banyak digunakan oleh kelas JUri sendiri. Bahkan komentar metode mengatakan "Mengembalikan string uri penuh.". Menggunakan JFactory :: getUri (); sudah usang dan pasti "lebih salah".
fruppel