Joomla:从 ID 获取内容插件中的文章 SEF URL

Joomla: get article SEF URL in Content Plugin from ID

我目前正在开发一个 Joomla 插件,我想在其中捕获事件 onContentAfterSave,以便 post 新保存的文章到 URL 缩短器,以供使用在社交网络上。

谁能帮我计算文章详细视图(无菜单条目!)的适当 SEF URL?

URL 应该是这样的:http://<domain>.<tld>/<category-id>-<category-title>/<article-id>-<article-title>.html

我读过 this post,但这并没有真正提供解决方案。

使用 JRoute 将基于非 SEF 参数的 URL 转换为基于 SEF 的参数。

在链接到标准 Joomla 文章的情况下,需要以下信息:

$url = JRoute::_('index.php?option=com_content&view=article&id='.$article->id);

$article->id 可通过 onContentAfterSave 获得,尽管您可能已将 $article 对象命名为其他名称,在这种情况下,请根据需要重命名。

如果您确实有文章的菜单项,则添加菜单项 ID 的 Itemid 参数,它将加载与该菜单项相关的模块。

我可以用 post 解决这个问题: 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));

这个解决方案真正好的部分是,它也适用于包含在子目录中的安装。