JComponentHelper :: isEnabled('com_extension',true);方法檢查是否安裝了擴展並返回布爾值。檢查擴展是否在未通知的情況下安裝失敗
該函數也會拋出一個異常通知它,由於self :: getComponent($ option,$ strict),組件未安裝;在同一個助手類中。
如果未安裝組件,是否有避免通知的方法?
JComponentHelper :: isEnabled('com_extension',true);方法檢查是否安裝了擴展並返回布爾值。檢查擴展是否在未通知的情況下安裝失敗
該函數也會拋出一個異常通知它,由於self :: getComponent($ option,$ strict),組件未安裝;在同一個助手類中。
如果未安裝組件,是否有避免通知的方法?
檢查數據庫以查看組件是否已安裝並啓用。
$db = JFactory::getDbo();
$db->setQuery("SELECT enabled FROM #__extensions WHERE name = 'component name'");
$is_enabled = $db->loadResult();
如果$is_enabled
值爲1
,那麼你的組件已啓用。
您可以使用相同的函數isEnabled並捕獲該異常,因此如果引發異常,則不安裝該組件。
異常被自動拋出,有沒有辦法在不顯示通知的情況下捕獲異常。檢查該方法的代碼並查看是否找到禁用通知的方法。 – Stilero 2012-08-29 09:19:30
+1 Stilero。我無法找到覆蓋核心錯誤處理的方法。問題是isEnabled嘗試加載擴展,這反過來觸發核心通過JLog引發錯誤。有關更多信息,請參閱JComponentHelper :: _ load()。 – 2013-04-26 18:24:06
進一步研究核心時,看起來像這種行爲反正被棄用。核心JError :: raiseWarning已被棄用,以支持PHP Execeptions。 – 2013-04-26 18:25:55
我遇到了同樣的問題。我正在嘗試提交一份關於它的錯誤報告。我已嘗試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方法中設置。
沒有工作壓制錯誤。
看起來像我正在按照上面的解決方案寫我自己的。擴展表應該有安裝擴展的記錄,這似乎是一種很好的方式,但是令人沮喪的是,上述函數的返回值並不反映已記錄的API。
雖然意識到這是一個老問題,但它也是Google的第一個結果,我想分享一下對我有用的東西,同時避免額外的數據庫查詢。
爲避免該異常,您還可以查看是否擴展的入口點文件是否存在,如:
if (file_exists(JPATH_ADMINISTRATOR . '/components/com_extension/extension.php') && JComponentHelper::isEnabled('com_extension', true))
{
// Your code here
}
退房
JComponentHelper::isInstalled('com_extension');
對於傳統的Joomla 1.5.x,查詢是'SELECT'enabled' FROM #__components WHERE'name' ='COM_NAME'' – 2013-04-26 18:18:37