2011-07-19 130 views
4

我有一個自定義組件,我正在編寫一個正在管理區域中運行的導入腳本。我有以下代碼:在Joomla管理員中使用JRoute :: _()管理員

$newUrl = ContentHelperRoute::getArticleRoute($import->article_id.':'.$import->alias, $import->catid); 
$newUrl = JRoute::_($newUrl); 

第一部分工作返回類同此:

的index.php選項= com_content &視圖=文章& ID = 45:的Joomla,有點大男子主義,和 - sharethis模塊& CATID = 18

的第二部分示出了這樣的:

/administrator/index.php?option=com_content &視圖=文章& ID = 45:的Joomla-交際和 - sharethis模塊& CATID = 18

上述兩個網址的是當你」 d期望組件com_content呈現這些url,就好像我想在管理區域內使用它們一樣。

任何想法如何強制JRoute的工作,因爲它會在前端使用?

注意:這是在我的組件的控制器中使用,如果它有任何區別,我包括require_once(JPATH_SITE。'/components/com_content/helpers/route.php');

回答

5

對於那些在Google上發現並且難以使用JRoute :: _()和contentHelper :: getArticleRoute()的人。

$newUrl = ContentHelperRoute::getArticleRoute($import->article_id.':'.$import->alias, $import->catid); 

// better will be check if SEF option is enable! 
$router = new JRouterSite(array('mode'=>JROUTER_MODE_SEF)); 
$newUrl = $router->build($newUrl)->toString(array('path', 'query', 'fragment')); 
// SEF URL ! 
$newUrl = str_replace('/administrator/', '', $newUrl); 
//and now the tidying, as Joomlas JRoute makes a cockup of the urls. 
$newUrl = str_replace('component/content/article/', '', $newUrl); 
0

一個更好的解決方案是創建一個新的路由器實例,因此,該代碼將是這樣的:

$app = JApplication::getInstance('site'); 
$router = &$app->getRouter();  

$newUrl = ContentHelperRoute::getArticleRoute($import->article_id.':'.$import->alias, $import->catid); 

$newUrl = $router->build($newUrl); 
$parsed_url = $newUrl->toString(); 
$parsed_url = str_replace('/administrator', '', $parsed_url); 

這樣,你總是會獲得該項目的正確網址,沒有不管這是一個Joomla的文章,文章K2等..

**請注意,這取決於項目(K2是,Joomla等)的類型,$ NEWURL應當與隨之而來的方法獲得。

1

我認爲這個人會是一個簡單的解決方案:

$newUrl = JRoute::_(ContentHelperRoute::getArticleRoute($import->id.':'.$import->alias, $import->catid)); 

這會給你同樣的結果另外兩個以前的答案,但用更少的代碼。

希望這會有所幫助。

0

這裏有一個片段,將會爲Joomla 3.6

$routerOptions = []; 
if (JFactory::getConfig()->get('sef')) { 
    $routerOptions['mode'] = JROUTER_MODE_SEF; 
} 
$siteRouter = JRouter::getInstance('site', $routerOptions); 
$link = $siteRouter->build($yourRoute)->toString(); 
$link = preg_replace('#^/administrator#', '', $link); 
工作