¿Dónde se define $ this-> baseurl en joomla?

14

Primero hice esta pregunta en stackoverflow.com (pregunta aquí ). En los comentarios puedes leer que sería mejor si hago esa pregunta aquí.

En mi sitio web de joomla estoy usando echo $this->baseurl;pero devuelve la url que contiene "/index.php". Quiero cambiar esto para eliminar "/index.php" de baseurl. Pero no puedo encontrar la línea de definición de $this->baseurl;.

Encontré este hilo pero se basa en la plantilla del propietario de la pregunta y en mi plantilla no hay algo como esto.

Sugerencias muy apreciadas :)

Therk
fuente

Respuestas:

14

$this->baseurl;es básicamente el atajo para JUri::base(). Obtiene la URL que ha especificado como live_sitevariable en su archivo configuration.php . Si esto no tiene valor, usará algo de magia PHP basada en algunas variables.

Entonces, hagamos algunas pruebas. Por favor informe los resultados:

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

Prueba 2:

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

Prueba 3:

En la Configuración global (back-end de Joomla), intente configurar la reescritura de URL en . Si esto no funciona, lea los Pasos 1 , 2 y 5 de la sección de Apache en esta página , e intente nuevamente.


Prueba 4:

En la parte superior del archivo index.php de su plantilla , agregue lo siguiente

<?php
    $this->baseurl = JUri::base();
?>
Lodder
fuente
Hola, gracias por su respuesta. Cambié la live_sitevariable en el archivo configuration.php a mi url (nada cambió). Estos son los resultados: Regla 1: my-url.com Regla 2: /index.php Regla 3: / Regla 4: /index.php
Therk
@Therk - ok, y en su Configuración Global, ¿tiene la reescritura de URL activada o desactivada?
Lodder
@Therk - ver prueba 2 en mi respuesta
Lodder
te refieres a mod_rewrite? Esto está desactivado en la configuración de Joomla.
Therk
Prueba 2: echo JUri::base()devuelve " myurl.com " y echo JUri::base(true)no devuelve nada
Therk
8

El $this->baseurl;es un acceso directo para ser usado desde dentro de una plantilla, en lugar de llamar al JURI:base();método, de la clase JURI. Es parte del núcleo y puede encontrarlo en/libraries/joomla/environment/uri.php (~line 218).

Si observa el método, verá que verifica en el archivo de configuración para ver si la $live_urlvariable está definida. En caso afirmativo, devolverá esta URL, de lo contrario pasará por una serie de otras verificaciones y devolverá su URI base real.

Lo más probable es que tenga la variable live_url definida en su configuration.phpque incluye index.phpal final. Mira allí ...

Otra posibilidad es que su plantilla / sistema de plantillas actual haya definido en alguna parte la $this->baseurlpropiedad. Puede anular fácilmente el $this->baseurlinterior de su plantilla redefiniéndola nuevamente en la parte superior del index.phparchivo de su plantilla, como:$this->baseurl = JURI::base();

*Actualizar:

  • Mencioné dónde puede encontrar el método, pero esto no significa que deba ir allí y realizar modificaciones en el núcleo. Eso fue solo con fines informativos.

Actualización 2 - para futuras referencias

Para completar la información dada en esta publicación, se JURI::base($pathonly boolean)toma un argumento, el $pathonlycual es un tipo de datos booleano : falsees el valor predeterminado.

Con $pathonly = true, solo devolverá la ruta al sitio.

Ejemplos:

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

Tenga en cuenta que cuando $ pathonly = true , se omite la barra diagonal final al final de la ruta URI.

FFrewin
fuente
Gracias por su respuesta, encontré el método. ¿Debo evitar cambiar algo allí? En el archivo configuration.php definí la variable live_sitecomo mi url y nada más (no agregué index.php en alguna parte).
Therk
Sí, nada que cambiar en el núcleo. La única excepción es si alguien más ya ha hecho algo allí anteriormente ... lo que ha causado que la función funcione de esta manera. ¿Realmente necesitas definir la variable live_url en tu configuración? Por lo general, no es necesario.
FFrewin
Bien :) No importa si defino la variable live_url. No cambia nada ... El index.php siempre aparece. Podría solucionar el problema usando código, pero esto sería muy hacky y extremadamente feo y no quiero hacer esto. Así que quiero modificar baseurl para que index.php no esté en él.
Therk
Una forma alternativa y rápida es definir su variable baseurl personalizada dentro de su plantilla y usarla. $ mybaseurl = JURI: base (verdadero); echo $ mybaseurl;
FFrewin
Y una cosa más que puede verificar es si cambiar su plantilla tiene algún efecto en $ this-> baseurl.
FFrewin