1

我正在开发一个 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 类是如何工作的?

4

2 回答 2

0

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

有关更完整的信息,请阅读有关 SEF URL 的 Joomla 文档

您可以尝试查看JED 上的 sh404SEF 插件的来源

于 2012-05-27T21:25:40.250 回答
0

在文件中使用函数 getSefFromNonSef

管理员\组件\com_sh404sef\helpers\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 url,以 index.php 开头?...

于 2016-07-27T16:23:26.700 回答