gpt4 book ai didi

php - Joomla 2.5 - 根据文章 ID 生成 URL

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:39 25 4
gpt4 key购买 nike

我正在尝试根据文章 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 获取事件菜单 id 并添加到生成的链接,参数 "&Itemid=MyActiveMenuId" (这发生在 route.php 文件中)。但是由于事件菜单中不存在该文章,因此生成的链接将不起作用。

我知道如果 API 只是忽略“项目菜单 id”而不是获取“事件菜单 id”它会起作用,但我可以在不更改 Joomla 代码的情况下做到这一点吗?此外,我希望在文章实际属于菜单的情况下继续考虑“项目菜单 ID”,因此生成的 URL 将是 SEF。

有什么办法可以解决吗?或者每篇文章都必须属于一个菜单项?

我的 Joomla 版本是 2.5.13

最佳答案

如果您尝试根据文章 ID(代码中的 $articleID)生成 URL,您的查询应如下所示:

select id from #__menu where link='index.php?option=com_content&view=article&id=$articleID';

对于此示例,我们假设您将结果存储在 $menuID 中,或者 $hasMenuID===false。然后,您将像这样确定输出 URL:

if($hasMenuID===false) $outURL = "index.php?option=com_content&id=$articleID";
else $outURL = "index.php?option=com_content&itemid=$menuID";

如果您想要良好的 SEF 友好 URL,您可以申请 JRoute .另外,请不要忘记在初始查询之前将您的 $articleID 类型转换为整数。 SQL 安全等等。

关于php - Joomla 2.5 - 根据文章 ID 生成 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18316204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com