奇怪的Joomla JRoute()行为

时间:2012-07-24 15:47:38

标签: joomla joomla-component

为什么JRoute包含未在输出SEF Url中设置的部分?

实施例: 我有一个列出项目的视图,每个项目都链接到另一个带有ID的视图(项目)。当我将查询字符串的所有部分放在一起时,我在URL上获得两个视图:

domain.com/index.php/component/ 商品 / 商品 / 1-alias

而不是

domain.com/index.php/component/ item / 1-alias

因为我对组件的所有部分使用不同的视图而不是布局。

这两个网址都运行得很好,但为什么会这样做呢?我不希望它使用Items的原始视图构建SEF URL,只是单个项目的视图。如果Item视图没有获取Items视图的菜单参数,那就不会有问题。

编辑:

这就是我使用JRoute :: _()方法的方法。

JRoute::_( 'index.php?option=com_componentname&view=show&show_id='.$item->slug);

router.php脚本的内容

jimport('joomla.database.databasequery');

function ComponentnameBuildRoute(&$query) {

    $segments = array();

    if(isset($query['view'])) {
        $view = $query['view'];
        $segments[] = $view;
        unset($query['view']);
    }

    if(isset($query['task'])) {
        $view = $query['task'];
        $segments[] = $view;
        unset($query['task']);
    }

    if(isset($query['show_id'])) {
        $view = $query['show_id'];
        $segments[] = $view;
        unset($query['show_id']);
    }

    if(isset($query['genre_id'])) {
        $view = $query['genre_id'];
        $segments[] = $view;
        unset($query['genre_id']);
    }

    if(isset($query['rated_id'])) {
        $view = $query['rated_id'];
        $segments[] = $view;
        unset($query['rated_id']);
    }

    return $segments;
}

function ComponentnameParseRoute($segments) {

    $vars = array();

    switch($segments[0]) {

        case 'show':
            $vars['view'] = $segments[0];
            $id = explode('-', $segments[1]);
            $vars['show_id'] = (int)$id[0];
            break;
        case 'genre':
            $vars['view'] = $segments[0];
            $vars['genre_id'] = (int)$segments[1];
            break;
        case 'rating':
            $vars['view'] = $segments[0];
            $vars['rated_id'] = (int)$segments[1];
            break;
        case 'shows':
            $vars['view'] = $segments[0];
            break;
        case 'genres':
            $vars['view'] = $segments[0];
            break;
        case 'ratings':
            $vars['view'] = $segments[0];
            break;
    }

    return($vars);
}

0 个答案:

没有答案