2013-08-19 97 views
3

我正在嘗試爲ArticleID生成文章basead的URL。Joomla 2.5 - 根據文章ID生成URL

乳寧這個查詢後

SELECT a.sectionid, 
CASE WHEN CHAR_LENGTH(a.alias) 
THEN CONCAT_WS(":", a.id, a.alias) 
ELSE a.id 
END AS slug, 
CASE WHEN CHAR_LENGTH(cc.alias) 
THEN CONCAT_WS(":", cc.id, cc.alias) 
ELSE cc.id 
END AS catslug 
FROM #__content AS a 
INNER JOIN #__categories AS cc ON cc.id = a.catid 
WHERE a.id = $articleID 

我我的結果保存在$data並生成鏈接是這樣的:

$link = JRoute::_(ContentHelperRoute::getArticleRoute($data[0]->slug, $data[0]->catslug, $data[0]->sectionid)); 

是,產生的問題鏈接它不是正確的,當我的文章沒有按」不屬於任何菜單。

我注意到,當我的文章沒有與任何菜單關聯時,API獲取active menu id並添加到生成的鏈接,參數"&Itemid=MyActiveMenuId"(這發生在route.php文件中)。但由於文章不存在於活動菜單中,生成的鏈接將不起作用。

我知道,如果API只是忽略「項目菜單ID」而不是獲得「活動菜單ID」,它會工作,但我可以做到這一點,而無需更改Joomla代碼?另外,我希望在項目實際屬於菜單的情況下繼續考慮「項目菜單ID」,因此生成的URL將爲SEF。

有什麼辦法可以解決這個問題?或者每篇文章都必須屬於一個菜單項?

我的Joomla版本是2.5.13

+0

您可以嘗試強制itemid。無論如何,getArticleRoute的第三個參數是不是sectionid的語言(這是遺留的,並在Joomla 2中設置爲0。5) –

+0

強制itemid將gerenate一個URL,該URL不會是SEF。關於第三個參數你是正確的,它的語言,但即使傳遞正確的參數,URL問題將繼續。 – Rafael

回答

1

如果你想生成($articleID在你的代碼)的基礎上的文章ID的URL,查詢看起來應該像下面這樣:

select id from #__menu where link='index.php?option=com_content&view=article&id=$articleID'; 

在這個例子中,我們假設你將結果存儲在$menuID$hasMenuID===false中。然後,您確定您的輸出URL像這樣:

if($hasMenuID===false) $outURL = "index.php?option=com_content&id=$articleID"; 
else $outURL = "index.php?option=com_content&itemid=$menuID"; 

如果你想很好的SEF友好的URL,那麼你可以申請JRoute。此外,請不要忘記在初始查詢之前將您的$ articleID轉換爲整數。 SQL安全性和所有。

1

每篇文章不需要鏈接到菜單,使其工作。

你會想通過JRoute運行URL來獲得完整的url。

echo $id =JRequest::getVar('id'); 
$url = JRoute::_('index.php?option=com_content&view=article&id='.$id); 

您也可以重定向的URL與的.htaccess 另一個URL也有其他的擴展在那裏,它可以幫助您重定向到URL。

因爲你需要知道你在呼喚 組件的URL的其餘部分(添加類似上面的選項,內容管理器始終是com_content) 和視圖(其中一篇文章的文章)。 您可以通過檢查/ components/com_content/views /下的文件結構來查看com_content的不同視圖。 除了文章,您應該看到文章,類別和類別以及其他一些內容。