繁体   English   中英

Joomla 3.0中的SEF

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM