从Joomla内容数据库中提取别名

时间:2013-04-30 19:29:05

标签: php sql joomla alias

所以我试图从数据库中提取当前文章的别名(放置代码的文章)。

我有一个PHP代码段来提取当前文章类别的别名:

<?php // Get category alias
$db = &JFactory::getDBO();            

$option   = JRequest::getCmd('option');
$view   = JRequest::getCmd('view');

$temp   = JRequest::getString('id');
$temp   = explode(':', $temp);
$id   = $temp[0];

/* Checking if we are making up an article page */
if ($option == 'com_content' && $view == 'article' && $id)
{            
   /* Trying to get CATEGORY alias from DB */
   $db->setQuery('SELECT cat.alias FROM #__categories cat RIGHT JOIN #__content cont ON cat.id = cont.catid WHERE cont.id='.$id);   
   $category_alias = $db->loadResult();           
}
?>

然后我使用变量$category_alias作为iframe的PHP参数。所有这些都使用插件DirectPHP嵌入到文章中。

我的问题是重写此代码以提取当前文章的别名而不是当前的CATEGORY。

我已经阅读了Joomla文档,但我完全不知道我需要使用哪些表/列来获取文章的别名。

非常欢迎任何帮助!

1 个答案:

答案 0 :(得分:2)

您使用了大量遗留代码:

  • 不应使用JRequest来访问请求参数。
  • 每个引用分配对象,因此不要对对象使用引用运算符(&amp;)。
  • 使用查询界面。
  • 防止您的代码针对SQL注入。

您要查找的别名值与文章一起存储在内容表中。

您的代码 - 连同建议的更正 - 将如下所示:

<?php
$input  = JFactory::getApplication()->input;
$option = $input->getCmd('option');
$view   = $input->getCmd('view');
$id     = array_shift(explode(':', $input->getString('id', 0)));

if ($option == 'com_content' && $view == 'article' && !empty($id))
{
    $db    = JFactory::getDBO();
    $query = $db->getQuery(true)
        ->select('alias')
        ->from('#__content')
        ->where('id=' . (int)$id);
    $db->setQuery($query);   
    $article_alias = $db->loadResult();           
}

然后可以通过$article_alias访问您文章的别名(但只能在if区块内访问!)。