Joomla 2.5 - 根据文章ID生成URL

时间:2013-08-19 14:21:55

标签: php api joomla2.5 joomla-extensions

我正在尝试为文章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

2 个答案:

答案 0 :(得分:1)

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

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

对于此示例,我们假设您将结果存储在$menuID$hasMenuID===false中。然后,您将确定输出网址,如下所示:

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

如果您想要不错的SEF友好网址,则可以应用JRoute。另外,在初始查询之前,请不要忘记将$ articleID强制转换为整数。 SQL安全和所有。

答案 1 :(得分:1)

每篇文章都不需要与菜单相关联即可使用。

您可能希望通过JRoute运行网址以获取完整网址。

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

您还可以使用.htaccess将网址重定向到另一个网址 还有其他扩展,可以帮助您重定向到网址。

对于网址的其余部分,您需要知道要呼叫的组件 (作为上面的选项添加,内容管理器总是com_content) 和视图(文章是文章)。 您可以通过检查/ components / com_content / views /下的文件结构来查看com_content可用的不同视图。 除了文章,你应该看到文章,类别和类别以及其他一些。