Dove è $ this-> baseurl definito in joomla?


14

Ho posto prima questa domanda su stackoverflow.com (domanda qui ). Nei commenti puoi leggere che sarebbe meglio se faccio questa domanda qui.

Sul mio sito Web joomla sto usando echo $this->baseurl;ma restituisce l'URL contenente "/index.php". Voglio cambiarlo per rimuovere "/index.php" da baseurl. Ma non riesco a trovare la linea di definizione di $this->baseurl;.

Ho trovato questo thread ma questo si basa sul modello del proprietario della domanda e nel mio modello non esiste qualcosa del genere.

Suggerimenti molto apprezzati :)

Risposte:


14

$this->baseurl;è fondamentalmente la scorciatoia per JUri::base(). Ottiene l'URL che hai specificato come live_sitevariabile nel tuo file configuration.php . Se questo non ha alcun valore, utilizzerà una magia PHP basata su alcune variabili.

Quindi, eseguiamo alcuni test. Si prega di segnalare i risultati indietro:

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:

Nella configurazione globale (back-end Joomla), prova a impostare la riscrittura dell'URL su . Se il problema persiste, leggi i passaggi 1 , 2 e 5 della sezione Apache in questa pagina e riprova.


Test 4:

Nella parte superiore del file index.php del modello , aggiungi quanto segue

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

Ciao, grazie per la tua risposta. Ho cambiato la live_sitevariabile nel file configuration.php nel mio url (nulla è cambiato). Ecco i risultati: Regola 1: my-url.com Regola 2: /index.php Regola 3: / Regola 4: /index.php
Therk,

@Therk - ok, e nella tua configurazione globale hai la riscrittura degli URL attivata o disattivata?
Lodder

@Therk - vedi test 2 nella mia risposta
Lodder

intendi mod_rewrite? Questo è disattivato nella configurazione di Joomla.
Therk,

Test 2: echo JUri::base()restituisce " myurl.com " e echo JUri::base(true)non restituisce nulla
Therk,

8

Il $this->baseurl;è una scorciatoia per essere utilizzato all'interno di un modello, invece di chiamare il JURI:base();metodo, della classe JURI. Fa parte del nucleo e puoi trovarlo su/libraries/joomla/environment/uri.php (~line 218).

Se guardi il metodo, vedrai che controlla nel file di configurazione per vedere se la $live_urlvariabile è definita. Se sì, restituirà questo URL, altrimenti passerà attraverso una serie di altri controlli e restituirà l'URI di base effettivo.

Molto probabilmente hai la variabile live_url definita nella tua configuration.phpche include il index.phpalla fine. Controlla lì ...

Un'altra possibilità è che l'attuale sistema modello / modello abbia da qualche parte definito la $this->baseurlproprietà. Puoi facilmente sostituire l' $this->baseurlinterno del modello ridefinendolo nuovamente nella parte superiore del index.phpfile del modello, ad esempio:$this->baseurl = JURI::base();

*Aggiornare:

  • Ho detto dove puoi trovare il metodo, ma questo non significa che dovresti andare lì e fare qualsiasi modifica al core. Questo era solo a scopo informativo.

Aggiornamento 2 - per riferimenti futuri

Per completare le informazioni fornite in questo post, JURI::base($pathonly boolean)accetta un argomento, $pathonlyche è un tipo di dati booleano - falseè l'impostazione predefinita.

Con $pathonly = true, restituirà solo il percorso del sito.

Esempi:

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

Si noti che quando $ pathonly = true , la barra finale alla fine del percorso URI viene selezionata.


Grazie per la tua risposta, ho trovato il metodo. Devo evitare di cambiare qualcosa lì? Nel file configuration.php ho definito la variabile live_sitecome il mio url e niente di più (non ho aggiunto index.php da qualche parte).
Therk,

Sì, nulla da cambiare nel nucleo. L'unica eccezione è se qualcun altro ha già fatto qualcosa lì in precedenza ... che ha causato la funzione in questo modo. Hai davvero bisogno di definire la variabile live_url nella tua configurazione? Di solito non è necessario.
FFrewin

Ok :) Non importa se definisco la variabile live_url. Non cambia nulla ... Index.php viene sempre fuori. Potrei risolvere il problema usando il codice ma questo sarebbe molto confuso ed estremamente brutto e non voglio farlo. Quindi voglio modificare baseurl che index.php non è in esso.
Therk,

Un modo alternativo e rapido è definire la variabile baseurl personalizzata all'interno del modello e utilizzarla. $ mybaseurl = JURI: base (true); echo $ mybaseurl;
FFrewin

E un'altra cosa che potresti controllare è se cambiare il tuo modello ha qualche effetto su $ this-> baseurl.
FFrewin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.