为什么 JRoute 包含未在输出 SEF Url 中设置的部分?
示例:我有一个列出项目的视图,每个项目都链接到具有 ID 的另一个视图(项目)。当我将查询字符串的所有部分放在一起时,我会在 URL 上获得两个视图:
domain.com/index.php/component/items/item/1-alias _ _ _ _
代替
domain.com/index.php/component/ item /1-别名
因为我对组件的所有部分使用不同的视图,而不是布局。
两个 URL 都可以正常工作,但为什么会这样呢?我不希望它使用项目的原始视图构建 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);
}