Di mana $ this-> baseurl didefinisikan dalam joomla?

14

Saya menanyakan pertanyaan ini di stackoverflow.com terlebih dahulu (pertanyaan di sini ). Dalam komentar Anda dapat membaca bahwa akan lebih baik jika saya mengajukan pertanyaan itu di sini.

Di situs web joomla saya, saya menggunakan echo $this->baseurl;tetapi mengembalikan url yang mengandung "/index.php". Saya ingin mengubah ini untuk menghapus "/index.php" dari baseurl. Tetapi saya tidak dapat menemukan garis definisi $this->baseurl;.

Saya menemukan utas ini tetapi ini didasarkan pada templat pemilik pertanyaan dan dalam templat saya tidak ada yang seperti ini.

Saran sangat dihargai :)

Therk
sumber

Jawaban:

14

$this->baseurl;pada dasarnya adalah jalan pintas untuk JUri::base(). Itu mendapatkan URL yang Anda tentukan sebagai live_sitevariabel dalam file configuration.php Anda . Jika ini tidak memiliki nilai, maka ia akan menggunakan sihir PHP berdasarkan beberapa variabel.

Jadi, mari kita jalankan beberapa tes. Silakan laporkan hasilnya kembali:

Tes 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';
?>

Tes 2:

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

Tes 3:

Di Konfigurasi Global (backend Joomla), coba atur penulisan ulang URL ke Ya . Jika ini tidak berhasil, bacalah Langkah 1 , 2 dan 5 dari bagian Apache di halaman ini , dan coba lagi.


Tes 4:

Di bagian atas file index.php template Anda , tambahkan berikut ini

<?php
    $this->baseurl = JUri::base();
?>
Lodder
sumber
Hai, terima kasih atas jawaban Anda. Saya mengubah live_sitevariabel dalam file configuration.php ke url saya (tidak ada yang berubah). Berikut hasilnya: Aturan 1: my-url.com Aturan 2: /index.php Aturan 3: / Aturan 4: /index.php
Therk
@Therk - ok, dan dalam Konfigurasi Global Anda, apakah Anda memiliki penulisan ulang URL yang dimatikan?
Lodder
@Therk - lihat test 2 dalam jawaban saya
Lodder
Anda maksud mod_rewrite? Ini dimatikan dalam konfigurasi Joomla.
Therk
Tes 2: echo JUri::base()mengembalikan " myurl.com " dan echo JUri::base(true)tidak mengembalikan apa pun
Therk
8

Ini $this->baseurl;adalah jalan pintas yang akan digunakan dari dalam templat, alih-alih memanggil JURI:base();metode, dari kelas JURI. Itu adalah bagian dari inti dan Anda dapat menemukannya di/libraries/joomla/environment/uri.php (~line 218).

Jika Anda melihat metode ini, Anda akan melihatnya memeriksa dalam file konfigurasi untuk melihat apakah $live_urlvariabelnya ditentukan. Jika ya itu akan mengembalikan URL ini, jika tidak maka akan melalui sejumlah pemeriksaan lain dan mengembalikan URI basis Anda yang sebenarnya.

Kemungkinan besar Anda memiliki variabel live_url yang ditentukan di Anda configuration.phpyang menyertakan index.phpdi bagian akhir. Periksa di sana ...

Kemungkinan lain adalah bahwa sistem templat / templat Anda saat ini telah menentukan $this->baseurlproperti di suatu tempat . Anda dapat dengan mudah menimpa bagian $this->baseurldalam template Anda dengan mendefinisikannya kembali di bagian atas index.phpfile template Anda, seperti:$this->baseurl = JURI::base();

*Memperbarui:

  • Saya sebutkan di mana Anda dapat menemukan metode, tetapi ini tidak berarti bahwa Anda harus pergi ke sana dan melakukan modifikasi pada intinya. Itu hanya untuk tujuan informasi.

Perbarui 2 - untuk referensi di masa mendatang

Untuk melengkapi informasi yang diberikan dalam posting ini, JURI::base($pathonly boolean)argumen yang diambil, $pathonlyyang merupakan tipe data boolean - falseadalah default.

Dengan $pathonly = true, itu hanya akan mengembalikan jalur ke situs.

Contoh:

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

Perhatikan bahwa ketika $ pathonly = true , garis miring di akhir jalur URI dihentikan.

FFrewin
sumber
Terima kasih atas jawaban Anda, saya menemukan metodenya. Haruskah saya menghindari mengubah apa pun di sana? Dalam file configuration.php saya mendefinisikan variabel live_sitesebagai url saya dan tidak lebih (saya tidak menambahkan index.php di suatu tempat).
Therk
Ya tidak ada yang berubah pada intinya. Satu-satunya pengecualian adalah jika orang lain telah melakukan sesuatu di sana sebelumnya ... yang menyebabkan fungsinya bekerja seperti ini. Apakah Anda benar-benar perlu mendefinisikan variabel live_url di konfigurasi Anda? Biasanya tidak diperlukan.
FFrewin
Oke :) Tidak masalah jika saya mendefinisikan variabel live_url. Itu tidak mengubah apa pun ... Index.php selalu muncul. Saya dapat memperbaiki masalah menggunakan kode tetapi ini akan menjadi sangat hacky dan sangat jelek dan saya tidak ingin melakukan ini. Jadi saya ingin memodifikasi baseurl yang tidak ada di index.php.
Therk
Cara alternatif dan cepat adalah dengan menentukan variabel baseurl kustom Anda di dalam template Anda dan gunakan ini. $ mybaseurl = JURI: base (true); echo $ mybaseurl;
FFrewin
Dan satu hal lagi yang bisa Anda periksa adalah apakah mengubah templat Anda memiliki efek pada $ this-> baseurl.
FFrewin