SEF在Joomla 3.0中

时间:2013-05-16 04:50:50

标签: php joomla joomla3.0

我正在使用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中它无法正常工作

1 个答案:

答案 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;
}