如何更改组件路由器文件中的cmgroupbuying joomla 网址?
例如,我有一个交易宽度这个地址
的index.php /组件/ cmgroupbuying /交易/ 5 / AAAAA?ITEMID = 437
替换 与
的index.php /交易/ 5
现在我正在组件中尝试更改route.php
文件,但这不正确
答案 0 :(得分:0)
您有2个选项。
<强> 1 强>
创建一个自定义系统插件,该插件正在监听onAfterRoute
和onAfterInitialise
事件,添加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}
这样的网址,需要做两件事:
将Segments数组(基于数字索引的数组)/way/to/go/{id}
转换为一组参数(通常称为vars,关联数组)['way', 'to', 'go', <id>]
。这就是[ 'option' => 'com_…', 'view' => 'viewtoshow', 'task' => 'thingToDo', … ]
方法需要返回到Joomla!系统,它将使用那些»vars«/参数来执行组件。
将»vars«/ arguments(关联数组)的集合转换为url段(数字索引数组),基本上与1的相反。但每次parse
时都执行此转换执行。如果它被称为JRoute::_()
,Joomla!将使用JRoute::_('index.php?option=com_somecome&view=someview')
的路由器并调用其com_somecome
方法,并将给出的字符串中的参数移交给build
但请记住,从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;
}