2016-11-10 3 views
1

나는 joomla 3 ++을 사용하고 있습니다.이미 호출 된 함수를 호출하지 못하도록하려면?

시스템 플러그인의 구성 요소 클래스에서 메소드를 호출하고 있습니다. 이 메서드를 호출하기 전에 이미 호출되었는지 확인하고 싶습니다.

public function onAfterInitialise() 
{ 
    MyClass::initialize(); 
} 

if (class_exists('MyClass')) // 항상 참 다른 구성 요소

if (method_exists('MyClass', 'initialize')) // 항상 참도

var_dump(MyClass::initialize()); // 사실

내가 직면하고있어 문제 사이에서 탐색 할 때 :

이 항목을 호출하지 않으면 시스템 플러그인이 다른 구성 요소에서 실행되지 않습니다. MyClass::initialize(). 동시에

은 구성 요소 중 하나는 JS 파일이 이미 나는이

이 xx.js가로드 된 파일을 피하기 위해 아마 생각하고 그래서 onAfterInitialize()

에서 MyClass::initialize()라고하면로드 말한다 이미 문제가 있음,

먼저 확인할 수 있습니다. MyClass::initialize()입니다.

답변

1

당신은 MyClass에 호출된다 :이 방법을 사용

JFactory :: 대해 getSession()에?() 메소드의 권리를 초기화 -> 설정 ('init_called', 1, 'your_component'); 당신이

public function onAfterInitialise() 
{ 
    $is_called = JFactory::getSession()->get('init_called','','your_component'); 
    if($is_called){ 
    //already called, do any other code 
    }else{ 
    // Not yet called, do any other code 
    } 
} 

지금 당신은 이미라는 그 기능을 확인하실 수 있습니다 확인 로그 아웃 할 때까지 확인 세션 것이다 명확하지 할 수 있습니다 플러그인 시스템의

. 다른 곳의 클리어 세션이 이것을 사용하십시오

JFactory::getSession()->clear('init_called','your_component'); 
+0

가능한 경우 initialize() 메소드에 아무 것도 쓰지 않는 방법이 있습니까? 하지만 내 플러그인 자체에서 모든 것을 할 수 있습니까? – 112233

+0

yaa, 가능하면 그냥 initialize 메서드를 복사하여 플러그인에 붙여 넣고 $ this-> initialize()를 호출하십시오. 효과가있다. – Alagesan

관련 문제