2

これまでのところ、私はここで最も不快な方法で車輪を再発明しています. これがいつか壊れて、私に多くの痛みを引き起こすだろうと、私は腸で感じることができます. したがって、記事のエイリアスを取得して、メニュー項目の 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);
4

1 に答える 1

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=」ビットが必要です。もちろん、その項目 ID をエイリアスから取得することはできません。同じ記事を指す複数のメニュー項目が存在する可能性があります ;)。

于 2009-11-26T00:40:24.143 に答える