从jolla中的自定义非mvc组件的URL中删除“组件”单词

时间:2013-12-23 12:34:03

标签: joomla2.5 joomla3.0

我写了一个自定义的非mvc组件(因为我不知道如何制作mvc组件,现在它的大小已经增长,所以改变它将花费更多的时间,这对我来说是不可能的)'com_group'对我的客户来说。

一切都很好,但是当涉及到sef网址时,它会为我提供mysite/component/group/home等网址以及mysite/index.php?option=com_group&view=home等非网址网址,但客户端希望从网址中删除组件字。

我还为我的组件制作了一个路由器,它正确地删除了每个参数,但它没有删除组件。我也为它做了一个菜单项,但它没有帮助我。

这是我的router.php

<?php //error_reporting(E_ALL); 
defined ( '_JEXEC' ) or die ();
jimport('joomla.error.profiler');

function GroupBuildRoute(&$query){ 
       $segments = array();
        //$query['Itemid'] = 201;
        if( isset($query['view']) )
       {
                $segments[] = $query['view'];
                unset( $query['view'] );
       };
        if( isset($query['pin']) )
       {
                $segments[] = $query['pin'];
                unset( $query['pin'] );
       };    

       return $segments;
} 


function GroupParseRoute($segments){
       $vars = array();
       $app =& JFactory::getApplication();
       $menu =& $app->getMenu();
       $item =& $menu->getActive();
       $items = $menu->getItems('component', 'com_group');

       if (!isset($query['Itemid']))   
       $query['Itemid'] =  180;//$items->id; 
       // Count segments
       $count = count( $segments );
         //Handle View and Identifier
         switch( $segments['0'] ){
               case 'group_page':
                       $vars['view'] = 'group-pages';
                      break;
               case 'group':
                       $vars['view'] = 'home';
                       break;
               case 'folow':
                       $vars['view'] = 'follow';
                       break;
               case 'start':
                       $vars['view'] = 'start-group';
                       break;
               case 'group_eventplan':
                       $vars['view'] = 'group-event-plan';
                       break;
               case 'group_member':
                       $vars['view'] = 'group-members';
                       break;
               case 'manage_subscription':
                       $vars['view'] = 'manage-subscription';
                       break;
               case 'group_msg':
                       $vars['view'] = 'group-message';
                       break;
               case 'group_invite':
                       $vars['view'] = 'invite-friends';
                       break;
               case 'other_group':
                       $vars['view'] = 'other-groups';
                       break;
               case 'groupinfo':
                       $vars['view'] = 'group-info';
                       break;
               case 'home':
                       $vars['view'] = 'group-home';
                       break;
       }

     if (!isset($item)) {
        $vars['view']   = $segments[0];
        $vars['pin']    = $segments[1];
        return $vars;
     }
     if($count==2){
            $vars['view']   = $vars['view'];
            $vars['pin']    = $segments[1];
            return $vars;
     }

       return $vars;
}

我还想将group_msg替换为group-message,以便新网址component/group/group-message/不是component/group/group_msg

我尝试了Remove component part from sef url, menu item not completely,但没有帮助我。

2 个答案:

答案 0 :(得分:1)

最后,我设法自己解决了这个问题。我提到了帮助他人的步骤。 (如果您希望源代码与项目一起使用,请写信给我)

步骤1:添加菜单项(Joomla Administrator - &gt;菜单 - &gt;菜单管理器 - &gt;添加新项目)

步骤2:新添加的菜单项将提供一个ID,将此ID添加到您组件的所有网址中。

的index.php选项= com_your_component_name&安培; ITEMID = newly_generated_id

是的。

答案 1 :(得分:0)

我要尝试的第一个选项是sh404SEF

祝你好运!

编辑

如果SEF扩展程序不适合您,可能使用.htaccess和redirect,如下所示:

RewriteEngine On

Redirect /component/group/home /something-else