获取当前的Joomla URL


25

以下代码可在Joomla 1.6中使用,但在3.x中会引发“严格标准”错误:

严格标准:仅变量应通过引用分配

    //Get the full URL for sharing purposes
    $uri = & JFactory::getURI();
    $absolute_url = $uri->toString();

    <?php echo $absolute_url; ?>

如何在Joomla 3.x中出现错误的情况下使代码正常工作?


顺便说一句。它不依赖于Joomla版本,而是依赖PHP版本。在PHP中已弃用通过引用分配变量
turson 2014年

3
只是给任何寻求答案的人的注释,以获取FULL URL,请勿使用,JUri::current()因为它不会返回任何查询参数。只需使用下面接受的答案中描述的内容:joomla.stackexchange.com/a/4295/168
Lodder

Answers:


36

更新

主要问题的答案是:不建议使用JFactory :: getUri(),像这样直接使用JUri:

<?php 
$uri = JUri::getInstance(); 
echo $uri->toString();

// or simpler:

echo JUri::getInstance();
?>

严格的标准误差是因为中&之前JFactory::getURI();。您可以在下面找到有关此信息的更多信息。


原始答案

删除

//Get the full URL for sharing purposes
$uri = JFactory::getURI();
$absolute_url = $uri->toString();

<?php echo $absolute_url; ?>

使用PHP5,new操作员会自动返回引用,因此不再需要'&'。

从官方的PHP手册中:

从PHP 5开始,new运算符会自动返回引用,因此按引用分配new结果将在PHP 5.3和更高版本中产生E_DEPRECATED消息,在早期版本中产生E_STRICT消息。

来源:http//php.net/manual/en/language.operators.assignment.php




5

UPDATE: JUri现在也已弃用。现在正确的方法如下:

$uri = Joomla\CMS\Uri\Uri::getInstance();
echo  $uri->toString();

现在也已弃用的旧消息:

JFactory::getURI();不推荐使用。获取当前URL的正确方法是:

$uri = JUri::getInstance();
echo  $uri->toString();

0

依靠该toString方法获取当前URL是错误的。该toString方法并非用于此目的。以下是检索当前URL的更好,更清洁,更可靠的方法:

$objJURI = JFactory::getURI();
$strQuery = '';
if (!empty($objJURI->getQuery()))
    $strQuery = '?'.$objJURI->getQuery();
$strFragment = '';
if ((!empty($objJURI->getFragment())) && ($objJURI->getFragment() != '#'))
    $strFragment = $objJURI->getFragment();
$currentURL = $objJURI->current().$strQuery.$strFragment;

请注意,该getFragment方法应在数字符号后返回该部分,但是似乎存在一个核心错误阻止了该操作。


错了 它将显示index.php&option=com_foo&view=bar。应该在?之后index.php
Lodder

2
使用toString是绝对合法的。它是一种公共方法,由JUri类本身大量使用。甚至方法注释都说“返回完整的uri字符串。”。使用JFactory :: getUri(); 已弃用,肯定是“更多错误”。
fruppel
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.