2012-07-22 24 views
1

JComponentHelper :: isEnabled('com_extension',true);方法检查是否安装了扩展并返回布尔值。检查扩展是否在未通知的情况下安装失败

该函数也会抛出一个异常通知它,由于self :: getComponent($ option,$ strict),组件未安装;在同一个助手类中。

如果未安装组件,是否有避免通知的方法?

回答

1

检查数据库以查看组件是否已安装并启用。

$db = JFactory::getDbo(); 
$db->setQuery("SELECT enabled FROM #__extensions WHERE name = 'component name'"); 
$is_enabled = $db->loadResult(); 

如果$is_enabled值为1,那么你的组件已启用。

+0

对于传统的Joomla 1.5.x,查询是'SELECT'enabled' FROM #__components WHERE'name' ='COM_NAME'' – 2013-04-26 18:18:37

0

您可以使用相同的函数isEnabled并捕获该异常,因此如果引发异常,则不安装该组件。

+1

异常被自动抛出,有没有办法在不显示通知的情况下捕获异常。检查该方法的代码并查看是否找到禁用通知的方法。 – Stilero 2012-08-29 09:19:30

+0

+1 Stilero。我无法找到覆盖核心错误处理的方法。问题是isEnabled尝试加载扩展,这反过来触发核心通过JLog引发错误。有关更多信息,请参阅JComponentHelper :: _ load()。 – 2013-04-26 18:24:06

+0

进一步研究核心时,看起来像这种行为反正被弃用。核心JError :: raiseWarning已被弃用,以支持PHP Execeptions。 – 2013-04-26 18:25:55

0

我遇到了同样的问题。我正在尝试提交一份关于它的错误报告。我已尝试JComponentHelper::isEnabled()JComponentHelper::getParams()方法。在这两种情况下,如果设置了严格的参数(第二个参数),以真正喜欢

JComponentHelper::isEnabled('com_name', true); 

如果按照12.1文档中的组件未安装方法应返回false。我发现getParams方法返回一个空数组,其中isEnabled方法返回true。例如,我测试了这个

JComponentHelper::isEnabled('com_hfdyugagfeoyuag', true); //totally bogus component name 
returns true. 

我要去尝试数据库解决方案,因为我似乎没有能够捕获异常无论是在测试追赶无论从方法例外。它只是忽略try catch并仍然显示错误,这意味着错误正在isEnabled方法中设置。

I tried this solution as well

没有工作压制错误。

看起来像我正在按照上面的解决方案写我自己的。扩展表应该有安装扩展的记录,这似乎是一种很好的方式,但是令人沮丧的是,上述函数的返回值并不反映已记录的API。

1

虽然意识到这是一个老问题,但它也是Google的第一个结果,我想分享一下对我有用的东西,同时避免额外的数据库查询。

为避免该异常,您还可以查看是否扩展的入口点文件是否存在,如:

if (file_exists(JPATH_ADMINISTRATOR . '/components/com_extension/extension.php') && JComponentHelper::isEnabled('com_extension', true)) 
    { 
     // Your code here 
    } 
0

退房

JComponentHelper::isInstalled('com_extension'); 
相关问题