2012-05-27 51 views
1

我正在開發一個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類是如何工作的?

回答

0

隨着Joomla!要擺脫URL的index.php部分,您需要在全局首選項中打開mod_rewrite,並啓用基本安裝附帶的.htaccess文件。 (當你第一次安裝Joomla!這就是所謂的htaccess.txt複製和重命名副本.htaccess

有關更完整的信息Joomla Docs about SEF URLs閱讀。

你可以嘗試看sh404SEF plugins on JED

+0

謝謝,但這並不能回答這個問題?我正在尋找從插件中使用sh404SEF路由器類的方法,而不是如何在Joomla中獲得SEF URL。 – Stilero

+0

對不起,我被兩個例子給混淆了,你在URL中使用了index.php,而另一個例子沒有。擺脫那部分的唯一方法是使用mod_rewrite + .htaccess。即使sh404SEF也需要它。 – Craig

+0

沒問題。是的,我知道你需要.htaccess,我也有。但問題仍然是如何以編程方式從插件訪問和使用sh404SEF類和路由器。當您使用Joomla的JRoute :: _()類方法時,該類不關心是否安裝了sh404SEF。那麼如何使用sh404SEF的JRoute :: _()方法。 – Stilero

0

使用函數的源代碼getSefFromNonSef文件

管理員\分量\ com_sh404sef \傭工\ general.php

例子:

$url = 'index.php?option=com_content&view=article&id=1:aaaaaaaaa&catid=2&Itemid=101' 
$sef_url = Sh404sefHelperGeneral::getSefFromNonSef($url, true, false, null); 

記住,非海基會的網址,開始的index.php ...