1

我的组件和 Joomla 的 SEF 链接有问题。我正在尝试使用JRequest::getVar从原始 URL 获取变量(用 指定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;
}

我正在编码的 URL 最初看起来像: index.php?option=com_portfolio&category=x&subcategory=y并将JRoute::_其转换为/portfolio/x/y. 我现在需要的是在 url 编码后获取变量xy的某种方法?

- - 编辑 - -

好的,所以我想通了 - 我将 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 将您 url 中的连字符转换为冒号!不太清楚为什么它会选择可怜的连字符,大 JRoute 恶霸。我可以在 URL 中使用下划线,它可以正常工作,但连字符比下划线更好。

我在 ParseRoute 的每个段上都使用了 str_replace 来解决这个问题。

我不确定这是否是解决此问题的正确和标准方法,但我是 Joomla 和 PHP 菜鸟,所以在收到其他建议之前必须这样做。

至少它有效!

:)

4

0 回答 0