Есть ли лучший способ создать этот URL Joomla? - PullRequest
2 голосов
/ 11 ноября 2009

Пока что я заново изобретаю колесо здесь самым неудобным способом. Я чувствую, что в один прекрасный день это сломается и причинит мне много боли. Поэтому я ищу лучший способ взять псевдоним статьи и создать либо 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 Ответ

1 голос
/ 26 ноября 2009

Использовать 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

Я должен также упомянуть, что если вам нужна ссылка на меню - вам нужно иметь бит '& itemid =' в конце пути, передаваемого в JRoute! Конечно, вы не можете получить этот itemid из псевдонима - может быть несколько пунктов меню, указывающих на одну и ту же статью;).

...