Joomla组件 - SEF链接和JRequest :: getVar不从编码的URL返回变量

时间:2012-11-20 10:35:51

标签: joomla joomla2.5 joomla-sef-urls

我的组件和Joomla的SEF链接出现问题。我正在尝试使用JRequest::getVar从原始网址获取变量(使用JRoute::_指定)

我的 router.php 文件如下所示:

function PortfolioBuildRoute(&$query)
{
    $segments = array();

    if (isset($query['category'])) {
        $segments[] = $query['category'];
        unset($query['category']);
    }
    if (isset($query['subcategory'])) {
        $segments[] = $query['subcategory'];
        unset($query['subcategory']);
    }
    return $segments;
}

function PortfolioParseRoute($segments)
{
    $vars = array();
    $count = count($segments);

    if ($count) {
        $count--;
        $segment = array_shift($segments);
        if (is_numeric($segment)) {
            $vars['subcategory'] = $segment;
        } else {
            $vars['category'] = $segment;
        }
    }
    if ($count) {
        $count--;
        $segment = array_shift($segments) ;
        if (is_numeric($segment)) {
            $vars['subcategory'] = $segment;
        }
    }
    return $vars;
}

我编码的网址原来如下: index.php?option=com_portfolio&category=x&subcategory=yJRoute::_将其转换为/portfolio/x/y。我现在需要的是在编码url后获取变量 x y 的某种方法吗?

---- ---- EDIT

好的,所以我想出来了 - 我将router.php文件的ParseRoute部分更改为:

function PortfolioParseRoute($segments)
{
    $vars = array();
    $vars['category'] = str_replace(":", "-", $segments[0]);
    $vars['subcategory'] = str_replace(":", "-", $segments[1]);
    return $vars;
}

我觉得我现在对router.php文件有了更好的了解。事实证明,JRoute将您网址中的连字符转换为冒号!不知道为什么它选择了可怜的连字号,大JRoute欺负。我可以在URL中使用下划线,它可以正常运行,但连字符是比下划线更好的SEO。

我在ParseRoute中的每个段上使用了str_replace来对其进行排序。

我不确定这是否是正确和标准的方法,但我是Joomla和PHP noob所以它必须做,直到我建议不这样做。

至少它有效!

:)

0 个答案:

没有答案