可以放入$ db = JFactory :: getDBO();在Joomla模板本身?

时间:2012-12-03 06:42:45

标签: php joomla

我是Joomla的新手,我在EasyBlog组件上工作,我想创建一个类别列表作为菜单,并在当前活动菜单中添加一个类。为此,我必须连接到数据库并使用$db = JFactory::getDBO();

获取类别ID

我的问题是,可以在我的网站的index.php模板上使用$db = JFactory::getDBO();来获取ID吗?

这是我目前的脚本。

$view   = JRequest::getCmd('view');
$temp   = JRequest::getString('id');

if ($view == 'entry' or $view == 'tags' or $view == 'archive' or $view == 'blogger' or $view == 'teamblog') {

    $db = JFactory::getDBO();
    $option   = JRequest::getCmd('option');
    $temp   = explode(':', $temp);
    $id   = $temp[0];
        if ($option == 'com_easyblog' && $view == 'entry' && $id)
        { $db->setQuery('SELECT category_id FROM #__easyblog_post WHERE id='.$id);
        $category_id = $db->loadResult(); //this is current article’s category ID
        }
    //echo $category_id; //show it
     $cat_id = $category_id;

    }
    else{
     $cat_id = $temp;
    }

2 个答案:

答案 0 :(得分:0)

这真的不太好。但是如果你使用页面级缓存它应该可以工作:

确保已启用缓存插件,然后切换到调试模式,并按两次页面。

在第二次加载时,您不应该看到列出的查询。

如果是这种情况,你可以保留它。

如果查询仍然存在,则表示未缓存,并且您的网站速度变慢。

答案 1 :(得分:0)

这不是正确的解决方案,但实际上解决了这个问题。

然而,你有其他更好的解决方案(在我看来):

1:使用插件:如果您需要在每个页面上使用此菜单并希望在模板中轻松显示它,则建议使用插件。有关插件触发,请参阅http://docs.joomla.org/Triggering_content_plugins_in_your_extension。检查任何简单插件的代码,看看如何编写这个。插件基本上是你可以在任何地方使用的功能。你可以在插件中添加静态变量并缓存cat_id,然后你就可以在网站的每个地方使用它,代码永远不会执行两次。它将从模板中删除所有“控制器和模块”逻辑。您甚至不需要使用普通触发器就可以执行静态函数,因为类将在programm start中定义。

2:建议使用此解决方案。创建模块。在这种情况下,您可以缓存easilly缓存所有resourcess,并且您不需要创建逻辑来将其分配给选项(当然,如果您可以使用itemid执行此操作)。当然,在这种情况下,您还需要添加用于创建菜单项的完整代码,如果不是,则必须将其推送到全局范围,这也不是一个非常好的解决方案。

3:模板覆盖。我不确定它是否适用于这种情况,但您始终可以使用模板覆盖http://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core。在这种情况下,您可以删除主模板中的整个代码,并将其保留在组件模板中。