2009-11-11 1 views
2

Jusqu'à présent, je ré-invente la roue ici de la manière la plus inconfortable. Je peux sentir dans mon intestin que cela va casser un jour et me causer beaucoup de douleur. Par conséquent, je suis à la recherche d'un meilleur moyen de prendre un alias d'article et de construire l'URL de l'élément de menu ou l'URL de l'article. N'y a-t-il pas d'appels Joomla API qui rendent cela plus facile/plus propre/plus à l'épreuve du futur?Existe-t-il une meilleure façon de créer cette URL 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

Peut-être que vous pouvez développer ce que vous voulez atteindre que le routeur API Joomla n'a pas encore aidé? –

Répondre

1

Utilisez JRoute? En supposant que vous commencez toujours avec un alias, un plus « Joomla » façon faire cela pourrait être quelque chose comme:

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

Docs pour JRoute ici: http://api.joomla.org/Joomla-Framework/JRoute.html

Cela devient également autour des questions qui s'échappent SQL que vous Je pourrais aussi mentionner que si vous voulez le lien de menu spécifiquement - vous devez avoir le bit '& itemid =' à la fin du chemin passé à JRoute! Bien sûr, vous ne pouvez pas obtenir cet itemid de l'alias - il peut y avoir plusieurs éléments de menu pointés vers le même article;).

Questions connexes