0

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

我有一个 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 嵌入到文章中。

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

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

非常欢迎任何帮助!

4

1 回答 1

2

您正在使用大量遗留代码:

  • JRequest 不应用于访问请求参数。
  • 对象是按引用分配的,因此不要对对象使用引用运算符 (&)。
  • 使用查询界面。
  • 保护您的代码免受 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块内!)访问您文章的别名。

于 2013-05-01T10:49:47.070 回答