Où est $ this-> baseurl défini dans joomla?

14

J'ai d'abord posé cette question sur stackoverflow.com (question ici ). Dans les commentaires, vous pouvez lire qu'il serait préférable que je pose cette question ici.

Sur mon site Web joomla que j'utilise, echo $this->baseurl;mais il renvoie l'url contenant "/index.php". Je veux changer cela pour supprimer "/index.php" de baseurl. Mais je ne trouve pas la ligne de définition de $this->baseurl;.

J'ai trouvé ce fil mais il est basé sur le modèle du propriétaire de la question et dans mon modèle il n'y a pas quelque chose comme ça.

Suggestions très appréciées :)

Therk
la source

Réponses:

14

$this->baseurl;est fondamentalement le raccourci pour JUri::base(). Il obtient l'URL que vous avez spécifiée comme live_sitevariable dans votre fichier configuration.php . Si cela n'a aucune valeur, il utilisera de la magie PHP basée sur quelques variables.

Alors, exécutons quelques tests. Veuillez rapporter les résultats:

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:

Dans la configuration globale (backend Joomla), essayez de définir la réécriture d'URL sur Oui . Si cela ne fonctionne pas, lisez les étapes 1 , 2 et 5 de la section Apache de cette page et réessayez.


Test 4:

En haut du fichier index.php de votre modèle , ajoutez ce qui suit

<?php
    $this->baseurl = JUri::base();
?>
Lodder
la source
Salut, merci pour votre réponse. J'ai changé la live_sitevariable du fichier configuration.php en mon URL (rien n'a changé). Voici les résultats: Règle 1: my-url.com Règle 2: index.php Règle 3: / Règle 4: index.php
Therk
@Therk - ok, et dans votre configuration globale, la réécriture d'URL est-elle désactivée?
Lodder
@Therk - voir test 2 dans ma réponse
Lodder
tu veux dire mod_rewrite? Ceci est désactivé dans la configuration Joomla.
Therk
Test 2: echo JUri::base()retourne " myurl.com " et echo JUri::base(true)ne retourne rien
Therk
8

Le $this->baseurl;est un raccourci à utiliser depuis l'intérieur d'un modèle, au lieu d'appeler la JURI:base();méthode, de la classe JURI. Il fait partie du noyau et vous pouvez le trouver sur/libraries/joomla/environment/uri.php (~line 218).

Si vous regardez la méthode, vous verrez qu'elle vérifie dans le fichier de configuration pour voir si la $live_urlvariable est définie. Si oui, il renverra cette URL, sinon il passera par un certain nombre d'autres vérifications et renverra votre URI de base réel.

Vous avez probablement la variable live_url définie dans votre configuration.phpqui inclut le index.phpà la fin. Vérifiez là ...

Une autre possibilité est que votre modèle / système de modèles actuel ait défini quelque part la $this->baseurlpropriété. Vous pouvez facilement remplacer l' $this->baseurlintérieur de votre modèle en le redéfinissant à nouveau en haut du index.phpfichier de votre modèle, comme:$this->baseurl = JURI::base();

*Mise à jour:

  • J'ai mentionné où vous pouvez trouver la méthode, mais cela ne signifie pas que vous devriez y aller et apporter des modifications au noyau. C'était uniquement à des fins d'information.

Mise à jour 2 - pour de futures références

Pour compléter les informations fournies dans cet article, l' JURI::base($pathonly boolean)argument prend un argument, $pathonlyqui est un type de données booléen - falseest la valeur par défaut.

Avec $pathonly = true, il ne renverra que le chemin d'accès au site.

Exemples:

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

Notez que lorsque $ pathonly = true , la barre oblique de fin à la fin du chemin URI est omise.

FFrewin
la source
Merci pour votre réponse, j'ai trouvé la méthode. Dois-je éviter de changer quoi que ce soit là-bas? Dans le fichier configuration.php, j'ai défini la variable live_sitecomme mon URL et rien de plus (je n'ai pas ajouté index.php quelque part).
Therk
Oui rien à changer dans le noyau. La seule exception est si quelqu'un d'autre a déjà fait quelque chose auparavant ... ce qui a fait fonctionner la fonction de cette façon. Avez-vous vraiment besoin de définir la variable live_url dans votre configuration? N'est généralement pas nécessaire.
FFrewin
D'accord :) Peu importe si je définis la variable live_url. Cela ne change rien ... Le fichier index.php arrive toujours. Je pourrais résoudre le problème en utilisant du code, mais ce serait très hacky et extrêmement laid et je ne veux pas le faire. Je veux donc modifier baseurl pour que le fichier index.php n'y soit pas.
Therk
Une manière alternative et rapide consiste à définir votre variable baseurl personnalisée dans votre modèle et à l'utiliser. $ mybaseurl = JURI: base (vrai); echo $ mybaseurl;
FFrewin
Et une autre chose que vous pouvez vérifier est de savoir si la modification de votre modèle a un effet sur le $ this-> baseurl.
FFrewin