我正在使用joomla 3.0并在其中创建了一个组件。现在有一个SEF网址问题。
在我的组件中,我实现了MVC结构。我的视图结构如视图/视图名称/ tmpl / default.php
我的非SEF网址是: index.php?option = component名称& view =视图名称& layout = default
当我尝试使用router.php文件制作SEF网址时,它会创建网址 index.php / component /组件名称/视图名称/默认值?layout = default
但我希望网址像 index.php / component / name of name / name of view / default
我的router.php文件是:
function componentNameBuildRoute( &$query )
{
if(isset($query['view']))
{
$segments[] = $query['view'];
unset( $query['view'] );
}
if(isset($query['layout']))
{
$segments[] = $query['layout'];
};
}
function ComponentNameParseRoute($segments)
{
$vars = array();
$app =& JFactory::getApplication();
$menu =& $app->getMenu();
$item =& $menu->getActive();
// Count segments
$count = count( $segments );
if( $segments[0] == 'Profile')
{
$vars['view'] = 'Profile';
$vars['layout'] = 'default';
}
}
当我取消设置布局段时,它会给出网址:
index.php / component /组件名称/视图名称/默认
但它没有显示我的页面
在joomla 2.5中它运行正常,但在joomla 3.0中它无法正常工作
答案 0 :(得分:1)
您需要取消设置布局查询:
unset( $query['layout'] );
取消设置布局会阻止网址中包含?layout=default
部分。
另外,请务必使用return $segments;
ComponentnameBuildRoute
功能的结尾。
如果此URL未显示该页面,则表示ComponentnameParseRoute
功能失败。
这有点难以告诉我,因为我不知道您的视图的名称,但您需要检查$segments[0]
的每个可能的值(viewname)并相应地设置变量。另外我建议使用小写视图名。
当然,还会在函数末尾使用return $vars;
返回变量。
我在我的扩展程序中使用了类似的内容:
function ComponentnameParseRoute($segments)
{
$vars = array();
// Check View
switch ($segments[0])
{
case 'profile':
default:
$vars['view'] = 'profile';
break;
case 'anotherview':
$vars['view'] = 'anotherview';
break;
}
// Check Layout
if ($segments[1])
{
$vars['layout'] = $segments[1];
}
return $vars;
}