我正在开发一个 Joomla 2.5 内容插件,需要在保存文章时以编程方式创建 SEF url。
当常规的 Joomla SEF 被激活时,我已经成功地完成了这项工作。我的插件使用的是常规的 Joomla JRoute::_(); 建立一个 SEF URL。这适用于原生 Joomla。例如网址
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::_() 方法获得的 SEF URL 仍然是常规的 Joomla 路由 URL:
http://localhost/index.php/mycategory/article-123.html
而不是预期的 sh404SEF 的 url
http://localhost/Mycategory/article-title.html
Joomla 没有看到安装了 sh404SEF,所以通过使用 JRoute:: (),我总是得到常规的 SEF Joomla url。所以我需要找到一种方法来直接从我的插件中使用 sh404SEF JRoute:: () 类,而不是常规的 Joomla 路由器类。
有谁知道 sh404SEF 类是如何工作的?