我正在开发一个Joomla插件,我希望在其中捕获事件onContentAfterSave
,以便将新保存的文章发布到URL缩短器,以便在社交网络上使用。
有人可以帮我解决如何计算文章明细视图的相应SEF URL(没有菜单项!)?
网址应为:http://<domain>.<tld>/<category-id>-<category-title>/<article-id>-<article-title>.html
我读过this post,但这并没有真正提供解决方案。
答案 0 :(得分:0)
使用JRoute将非基于SEF参数的URL转换为SEF。
如果链接到标准的Joomla文章,则需要以下信息:
$url = JRoute::_('index.php?option=com_content&view=article&id='.$article->id);
$ article-&gt; id可通过onContentAfterSave获得,但您可能已将$ article对象称为其他内容,在这种情况下,可以根据需要进行重命名。
如果你有文章的菜单项,那么添加菜单项id的Itemid参数,它将加载与该菜单项相关的模块。
答案 1 :(得分:0)
我能用这篇文章解决这个问题: https://joomla.stackexchange.com/questions/36/how-do-i-generate-a-sef-url-in-a-custom-module-instead-of-the-real-url
提供的解决方案是:
$rootURL = rtrim(JURI::base(),'/');
$subpathURL = JURI::base(true);
if(!empty($subpathURL) && ($subpathURL != '/')) {
$rootURL = substr($rootURL, 0, -1 * strlen($subpathURL));
}
$url = $rootURL.JRoute::_(ContentHelperRoute::getArticleRoute($article->id, $article->catid));
此解决方案的一个非常好的部分是,它也适用于子目录中包含的安装。