Где $ this-> baseurl определен в Joomla?

14

Сначала я задал этот вопрос на stackoverflow.com (вопрос здесь ). В комментариях вы можете прочитать, что было бы лучше, если бы я задал этот вопрос здесь.

На моем сайте Joomla я использую, echo $this->baseurl;но он возвращает URL-адрес, содержащий "/index.php". Я хочу изменить это, чтобы удалить "/index.php" из baseurl. Но я не могу найти определение линии $this->baseurl;.

Я нашел эту ветку, но она основана на шаблоне владельца вопроса, и в моем шаблоне такого нет.

Предложения очень ценятся :)

Therk
источник

Ответы:

14

$this->baseurl;в основном ярлык для JUri::base(). Он получает URL, который вы указали в качестве live_siteпеременной в вашем файле configuration.php . Если это не имеет значения, он будет использовать магию PHP, основанную на нескольких переменных.

Итак, давайте проведем несколько тестов. Пожалуйста, сообщите о результатах обратно:

Тест 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';
?>

Тест 2:

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

Тест 3:

В глобальной конфигурации (бэкэнд Joomla) попробуйте установить перезапись URL-адреса на Да . Если это не работает , то прочитайте шаги 1 , 2 и 5 в разделе Apache на этой странице , и повторите попытку.


Тест 4:

Вверху файла index.php вашего шаблона добавьте следующее

<?php
    $this->baseurl = JUri::base();
?>
Лоддер
источник
Привет спасибо за ответ Я изменил live_siteпеременную в файле configuration.php на свой URL (ничего не изменилось). Вот результаты: Правило 1: my-url.com Правило 2: /index.php Правило 3: / Правило 4: /index.php
Терк
@Therk - хорошо, а в вашей Глобальной конфигурации у вас отключена перезапись URL ?
Лоддер
@Therk - см. Тест 2 в моем ответе
Lodder
ты имеешь ввиду mod_rewrite? Это отключено в конфигурации Joomla.
Therk
Тест 2: echo JUri::base()возвращает « myurl.com » и echo JUri::base(true)ничего не возвращает
Therk
8

Это $this->baseurl;ярлык, который будет использоваться внутри шаблона вместо вызова JURI:base();метода класса JURI. Это часть ядра, и вы можете найти его на/libraries/joomla/environment/uri.php (~line 218).

Если вы посмотрите на метод, то увидите, что он проверяет файл конфигурации, чтобы $live_urlопределить, определена ли переменная. Если да, он вернет этот URL, в противном случае он пройдет ряд других проверок и вернет ваш фактический базовый URI.

Скорее всего, у вас есть переменная live_url, определенная в вашей, configuration.phpкоторая включает index.phpв конце. Проверьте там ...

Другая возможность состоит в том, что ваш текущий шаблон / система шаблонов где-то определила $this->baseurlсвойство. Вы можете легко переопределить $this->baseurlвнутреннюю часть вашего шаблона, переопределив его снова в верхней части index.phpфайла вашего шаблона, например:$this->baseurl = JURI::base();

*Обновить:

  • Я упомянул, где вы можете найти метод, но это не значит, что вы должны пойти туда и внести какие-либо изменения в ядро. Это было только в информационных целях.

Обновление 2 - для будущих ссылок

Для того, чтобы дополнить информацию , содержащуюся в данном посте, то JURI::base($pathonly boolean)принимает один аргумент, $pathonlyкоторый представляет собой логический тип данных - falseэто по умолчанию.

С помощью $pathonly = trueон вернет только путь к сайту.

Примеры:

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

Обратите внимание, что когда $ pathonly = true , косая черта в конце пути URI опускается.

Ф.Фрюин
источник
Спасибо за ваш ответ, я нашел метод. Стоит ли мне что-то там менять? В файле configuration.php я определил переменную live_siteкак мой url и ничего более (я где-то не добавил index.php).
Терк
Да нечего менять в основном. Единственное исключение - если кто-то уже сделал что-то там ранее ... что заставило функцию работать таким образом. Вам действительно нужно определить переменную live_url в вашей конфигурации? Обычно это не нужно.
FFrewin
Хорошо :) Неважно, если я определю переменную live_url. Это ничего не меняет ... index.php всегда появляется. Я мог бы решить проблему с помощью кода, но это было бы очень хакерским и крайне уродливым, и я не хочу этого делать. Поэтому я хочу изменить baseurl, чтобы в нем не было index.php.
Терк
Альтернативный и быстрый способ - определить вашу собственную переменную baseurl внутри вашего шаблона и использовать ее. $ mybaseurl = JURI: base (true); echo $ mybaseurl;
FFrewin
И еще одну вещь, которую вы можете проверить, это то, влияет ли изменение вашего шаблона на $ this-> baseurl.
FFrewin