joomla中的$ this-> baseurl在哪里定义?


14

我首先在stackoverflow.com上问了这个问题(这里的问题)。在评论中,您可以读到,如果我在这里问这个问题会更好。

在我使用的joomla网站上,echo $this->baseurl;但它返回包含“ /index.php”的网址。我想更改此设置以从baseurl中删除“ /index.php”。但我找不到的定义行$this->baseurl;

我找到了这个线程,但这是基于问题所有者的模板的,而在我的模板中没有这样的东西。

建议非常感激:)

Answers:


14

$this->baseurl;基本上是的快捷方式JUri::base()。它获取您live_siteconfiguration.php文件中指定为变量的URL 。如果没有任何价值,那么它将基于一些变量使用一些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重写设置为。如果不工作,然后读取步骤125的的这个页面上的Apache部分,然后再试一次。


测试4:

在模板的index.php文件顶部,添加以下内容

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

嗨,谢谢您的回答。我live_site将configuration.php文件中的变量更改为我的网址(没有任何更改)。结果如下:规则1: my-url.com 规则2: /index.php 规则3: / 规则4: /index.php
Therk

@Therk-好的,在您的全局配置中,您是否已关闭URL重写
2014年

@Therk-参见我的答案中的测试2
Lodder

你的意思是mod_rewrite?在Joomla配置中将其关闭。
Therk

测试2:echo JUri::base()返回“ myurl.com ”,但不echo JUri::base(true)返回任何内容
Therk 2014年

8

$this->baseurl;是从一个模板内部使用的快捷方式,而不是调用JURI:base();的JURI类的方法。它是核心的一部分,您可以在以下位置找到它/libraries/joomla/environment/uri.php (~line 218).

如果您查看该方法,将会看到它检入配置文件以查看是否$live_url定义了变量。如果是,它将返回此URL,否则将进行许多其他检查并返回您的实际基本URI。

您很可能在其中定义了live_url变量,该变量的末尾configuration.php包含index.php。检查那里...

另一种可能性是您当前的模板/ template系统在某处定义了$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)。
Therk

是的,核心没有任何改变。唯一的例外是,如果其他人以前已经在那里做过某事……这导致该功能以这种方式工作。您是否真的需要在配置中定义live_url变量?通常不需要。
FFrewin

好的:)我定义live_url变量没关系。它什么都不会改变... index.php总是会出现。我可以使用代码解决问题,但这将非常棘手且极其丑陋,我不想这样做。所以我想修改baseurl,使index.php不在其中。
Therk 2014年

另一种快速的方法是在模板中定义自定义baseurl变量并使用它。$ mybaseurl = JURI:base(true); echo $ mybaseurl;
FFrewin

您还可以检查一件事,即更改模板是否对$ this-> baseurl有任何影响。
FFrewin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.