我是Joomla的新手,我在EasyBlog组件上工作,我想创建一个类别列表作为菜单,并在当前活动菜单中添加一个类。为此,我必须连接到数据库并使用$db = JFactory::getDBO();
我的问题是,可以在我的网站的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;
}
答案 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。在这种情况下,您可以删除主模板中的整个代码,并将其保留在组件模板中。