我使用joomla 3.0并在其中创建了一个组件。现在有一个SEF url的问题。
在我的组件,我已经实现MVC结构。我的视图结构像 view/Name of view/tmpl/default.php
我的非sef url是:index.php?
当我试图使用router.php文件创建SEF url时,它将创建urlindex.php/component/组件名/视图名/default?默认布局=
但我想要url像index.php/component/组件名/视图名/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';
}
}
当我取消设置布局段,然后它给出url:
index.php/component/组件名/视图名/default
但是没有显示我的页面
在joomla 2.5中可以正常工作,但在joomla 3.0中不能正常工作
您需要取消布局查询:
unset( $query['layout'] );
取消设置布局可以防止URL中包含?layout=default
部分。
确保在ComponentnameBuildRoute
函数结束时使用return $segments;
。
如果此URL不显示该页,则表示ComponentnameParseRoute
功能失败。这对我来说有点困难,因为我不知道视图的名称,但是您需要检查$segments[0]
中的每个可能的值(viewname)并相应地设置变量。我还建议使用小写的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;
}