Gdzie jest zdefiniowane $ to-> baseurl w Joomla?


14

Najpierw zadałem to pytanie na stackoverflow.com (pytanie tutaj ). W komentarzach można przeczytać, że lepiej byłoby zadać to pytanie tutaj.

Na mojej stronie joomla używam, echo $this->baseurl;ale zwraca adres URL zawierający „/index.php”. Chcę to zmienić, aby usunąć plik „/index.php” z bazy danych baseurl. Ale nie mogę znaleźć linii definicji $this->baseurl;.

Znalazłem ten wątek, ale jest on oparty na szablonie właściciela pytania, aw moim szablonie nie ma czegoś takiego.

Sugestie bardzo mile widziane :)

Odpowiedzi:


14

$this->baseurl;jest w zasadzie skrótem od JUri::base(). Pobiera adres URL podany jako live_sitezmienna w pliku configuration.php . Jeśli nie ma to żadnej wartości, użyje magii PHP opartej na kilku zmiennych.

Więc uruchommy kilka testów. Zgłoś wyniki z powrotem:

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

Test 2:

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

Test 3:

W konfiguracji globalnej (backend Joomla) spróbuj ustawić przepisywanie adresów URL na Tak . Jeśli to nie poskutkuje, to czytać kroki 1 , 2 i 5 z sekcji Apache na tej stronie , a następnie spróbuj ponownie.


Test 4:

U góry pliku index.php szablonu dodaj następujące elementy

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

Cześć, dzięki za odpowiedź. Zmieniłem live_sitezmienną w pliku configuration.php na mój adres URL (nic się nie zmieniło). Oto wyniki: Zasada 1: my-url.com Zasada 2: /index.php Zasada 3: / Zasada 4: /index.php
Therk

@Therk - ok, a czy w globalnej konfiguracji masz włączone ponowne zapisywanie adresów URL ?
Lodder

@Therk - patrz test 2 w mojej odpowiedzi
Lodder

masz na myśli mod_rewrite? Jest to wyłączone w konfiguracji Joomla.
Therk

Test 2: echo JUri::base()zwraca „ myurl.com ” i echo JUri::base(true)nic nie zwraca
Therk

8

$this->baseurl;Jest skrót do wykorzystania od wewnątrz szablonu, zamiast wywoływania JURI:base();metody, z JURI klasie. Jest częścią rdzenia i można go znaleźć na stronie/libraries/joomla/environment/uri.php (~line 218).

Jeśli spojrzysz na metodę, zobaczysz, że sprawdza ona w pliku konfiguracyjnym, aby sprawdzić, czy $live_urlzmienna jest zdefiniowana. Jeśli tak, zwróci ten adres URL, w przeciwnym razie przejdzie szereg innych kontroli i zwróci rzeczywisty podstawowy identyfikator URI.

Najprawdopodobniej masz zdefiniowaną zmienną live_url,configuration.php która zawiera index.phpna końcu. Sprawdź tam ...

Inną możliwością jest to, że twój obecny szablon / system szablonów gdzieś zdefiniował $this->baseurlwłaściwość. Możesz łatwo zastąpić $this->baseurlwnętrze szablonu, ponownie definiując go u góry index.phppliku szablonu, na przykład:$this->baseurl = JURI::base();

*Aktualizacja:

  • Wspomniałem, gdzie można znaleźć metodę, ale to nie znaczy, że powinieneś tam iść i dokonać modyfikacji rdzenia. To było wyłącznie w celach informacyjnych.

Aktualizacja 2 - do przyszłych odniesień

Aby uzupełnić informacje podane w tym poście, JURI::base($pathonly boolean)przyjmuje jeden argument, $pathonlyktóry jest typem logicznym - falsejest domyślny.

Dzięki $pathonly = truezwróci tylko ścieżkę do strony.

Przykłady:

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

Zauważ, że gdy $ pathonly = true , ukośnik końcowy na końcu ścieżki URI jest pomijany.


Dzięki za odpowiedź, znalazłem metodę. Czy powinienem unikać wprowadzania zmian? W pliku configuration.php zdefiniowałem zmienną live_sitejako mój adres URL i nic więcej (gdzieś nie dodałem index.php).
Therk

Tak, nic do zmiany w rdzeniu. Jedynym wyjątkiem jest sytuacja, gdy ktoś już wcześniej coś tam zrobił ... co spowodowało, że funkcja działa w ten sposób. Czy naprawdę musisz zdefiniować zmienną live_url w swojej konfiguracji? Zwykle nie jest potrzebny.
FFrewin

Okej :) Nie ma znaczenia, czy zdefiniuję zmienną live_url. Nic to nie zmienia ... Indeks.php zawsze się pojawia. Mógłbym rozwiązać problem za pomocą kodu, ale byłoby to bardzo hacking i bardzo brzydkie i nie chcę tego robić. Chcę więc zmodyfikować baseurl, aby nie zawierał pliku index.php.
Therk

Alternatywnym i szybkim sposobem jest zdefiniowanie niestandardowej zmiennej baseurl w szablonie i użycie jej. $ mybaseurl = JURI: base (true); echo $ mybaseurl;
FFrewin

I jeszcze jedno, co możesz sprawdzić, to czy zmiana szablonu ma jakikolwiek wpływ na $ this-> baseurl.
FFrewin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.