我正在開發一個Joomla 2.5內容插件,它需要在保存文章時以編程方式創建SEF URL。從插件使用sh404SEF路由器
我已經設法讓這個工作,當常規的Joomla SEF被激活。我的插件使用常規的Joomla JRoute :: _();建立一個SEF URL。這對原生Joomla很有用。 例如,URL
http://localhost/index.php?option=com_content&view=article&id=123
被翻譯成
http://localhost/index.php/mycategory/article-title-123.html
我的代碼如下所示:
private function joomlaSefUrl($article){
require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');
$siteURL = substr(JURI::root(), 0, -1);
if(JPATH_BASE == JPATH_ADMINISTRATOR) {
// In the back end we need to set the application to the site app instead
JFactory::$application = JApplication::getInstance('site');
}
$articleRoute = JRoute::_(ContentHelperRoute::getArticleRoute($article->id, $article->catid));
$sefURI = str_replace(JURI::base(true), '', $articleRoute);
if(JPATH_BASE == JPATH_ADMINISTRATOR) {
$siteURL = str_replace($siteURL.DS.'administrator', '', $siteURL);
JFactory::$application = JApplication::getInstance('administrator');
}
$sefURL = $siteURL.$sefURI;
return $sefURL;
}
的問題是,當第三方擴展一樣sh404SEF安裝海基會網址我從使用JRoute :: _()方法得到的仍然是常規的Joomla路由url:
http://localhost/index.php/mycategory/article-123.html
而不是預期的sh404SEF的網址
http://localhost/Mycategory/article-title.html
的Joomla沒有看到已安裝sh404SEF,所以通過使用JROUTE :: (),我永諾拿到常規海基會的Joomla網址。所以我需要找到一種方法直接從我的插件中使用sh404SEF JRoute ::()類,而不是常規的Joomla路由器類。
有誰知道sh404SEF類是如何工作的?
謝謝,但這並不能回答這個問題?我正在尋找從插件中使用sh404SEF路由器類的方法,而不是如何在Joomla中獲得SEF URL。 – Stilero
對不起,我被兩個例子給混淆了,你在URL中使用了index.php,而另一個例子沒有。擺脫那部分的唯一方法是使用mod_rewrite + .htaccess。即使sh404SEF也需要它。 – Craig
沒問題。是的,我知道你需要.htaccess,我也有。但問題仍然是如何以編程方式從插件訪問和使用sh404SEF類和路由器。當您使用Joomla的JRoute :: _()類方法時,該類不關心是否安裝了sh404SEF。那麼如何使用sh404SEF的JRoute :: _()方法。 – Stilero