2013-05-16 79 views
0

我使用joomla 3.0並在其中創建了一個組件。現在一個問題與SEF網址。Joomla中的SEF 3.0

在我的組件中,我實現了MVC結構。我喜歡查看/ TMPL /如default.php

我的非SEF URL的查看/名稱視圖結構是:的index.php選項=組件名稱&視圖=來看&佈局名稱=默認

當我試圖讓海基會URL中使用router.php文件,那麼它會創建URL 的index.php /組件/視圖/默認?佈局的組件/名稱的名稱=默認

,但我想像指數的網址。 PHP /組件/組件的名稱/視圖名稱/默認

我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'; 
    } 
} 

當我未設置佈局區塊接着給它的URL,如:

指數。 PHP /組件/組件的名稱/視圖名稱/默認

但它不顯示我的網頁

在2.5的Joomla它正常工作,但在Joomla 3.0,則它不工作

+0

'它不工作' - 是error.log? – sectus

回答

1

您需要取消佈局查詢:

unset($query['layout']); 

取消設置佈局阻止URL從具有它的?layout=default部分。

還請確保使用return $segments;ComponentnameBuildRoute函數的結尾。

如果此URL不顯示頁面,則表示ComponentnameParseRoute函數失敗。 由於我不知道視圖的名稱,因此有點難以分辨,但是您需要檢查$segments[0]以獲取每個可能的值(視圖名稱)並相應地設置變量。此外,我會建議使用小寫的視圖名稱。

當然也可以在函數的結尾使用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; 
} 
+0

如果我未設置佈局,那麼頁面將不會顯示 – nils

+0

已更新爲ParseRoute代碼 – Bakual