[英]SEF in Joomla 3.0
我正在使用joomla 3.0,并在其中创建了一个组件。 现在是SEF网址的一个问题。
在我的组件中,我实现了MVC结构。 我的视图结构,如View / View的名称/tmpl/default.php
我的非SEF网址是: index.php?option = component Name&view = view&layout = default的名称
当我尝试使用router.php文件制作SEF URL时,它将创建URL index.php / component /组件名称/视图名称/ default / layout = default
但我想要类似index.php / component /组件名称/视图名称/默认的 url
我的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中则无法工作
您需要取消设置布局查询:
unset( $query['layout'] );
取消设置布局会阻止URL中包含?layout=default
部分。
还要确保使用return $segments;
ComponentnameBuildRoute
函数的末尾。
如果此URL未显示页面,则表示ComponentnameParseRoute
函数失败。 这对我来说很难说,因为我不知道您的视图的名称,但是您需要检查$segments[0]
中每个可能的值(视图名称),并相应地设置vars。 我也建议使用小写的视图名。
当然,还可以使用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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.