2014-03-01 192 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