我是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;
}发布于 2013-01-26 07:10:30
这真的不太好。但是如果你使用页面级缓存,它应该可以工作:
确保缓存插件已启用,然后切换到调试模式,并点击页面两次。
在第二次加载时,您应该看不到列出的查询。
如果是这样的话,你可以保留它。
如果查询仍然在那里,这意味着它没有被缓存,您正在减慢您的网站。
发布于 2014-01-13 23:36:37
这不是正确的解决方案,但它实际上解决了问题。
然而,你有其他更好的解决方案(在我看来):
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。在这种情况下,你可以去掉主模板中的整个代码,只把它留在组件模板中。
https://stackoverflow.com/questions/13678376
复制相似问题