2014-03-01 157 views
1

嗨提前网址海基会有我GOOGLE了房子,但没有解决......为Joomla自定义组件

我制定了joomla3

与海基会组件的addreess Joomla的一个组成部分是这样的:

orginal address: domain.com/index.php?option=com_bahaedini&keyword=22&year=2005&month=1&day=4 

与菜单:domain.com/menu_name/view_name/keyword/2005/1/4

无菜单:domain.com/component/bahaedini/view_name/keyword/2005/1/4

我的最喜欢的域名是:domain.com/keyword/2005/1/4

但至少该如何删除URL中的“view_name”或“component/bahaedini”?

我可以hatccess删除它,但我不能发送parametrs到组件......

我想至少有以下格式:

domain.com/keyword/2005/1/4 
domain.com/menu_name/keyword/2005/1/4 

domain.com/view_name/keyword/2005/1/4 
domain.com/bahaedini/keyword/2005/1/4 



<?php 
defined('_JEXEC') or die ; 


//http://127.0.0.1/archives?option=com_bahaedini&view=items&date=2014-12-9 
function BahaediniBuildRoute(&$query) 
{ 
     $segments = array(); 
     if(isset($query['view'])) 
     { 
       $segments[] = $query['view']; 
       unset($query['view']); 
     } 

     if(isset($query['keyword'])) 
     { 
       $segments[] = $query['keyword']; 
       unset($query['keyword']); 
     } 

     if(isset($query['year'])) 
     { 
       $segments[] = $query['year']; 
       unset($query['year']); 
     } 
     if(isset($query['month'])) 
     { 
       $segments[] = $query['month']; 
       unset($query['month']); 
     } 
     if(isset($query['day'])) 
     { 
       $segments[] = $query['day']; 
       unset($query['day']); 
     } 


     return $segments; 
} 

//http://127.0.0.1/archives?option=com_bahaedini&view=items&date=2014-12-9 
function BahaediniParseRoute($segments) 
{ 
     $vars = array(); 


     switch($segments[0]) 
     { 

       case 'items': 
         $vars['view'] = 'items'; 

         if(isset($segments[2])) 
         { 
         $year = explode(':', $segments[2]); 
         $vars['year'] = (int)$year[0]; 
         } 

         if(isset($segments[3])) 
         { 
         $month = explode(':', $segments[3]); 
         $vars['month'] = (int)$month[0]; 
         } 

         if(isset($segments[4])) 
         { 
         $day = explode(':', $segments[4]); 
         $vars['day'] = (int)$day[0]; 
         } 

         if(isset($segments[1])) 
         { 
         $search = explode(':', $segments[1]); 
         $vars['keyword'] = (int)$search[0]; 
         } 

         break; 


     } 
     return $vars; 
}?> 
+0

您必须拥有组件,因为您无法控制是否将关键字或bahaedini用作菜单别名或其他组件的别名,因此组件是一个保留字,可防止两个页面具有相同url的可能性通过制作组件/ bahaedini。你应该做的就是做一个菜单项,并且为你的组件编写一个自定义路由器,所以你没有视图名称。 – Elin

+0

感谢您的回答。可以给我更多的信息?...我编辑我的问题与router.php代码...如何改变它隐藏视图名称? – user3307827

回答

2

任何设置为$segments都会出现在网址中。所以这$segments[] = $query['view'];添加视图到网址。由于你的分析器会自动设置来看,仍然取消设置在构建功能的看法,但不要将其推入$segments

function BahaediniBuildRoute(&$query) 
{ 
    $segments = array(); 
    if(isset($query['view'])) 
    { 
      unset($query['view']); 
    } 
    ... 

当然,你可能需要调整您的解析器,因为现在的段数将是不同的,所以你需要不同的索引值。

+0

非常感谢....我underestand $段规则和ParseRoute函数中的一点变化我可以解决我的问题... :) – user3307827