Де в joomla визначено $ this-> baseurl?


14

Я задав це питання спочатку на stackoverflow.com (питання тут ). У коментарях ви можете прочитати, що було б краще, якби я поставив це питання тут.

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

Я знайшов цю тему, але вона заснована на шаблоні власника запитання, і в моєму шаблоні немає нічого подібного.

Пропозиції дуже оцінені :)

Відповіді:


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змінну у файлі config.php на свій URL (нічого не змінилося). Ось результати: Правило 1: правило my-url.com Правило 2: /index.php Правило 3: / Правило 4: /index.php
Терк

@Therk - добре, а у вашій Глобальній конфігурації у вас увімкнено перезапис URL-адрес ?
Лодер

@Therk - див. Тест 2 у моїй відповіді
Лодер

ти маєш на увазі mod_rewrite? Це вимкнено в конфігурації Joomla.
Терк

Тест 2: echo JUri::base()повертає " myurl.com " і echo JUri::base(true)нічого не повертає
Терк

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 умикається.


Дякую за вашу відповідь, я знайшов метод. Чи варто уникати, щоб щось там змінити? У файлі config.php я вказав змінну live_siteяк свою URL-адресу і нічого більше (я не додав index.php десь).
Терк

Так, нічого не змінити в ядрі. Єдиний виняток - якщо хтось уже щось робив там раніше ... що спричинило функціонування функції таким чином. Вам дійсно потрібно визначити змінну live_url у своєму конфігурації? Зазвичай це не потрібно.
FFrewin

Гаразд :) Не має значення, чи визначаю я змінну live_url. Це нічого не змінює ... Index.php завжди з'являється. Я міг би вирішити проблему за допомогою коду, але це було б дуже хакітно і надзвичайно потворно, і я не хочу цього робити. Тому я хочу змінити baseurl, щоб він не містив index.php.
Терк

Альтернативний і швидкий спосіб - визначити власну змінну baseurl всередині вашого шаблону і використовувати це. $ mybaseurl = JURI: база (істина); echo $ mybaseurl;
FFrewin

І ще одне, що ви можете перевірити, - чи зміна шаблону впливає на $ this-> baseurl.
FFrewin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.