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