2012-07-22 23 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'); 
相關問題