2

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

我的问题是,可以$db = JFactory::getDBO();在我网站的 index.php 模板上使用来获取 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;
    }
4

2 回答 2

0

真的不好看。但如果您使用页面级缓存,它应该可以工作:

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

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

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

如果查询仍然存在,则意味着它没有被缓存并且您正在减慢您的网站。

于 2013-01-25T23:10:30.333 回答
0

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

但是,您还有其他更好的解决方案(在我看来):

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

2:建议使用此解决方案。创建模块。在这种情况下,您可以轻松缓存所有资源,并且不需要创建将其分配给选项的逻辑(当然,如果您可以使用 itemid 来实现)。当然,在这种情况下,您还需要添加整个代码来创建菜单项,否则您必须将其推送到全局范围,这也不是很好的解决方案。

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

于 2014-01-13T15:36:37.163 回答