Wo ist $ this-> baseurl in Joomla definiert?

14

Ich habe diese Frage zuerst auf stackoverflow.com gestellt (Frage hier ). In den Kommentaren können Sie lesen, dass es besser wäre, wenn ich diese Frage hier stelle.

Auf meiner Joomla-Website verwende ich, echo $this->baseurl;aber es gibt die URL mit "/index.php" zurück. Ich möchte dies ändern, um "/index.php" von baseurl zu entfernen. Aber ich kann die Definitionslinie von nicht finden $this->baseurl;.

Ich habe diesen Thread gefunden, aber er basiert auf der Vorlage des Fragenbesitzers und in meiner Vorlage gibt es so etwas nicht.

Vorschläge sehr geschätzt :)

Therk
quelle

Antworten:

14

$this->baseurl;ist im Grunde die Abkürzung für JUri::base(). Sie erhält die URL, die Sie als live_siteVariable in Ihrer configuration.php- Datei angegeben haben. Wenn dies keinen Wert hat, wird PHP-Magie basierend auf einigen Variablen verwendet.

Lassen Sie uns also ein paar Tests durchführen. Bitte melden Sie die Ergebnisse zurück:

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:

Versuchen Sie in der globalen Konfiguration (Joomla-Backend), das URL-Neuschreiben auf Ja zu setzen . Wenn dies nicht funktioniert, lesen Sie die Schritte 1 , 2 und 5 des Abschnitts Apache auf dieser Seite und versuchen Sie es erneut.


Test 4:

Fügen Sie oben in der index.php- Datei Ihrer Vorlage Folgendes hinzu

<?php
    $this->baseurl = JUri::base();
?>
Lodder
quelle
Hallo, danke für deine Antwort. Ich habe die live_siteVariable in der Datei configuration.php in meine URL geändert (nichts geändert). Hier sind die Ergebnisse: Regel 1: my-url.com Regel 2: /index.php Regel 3: / Regel 4: /index.php
Therk
@Therk - ok, und haben Sie in Ihrer globalen Konfiguration das Umschreiben von URLs deaktiviert ?
Lodder
@ Therk - siehe Test 2 in meiner Antwort
Lodder
du meinst mod_rewrite? Dies ist in der Joomla-Konfiguration deaktiviert.
Therk
Test 2: echo JUri::base()gibt " myurl.com " zurück und echo JUri::base(true)gibt nichts zurück
Therk
8

Das $this->baseurl;ist eine Abkürzung aus dem Inneren einer Vorlage verwendet werden, anstatt die des Aufrufs JURI:base();Methode der JURI - Klasse. Es ist Teil des Kerns und Sie können es bei finden/libraries/joomla/environment/uri.php (~line 218).

Wenn Sie sich die Methode ansehen, werden Sie feststellen, dass sie in der Konfigurationsdatei überprüft, ob die $live_urlVariable definiert ist. Wenn ja, wird diese URL zurückgegeben, andernfalls werden eine Reihe anderer Überprüfungen durchgeführt und Ihre tatsächliche Basis-URI zurückgegeben.

Wahrscheinlich hast du die live_url Variable in Ihrer definiert configuration.php, die das index.phpam Ende enthält. Überprüfen Sie dort ...

Eine andere Möglichkeit ist, dass Ihr aktuelles Template / Template-System irgendwo das definiert hat $this->baseurl Eigenschaft . Sie können das $this->baseurlInnere Ihrer Vorlage ganz einfach überschreiben, indem Sie es oben in der index.phpDatei Ihrer Vorlage erneut definieren. Beispiel:$this->baseurl = JURI::base();

*Aktualisieren:

  • Ich habe erwähnt, wo Sie die Methode finden können, aber dies bedeutet nicht, dass Sie dorthin gehen und Änderungen am Kern vornehmen sollten. Das war nur zu Informationszwecken.

Update 2 - für zukünftige Referenzen

Um die Informationen in diesem Beitrag zu vervollständigen, JURI::base($pathonly boolean)benötigt das ein Argument, nämlich $pathonlyeinen booleschen Datentyp - falseist die Standardeinstellung.

Mit $pathonly = true wird nur der Pfad zur Site zurückgegeben.

Beispiele:

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

Beachten Sie, dass bei $ pathonly = true der abschließende Schrägstrich am Ende des URI-Pfads weggelassen wird.

FFrewin
quelle
Vielen Dank für Ihre Antwort, ich habe die Methode gefunden. Sollte ich vermeiden, dort etwas zu ändern? In der configuration.php Datei habe ich die Variable live_siteals meine URL definiert und nichts weiter (ich habe index.php nicht irgendwo hinzugefügt).
Therk
Ja nichts am Kern zu ändern. Die einzige Ausnahme ist, wenn bereits jemand anderes dort etwas getan hat ... was dazu geführt hat, dass die Funktion auf diese Weise funktioniert. Müssen Sie die Variable live_url wirklich in Ihrer Konfiguration definieren? Wird normalerweise nicht benötigt.
FFrewin
Okay :) Es ist egal, ob ich die Variable live_url definiere. Es ändert nichts ... Die index.php kommt immer hoch. Ich könnte das Problem mithilfe von Code beheben, aber das wäre sehr kitschig und extrem hässlich, und ich möchte das nicht tun. Also möchte ich baseurl so modifizieren, dass die index.php nicht drin ist.
Therk
Eine alternative und schnelle Möglichkeit besteht darin, Ihre benutzerdefinierte Baseurl-Variable in Ihrer Vorlage zu definieren und diese zu verwenden. $ mybaseurl = JURI: base (true); echo $ mybaseurl;
FFrewin
Sie können auch prüfen, ob das Ändern Ihrer Vorlage Auswirkungen auf das $ this-> baseurl hat.
FFrewin