cmgroupbuing组件中的joomla路由

时间:2016-09-06 17:03:15

标签: joomla

如何更改组件路由器文件中的cmgroupbuying joomla 网址?

例如,我有一个交易宽度这个地址

  

的index.php /组件/ cmgroupbuying /交易/ 5 / AAAAA?ITEMID = 437

替换 与

  

的index.php /交易/ 5

现在我正在组件中尝试更改route.php文件,但这不正确

3 个答案:

答案 0 :(得分:0)

您有2个选项。

<强> 1 创建一个自定义系统插件,该插件正在监听onAfterRouteonAfterInitialise事件,添加buildroules并预处理请求网址,以便使用右侧触发»cmgroupbuying«组件变量如:

$vars = [
    'option' => 'com_cmgroupbuying',
    'view' => …
];

总而言之,这可能会变得非常复杂,因为你必须找到一种通用的方法来以两种方式转换url(url转换为变量,反之亦然),通过注册其他{{1}应该做什么}。如果您决定这样做,请查看»语言过滤器«插件或here,因为其中也有类似的事情。

简而言之,您的插件必须在以下任何一种情况下执行:调用router rules,以进行所需的转换(变量为url)。并JRoute::_( … )执行相反的操作(url to variables)。

这基本上是组件路由器的作用,如果onAfterRoute不是你自己的,你不能/不应该创建/修改它,而是通过插件«路径。

<强> 2 为每个交易/项目创建菜单链接。这是最简单的方法,但不是通用的,这取决于您需要创建或维护的链接数量,这是最快的事情。

<强>更新

让我在Joomla路由!是整个系统中最复杂和最具误导性的东西,良好的文档很少见。需要很好地理解整个应用程序流程,如何计算和实例化所使用的组件。 此外,您需要了解Joomla!中的路由概念,这与大多数其他框架(如symfony或drupal)不同,其中像com_cmgroupbuying这样的URL被映射到控制器方法。的Joomla!就像一个命令行应用程序和»SEF«(搜索引擎友好)URLS位于其上方的一层。使用像/way/to/go/{id}这样的网址,需要做两件事:

  1. 将Segments数组(基于数字索引的数组)/way/to/go/{id}转换为一组参数(通常称为vars,关联数组)['way', 'to', 'go', <id>]。这就是[ 'option' => 'com_…', 'view' => 'viewtoshow', 'task' => 'thingToDo', … ]方法需要返回到Joomla!系统,它将使用那些»vars«/参数来执行组件。

  2. 将»vars«/ arguments(关联数组)的集合转换为url段(数字索引数组),基本上与1的相反。但每次parse时都执行此转换执行。如果它被称为JRoute::_(),Joomla!将使用JRoute::_('index.php?option=com_somecome&view=someview')的路由器并调用其com_somecome方法,并将给出的字符串中的参数移交给build

  3. 但请记住,从1.到2.从2.到1.需要保持不变性,这意味着需要JRoute::_(<string>)和连接vars的集合不同的,从A到B必须始终是可逆的,并且始终导致相同的结果。

    如何完成此转换,完全取决于您的组件,如果您想要“短路”joomla,以便url转到/deal/{id},您将需要系统插件并设置缺少的变量 ['option' => 'com_cmgroupbuying', 'view' => 'product', …],否则永远不会调用您的组件。

    可以找到更详细的文档here

    我想强调上面提到的建议来查看来源

答案 1 :(得分:0)

