2009-11-11 86 views
2

到目前为止,我正在以最不舒服的方式重新发明车轮。我可以感觉到,这将在一天之内破裂,并给我带来很大的痛苦。因此,我正在寻找一种更好的方式来获取文章别名并构建菜单项url或文章url。是否没有joomla api调用让这更简单/更清洁/更具前瞻性?有没有更好的方式来建立这个joomla网址?

/* 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

也许你可以在你想达到的的Joomla API路由器上没有帮助还扩大了什么? – 2009-11-15 20:38:54

回答

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); 
} 

Google文档JROUTE这里: http://api.joomla.org/Joomla-Framework/JRoute.html

这也得到周围SQL逃避问题,你可以得到,如果有别名中的引号;

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

相关问题