2012-07-22 5 views
1

메소드 JComponentHelper :: isEnabled ('com_extension', true); 확장이 설치되어 있는지 확인하고 부울을 반환합니다.예고없이 통지없이 설치되어 있는지 확인하십시오.

이 함수는 self :: getComponent ($ option, $ strict)로 인해 구성 요소가 설치되어 있지 않음을 예외로 throw합니다. 같은 도우미 클래스에서.

구성 요소가 설치되어 있지 않은 경우 통지를 피할 수있는 방법이 있습니까?

답변

1

데이터베이스를 점검하여 구성 요소가 설치되어 있고 활성화되어 있는지 확인하십시오. $is_enabled의 값이 1 경우

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

는 다음 구성 요소를 사용할 수 있습니다.

+0

레거시 Joomla 1.5.x의 경우 쿼리는'SELECT'enabled' FROM #__components WHERE'name' = 'COM_NAME'' –

0

동일한 함수 isEnabled를 사용하여 해당 예외를 catch 할 수 있으므로 예외가 throw되면 구성 요소가 설치되지 않습니다.

+1

예외가 자동으로 발생하고있는 방법에 없다 통지를 표시하지 않고 예외를 잡으십시오. 메소드의 코드를 확인하고 통지를 사용 불가능하게하는 방법을 찾았는지 확인하십시오. – Stilero

+0

+1 Stilero. 핵심 오류 처리를 무시할 수있는 방법을 찾지 못했습니다. 문제는 isEnabled가 확장을로드하려고 시도하고 코어가 JLog를 통해 오류를 발생 시키도록 트리거하는 것입니다. 자세한 것은 JComponentHelper :: _ load()를 참조하십시오. –

+0

코어를 자세히 살펴보면 어쨌든이 동작이 사용되지 않는 것처럼 보입니다. 핵심 JError :: raiseWarning은 PHP Execeptions를 위해 더 이상 사용되지 않습니다. –

0

동일한 문제로 문제가 있습니다. 나는 그것에 대한 버그 보고서를 제출하려고합니다. 나는 JComponentHelper::isEnabled()JComponentHelper::getParams() 방법을 시도했다. 두 경우 모두 구성 요소가 12.1에 대한 설명서에 따라 설치되어 있지 않은 경우, 메소드가 false를 반환해야합니다

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

같은 사실에 대한 엄격한 매개 변수 (두 번째 파라미터)를 설정합니다. getParams 메서드가 빈 배열을 반환하는 것을 발견했습니다. 여기서 isEnabled 메서드는 true를 반환합니다. 예를 들어 나는 내가 예외 중 하나 방법에서 예외를 잡으려고 노력 테스트를 잡을 수있을 것 같지 않기 때문에 데이터베이스 솔루션을 시도 하겠어이

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

을 테스트했다. try catch를 무시하고 isEnabled 메소드에서 오류를 설정한다는 오류를 표시합니다.

I tried this solution as well

오류를 억제하기 위해 작동하지 않았다.

나는 위의 해결책에 따라 자기 자신을 쓰는 것 같습니다. Extension 테이블은 설치된 모든 Extension에 대한 레코드를 가져야하므로 건전한 방법처럼 보이지만 위의 함수에 대한 반환 값은 문서화 된 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');