function CMGroupBuyingBuildRoute(&amp; $ query) {     $ segments = array();

if(isset($query['view']))
{
    if($query['view'] == 'dealprevue' || $query['view'] == 'freecouponprevue'
            || $query['view'] == 'todaydeal' || $query['view'] == 'todayfreecoupon'
            || $query['view'] == 'cart' || $query['view'] == 'checkout' || $query['view'] == 'orders'
            || $query['view'] == 'alldeals' || $query['view'] == 'freecoupons'
            || $query['view'] == 'activedeals' || $query['view'] == 'activefreecoupons'
            || $query['view'] == 'upcomingdeals' || $query['view'] == 'upcomingfreecoupons'
            || $query['view'] == 'expireddeals' || $query['view'] == 'expiredfreecoupons'
            || $query['view'] == 'partner' || $query['view'] == 'dealmanagement'
            || $query['view'] == 'freecouponmanagement'|| $query['view'] == 'products')
    {
        unset($query['view']);
    }
    elseif($query['view'] == 'deal' || $query['view'] == 'freecoupon'
            || $query['view'] == 'order' || $query['view'] == 'rssfeeds'
            || $query['view'] == 'search' || $query['view'] == 'dealsubmission'
            || $query['view'] == 'partnermanagement'
            || $query['view'] == 'staffmanagement'
            || $query['view'] == 'freecouponsubmission'
            || $query['view'] == 'category'
            || $query['view'] == 'coupon'
            || $query['view'] == 'product')
    {
        $segments[] = $query['view'];
        unset($query['view']);
    }
    else
    {
        $segments[] = $query['view'];
    }

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

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

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

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

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

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

return $segments;

}

答案 2 :(得分:0)

函数CMGroupBuyingParseRoute($ segments) {     $ vars = array();

switch($segments[0])
{
    case 'deal':
        $vars['view'] = 'deal';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        if(isset($segments[2]))
            $vars['alias'] = $segments[2];
        break;
    case 'freecoupon':
        $vars['view'] = 'freecoupon';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        if(isset($segments[2]))
            $vars['alias'] = $segments[2];
        break;
    case 'order':
        $vars['view'] = 'order';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        break;
    case 'todaydeal':
        $vars['view'] = 'todaydeal';
        break;
    case 'todayfreecoupon':
        $vars['view'] = 'todayfreecoupon';
        break;
    case 'freecoupons':
        $vars['view'] = 'freecoupons';
        break;
    case 'alldeals':
        $vars['view'] = 'alldeals';
        break;
    case 'activedeals':
        $vars['view'] = 'activedeals';
        break;
    case 'upcomingdeals':
        $vars['view'] = 'upcomingdeals';
        break;
    case 'expireddeals':
        $vars['view'] = 'expireddeals';
        break;
    case 'activefreecoupons':
        $vars['view'] = 'activefreecoupons';
        break;
    case 'upcomingfreecoupons':
        $vars['view'] = 'upcomingfreecoupons';
        break;
    case 'expiredfreecoupons':
        $vars['view'] = 'expiredfreecoupons';
        break;
    case 'cart':
        $vars['view'] = 'cart';
        break;
    case 'checkout':
        $vars['view'] = 'checkout';
        break;
    case 'search':
        $vars['view'] = 'search';
        break;
    case 'orders':
        $vars['view'] = 'orders';
        break;
    case 'partner':
        $vars['view'] = 'partner';
        break;
    case 'dealmanagement':
        $vars['view'] = 'dealmanagement';
        break;
    case 'dealsubmission':
        $vars['view'] = 'dealsubmission';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        break;
    case 'freecouponmanagement':
        $vars['view'] = 'freecouponmanagement';
        break;
    case 'freecouponsubmission':
        $vars['view'] = 'freecouponsubmission';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        break;
    case 'rssfeeds':
        $vars['view'] = 'rssfeeds';
        if(isset($segments[1]))
            $vars['type'] = $segments[1];
        if(isset($segments[2]))
            $vars['location'] = $segments[2];
        break;
    case 'partnermanagement':
        $vars['view'] = 'partnermanagement';
        if(isset($segments[1]))
            $vars['navigation'] = $segments[1];
        if(isset($segments[2]))
            $vars['id'] = $segments[2];
        break;
    case 'staffmanagement':
        $vars['view'] = 'staffmanagement';
        if(isset($segments[1]))
            $vars['navigation'] = $segments[1];
        if(isset($segments[2]))
            $vars['id'] = $segments[2];
        break;
    case 'category':
        $vars['view'] = 'category';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        break;
    case 'coupon':
        $vars['view'] = 'coupon';
        if(isset($segments[1]))
        {
            $vars['download'] = $segments[1];
            $vars['tmpl'] = 'component';
        }
        break;
    case 'products':
        $vars['view'] = 'products';
        break;
    case 'product':
        $vars['view'] = 'product';
        if(isset($segments[1]))
            $vars['id'] = $segments[1];
        if(isset($segments[2]))
        {
            $vars['alias'] = str_replace(':', '-', $segments[2]);
        }
        break;
    default:
        $vars['view'] = '';
        break;
}

return $vars;

}