方法JComponentHelper :: isEnabled('com_extension',true);检查是否安装了扩展并返回布尔值。
由于self :: getComponent($ option,$ strict),该函数还会抛出异常通知,因为组件未安装;在同一个助手班。
如果没有安装组件,有没有办法避免通知?
答案 0 :(得分:1)
检查数据库以查看是否已安装并启用该组件。
$db = JFactory::getDbo();
$db->setQuery("SELECT enabled FROM #__extensions WHERE name = 'component name'");
$is_enabled = $db->loadResult();
如果$is_enabled
的值为1
,则表示您的组件已启用。
答案 1 :(得分:1)
虽然这是一个老问题,但它也是谷歌的第一个结果之一,我想分享对我有用的东西,同时避免额外的数据库查询。
为避免异常,您还可以检查扩展的入口点文件是否存在,如:
if (file_exists(JPATH_ADMINISTRATOR . '/components/com_extension/extension.php') && JComponentHelper::isEnabled('com_extension', true))
{
// Your code here
}
答案 2 :(得分:0)
您可以使用相同的函数isEnabled并捕获该异常,因此如果抛出异常,则不会安装该组件。
答案 3 :(得分:0)
我遇到同样的问题。我正在尝试提交错误报告。我尝试了JComponentHelper::isEnabled()
和JComponentHelper::getParams()
方法。在这两种情况下,如果将strict参数(第二个参数)设置为true,如
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方法中设置了错误。
无法抑制错误。
根据上面的解决方案,我似乎正在编写自己的文章。扩展表应该有一个安装的任何扩展的记录,所以这似乎是一种合理的方法,但非常令人沮丧的是,上述函数的返回值不反映文档化的API。
答案 4 :(得分:0)
结帐
JComponentHelper::isInstalled('com_extension');