检查扩展是否安装,恕不另行通知

时间:2012-07-22 07:15:08

标签: joomla joomla1.5 joomla2.5 joomla1.7 joomla1.6

方法JComponentHelper :: isEnabled('com_extension',true);检查是否安装了扩展并返回布尔值。

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

如果没有安装组件,有没有办法避免通知?

5 个答案:

答案 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方法中设置了错误。

I tried this solution as well

无法抑制错误。

根据上面的解决方案,我似乎正在编写自己的文章。扩展表应该有一个安装的任何扩展的记录,所以这似乎是一种合理的方法,但非常令人沮丧的是,上述函数的返回值不反映文档化的API。

答案 4 :(得分:0)

结帐

JComponentHelper::isInstalled('com_extension');