有没有更好的方法来构建这个joomla网址?

时间:2009-11-11 09:02:12

标签: php joomla joomla1.5 joomla-sef-urls

到目前为止,我正在以最不舒服的方式重新发明轮子。在我的直觉中,我可以感觉到这将会破坏一天并给我带来很大的痛苦。因此,我正在寻找一种更好的方法来获取文章别名并构建菜单项url或文章url。是否没有joomla api调用使这更容易/更清洁/更具前瞻性?

/* Find article by alias */
$db =& JFactory::getDBO();
$sql = 'select id from #__content where alias=' . "'$alias'";
$db->setQuery($sql);
$row = $db->loadAssoc();
$artId = $row['id'];
if ($artId != null) {
  $artLink = 'index.php?option=com_content&view=article&id='.$artId;
  /* Find menu item by article id */
  $sql = 'select parent,alias from #__menu where link=' . "'$artLink'";
  $db->setQuery($sql);
  $row = $db->loadAssoc();
  $menuLink = '';
  while ($row != null) {
    $menuLink = '/' . $row['alias'] . $menuLink;
    $sql = 'select parent,alias from #__menu where id=' . $row['parent'];
    $db->setQuery($sql);
    $row = $db->loadAssoc();
    }
  $menuLink = 'index.php' . $menuLink;
  }

$articleUrl = ($menuLink != '') ? 'index.php' . $menuLink : JRoute::_($artLink);

1 个答案:

答案 0 :(得分:1)

使用JRoute?假设你仍然以别名开头,那么更像'Joomla'的方式可能是这样的:

/* Find article by alias */
$db =& JFactory::getDBO();
$sql = 'select id from #__content where alias=' . $db->quote($alias);
$db->setQuery($sql);
$row = $db->loadAssoc();
$artId = $row['id'];
if ($artId != null) {
  $articleUrl = JRoute::_('index.php?option=com_content&view=article&id=' . $artId);
}

JRoute的文档: http://api.joomla.org/Joomla-Framework/JRoute.html

如果别名中有引号,这也可以解决SQL转义问题; o

我还应该提一下,如果你想要专门的菜单链接 - 你需要在路径末尾传递给JRoute的'& itemid ='位!当然,你不能从别名中获取itemid - 可以有多个菜单项指向同一篇文章;)。