我正在尝试根据文章 ID 为文章生成 URL。
运行此查询后
SELECT a.sectionid,
CASE WHEN CHAR_LENGTH( a.alias )
THEN CONCAT_WS( ":", a.id, a.alias )
ELSE a.id
END AS slug,
CASE WHEN CHAR_LENGTH( cc.alias )
THEN CONCAT_WS( ":", cc.id, cc.alias )
ELSE cc.id
END AS catslug
FROM #__content AS a
INNER JOIN #__categories AS cc ON cc.id = a.catid
WHERE a.id = $articleID
我以这种方式存储我的结果$data
并生成链接:
$link = JRoute::_(ContentHelperRoute::getArticleRoute($data[0]->slug, $data[0]->catslug, $data[0]->sectionid));
问题是当我的文章不属于任何菜单时,生成的链接不正确。
我注意到当我的文章没有与任何菜单关联时,API 获取active menu id
并添加到生成的链接中,即参数"&Itemid=MyActiveMenuId"
(这发生在route.php
文件中)。但由于该文章不存在于活动菜单中,因此生成的链接将不起作用。
我知道如果 API 只是忽略“项目菜单 ID”而不是获取“活动菜单 ID”它会起作用,但我可以在不更改 Joomla 代码的情况下做到这一点吗?另外,我希望在文章实际属于菜单的情况下继续考虑“项目菜单 ID”,因此生成的 URL 将是 SEF。
有什么办法可以解决这个问题?还是每篇文章都必须属于一个菜单项?
我的 Joomla 版本是 2.5.13