从插件使用sh404SEF路由器

时间:2012-05-27 20:58:39

标签: joomla joomla-extensions joomla1.7 joomla2.5

我正在开发一个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路由网址:

http://localhost/index.php/mycategory/article-123.html 

而不是预期的sh404SEF' url

http://localhost/Mycategory/article-title.html

Joomla没有看到sh404SEF已经安装,所以通过使用JRoute :: (),我总是得到常规的SEF Joomla网址。所以我需要找到一种方法直接在我的插件中使用sh404SEF JRoute :: ()类,而不是常规的Joomla路由器类。

有谁知道sh404SEF类是如何工作的?

2 个答案:

答案 0 :(得分:0)

Joomla!要删除您需要在全局首选项中启用index.php的URL的mod_rewrite部分,并启用基本安装附带的.htaccess文件。 (当您第一次安装Joomla时!它被称为htaccess.txt重复,并将副本重命名为.htaccess

有关更完整的信息,请参阅Joomla Docs about SEF URLs

您可以尝试查看sh404SEF plugins on JED

的来源

答案 1 :(得分: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);

请记住,非sef网址,以index.php开头?...