Magento 이벤트의 전체 목록을 어디에서 찾을 수 있습니까?


94

마 젠토에는 이벤트라는 후크 형 시스템이 있다는 것을 알고 있습니다. 누구든지 호출 할 수있는 이벤트를 결정하는 데 사용할 수있는 전체 목록 또는 스크립트가 있습니까?


4
나는 이것을 좋은 치트 시트로 사용한다 nicksays.co.uk/magento-events-cheat-sheet-1-7
Derrik Nyomo

1
@DerrikNyomo-당신은 그것을 제공하는 정보의 요약과 함께 답변으로 게시해야합니다. :-)
benmarks

1
이벤트에 대한 치트 시트는 실제로 '내가 원하는 이벤트가 존재하지 않는다'는 잘못된 의미를 제공하고 사용 가능한 이벤트를 놓친 코딩 시간을 낭비 할 수 있기 때문에 번거 로움이 많습니다. 이 질문에 대한 답변을 게시했습니다. 링크 및이 답변은이 질문과 관련이 있습니다. 완전한 '목록'을 제공하지는 않지만 연결하려는 액션 / 페이지로드에 대한 전체 이벤트 목록을 제공합니다.
ProxiBlue

답변:


102

대부분의 이벤트는 동적으로 이름이 지정되므로 모든 마 젠토 이벤트 목록이 없습니다.

당신이 저에게 묻는다면,이 주요 사건 (및 결과)을 아는 것이 좋은 출발점입니다 (닉의 목록 제외).

Mage_Core_Model_Abstract에서 확장 된 모든 객체는로드, 저장 및 삭제와 관련된 많은 이벤트를 전달합니다.

app/code/core/Mage/Core/Model/Abstract.php:255
Mage::dispatchEvent($this->_eventPrefix.'_load_before', $params);
// e.g. sales_order_load_before, checkout_cart_load_before

예를 들어, 객체가로드 된 후 검사를 추가하려면

app/code/core/Mage/Core/Model/Abstract.php:267
Mage::dispatchEvent($this->_eventPrefix.'_load_after', $this->_getEventData());
// e.g. cms_page_load_after

객체를 저장하기 전에 추가 데이터를 추가

app/code/core/Mage/Core/Model/Abstract.php:391
Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());
// e.g. catalog_product_save_before

"부모"가 저장된 후 다른 모델을 저장하려면

app/code/core/Mage/Core/Model/Abstract.php:466  
Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
// e.g. catalogrule_rule_save_after

모델을 삭제하기 전에 정리

app/code/core/Mage/Core/Model/Abstract.php:501
Mage::dispatchEvent($this->_eventPrefix.'_delete_before', $this->_getEventData());
// e.g. store_delete_before

모델을 삭제하기 전이나 나중에 정리 하시겠습니까? 아직 거래 중입니다!

app/code/core/Mage/Core/Model/Abstract.php:529
Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData());
// e.g. website_delete_after

엔터티가 삭제되었는지 확인하려면

app/code/core/Mage/Core/Model/Abstract.php:541
Mage::dispatchEvent($this->_eventPrefix.'_delete_commit_after', $this->_getEventData());
// e.g. customer_delete_commit_after

Mage_Core_Model_Resource_Db_Collection_Abstract에서 확장 된 콜렉션에는 두 가지 일반 이벤트도 있습니다.

예를 들어, 콜렉션을로드하도록 SQL을 변경하려면 다음을 수행하십시오.

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:588
Mage::dispatchEvent($this->_eventPrefix.'_load_before', array(
    $this->_eventObject => $this
));
// e.g. sales_order_status_history_collection_load_before

예를 들어, 객체에 추가 데이터를 추가하려면 다음을 수행하십시오.

app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php:637
Mage::dispatchEvent($this->_eventPrefix.'_load_after', array(
    $this->_eventObject => $this
));
// e.g. sales_order_shipment_collection_load_after

4
아주 좋은 대답입니다. 우리가 위키에서 접할 수있는 것을 바라고 있습니다. 의 중요성 _eventPrefix모델 이벤트는 대상 요청 이벤트는 때때로 유용한 일반적인 블록 행사 및 이벤트를 찾기 위해 기록의 중요성
benmarks

1
우수한. Magento 2에서는 모든 핵심 클래스에 정의 된 이벤트 접두사가 있는지 확인해야합니다. 실제로 이벤트 접두사를 정의하기 위해 클래스를 다시 작성하여 저장 /로드 이벤트에 깔끔하게 연결할 수 있습니다. 흠. 실제로 Magento 2 소스를 직접 확인하겠습니다.
Tim Reynolds

3
나는 보통 가지고 접근 방식은 빠른 편집 / 저장 /로 되돌아이다 app/code/core/Mage/Core/Model/App.phpmage::log($eventName,null,'events.txt',true);받는 dispatchEvent방법. 관찰하려는 페이지를로드하십시오. var / logs / events.txt를 만든 후에는 그대로두고 되 돌리지 마십시오. 더럽습니다. 빨리요 :)
B00MER

2
관찰자가 한 페이지에있게하려면 좋습니다. 그러나 조심해야합니다. 페이팔로 지불 할 때 던져지지 않는 주문 또는 지불 이벤트가 있습니다 ...
Fabian Blechschmidt

어떤 이벤트가 젠토의 @FabianBlechschmidt에 출하 생성 한 후이 발사됩니다인가
Kingshuk 뎁에게

48

블러디 수행 grep 'Mage::dispatchEvent' app/ -rsn이벤트 목록은 Magento 버전, 사용자 정의 및 설치된 확장 프로그램에 따라 다를 수 있으므로 설치와 관련된 이벤트 목록을 제공합니다.


2
그것은 최고의 조언이며, 타사 모듈 이벤트도 포함됩니다. 일반적으로 특정 페이지에 연결할 수있는 이벤트를 알고 싶을 때 app : dispatchEvent 매개 변수를 기록합니다.
Petar Dzhambazov

1
grep은 또한 당신에게 나쁜 정보를 줄 sales_order_place_after것입니다 Checkout/Type/Onepage.php.
kojiro

동적으로 생성 된 모든 이벤트를 완전히 놓치므로 사용 가능한 이벤트 중 일부만 선택하므로 좋지 않은 답변입니다. @PetarDzhambazov는 디스패처에서 로그에 기록한 다음 관심있는 페이지를로드하는 데 유용한 조언을 제공합니다. 가장 좋은 대답은 FabianBlechschmidt
Dom

26

나는 이것을 좋은 치트 시트 http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/로 사용 합니다. 1.7에서 호출 할 수있는 모든 이벤트가 있습니다.


4
이미 컨텐츠를 연결하는 좋은 일을 한 적이 있기 때문에, 가장도 닉은 "젠토 나사"자신의 페이지 :-) 삭제 말합니다 경우 여기에 콘텐츠를 제공하는
benmarks

3
나는이 목록의 팬이 아닙니다. 왜냐하면 1 : 불완전합니다. 2 : Magento에 대한 12129 개의 블로그가 있으며 Magento의 모든 이벤트가 있습니다 (Magento의 일부 위키 페이지).
FlorinelChis

@benmarks는 그동안 무슨 일이 있었는지 짐작합니다 ...
toon81

9

나는이 질문에 대한 답을 알고 있다는 것을 알고 있습니다.

  • 브라우저에서보고 싶은 페이지를 준비합니다
  • app / Mage.php를 엽니 다
  • public static function dispatchEvent처음 에 (ln : ~ 446) //Mage::log($name, null, 'events.log', true);
  • 그 줄을 주석 해제하십시오.
  • 내가있는 페이지 새로 고침
  • 그 라인을 다시 주석

그런 다음 var / log / events.log (~ 40kb)를 열고 해당 페이지에서만 전체 이벤트를 볼 수 있습니다! :)


2
상점 구성이 병합되기 전에 발생하는 일부 이벤트가 누락됩니다.
benmarks

6

답변이 이미 접수되었지만 향후 답변을 게시하겠습니다.

Magento에있는 이벤트 목록을 보려면 3 가지 옵션이 있습니다.

1) 구글은 Magento 이벤트 목록을 작성한 많은 사람들이 있습니다.

2)controller_action_predispatch 다른 이벤트가 호출되기 전에 호출되는 이벤트 인 이벤트 를 연결하는 모듈을 작성하십시오 . 이 모듈 내에서 전달 된 일부 이벤트를 기록 할 수 있습니다.

config.xml에 다음을 추가하십시오.

<events>
    <controller_action_postdispatch>
        <observers>
            <controller_action_after>
                <class>yourmodule/observer</class>
                <method>hookToControllerActionPostDispatch</method>
            </controller_action_after>
        </observers>
    </controller_action_postdispatch>
</events>

그리고 모듈 / 모델 / 관찰자 내부 :

public function hookToControllerActionPostDispatch($observer) {
    Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}

위는 발송 된 모든 이벤트를 기록합니다 ...

3) SSH 액세스 권한이 있으면 다음 명령을 실행하여 모든 이벤트 (및 이벤트가 전달 된 파일)에 대한 개요를 얻을 수 있습니다.

cd /path/to/<magento-root>
grep -nris 'dispatchEvent' app/code/

1
죄송합니다. # 3은 좋지만 답변에서 1과 2의 정보는 실제로 올바르지 않습니다. 1) controller_action_predispatch특히 몇 가지 사건이 발생했다 controller_front_init_before. 2)이 접근 방식은 단순히 발송 된 모든 이벤트를 기록 하지는 않습니다 . 오타 또는 불완전한 섹션입니까?
benmarks

그것을 편집 "most";)
Kenny

2
죄송하지만, 아직 정확하지 않습니다 :-(-더 많은 이벤트가 전달되었습니다 (사전 배포, 레이아웃, 렌더링 및 모델 및 컬렉션로드) ...
benmarks

"일부 이벤트"에 대한 답변을 업데이트했습니다.
Kenny

4

로드 된 페이지에서 볼 수있는 이벤트를 표시하는 멋진 기능이있는 Magento Developer Toolbar를 사용하고 있습니다.



4

Magento의 핵심 Mage 모듈에서 grep을 수행하고 목록을 준수했습니다.

마 젠토 이벤트의 전체 목록

PS 지적한 바와 같이, Magento의 더 이상 사용되지 않는 함수 내에있는 이벤트를 포함 할 수 있으므로 구현 전에 파일 및 라인 참조를 확인하십시오.

제안을 위해여십시오!


1
여전히 서브 클래스 매직 이벤트가 모두 누락되었습니다. 잡을 수 없습니다.
benmarks

마법 이벤트? 역동적 인 것들? plz @benmarks를 자세히 설명해 주시겠습니까
huzefam


@benmarks 동의합니다. 목록을 명시 적으로 준비 할 필요는 없다고 생각합니다
huzefam

따라서 "완전한"의 사용에 기초하여 제공된 나의 의견
benmarks

4
grep "::dispatchEvent" -R * | sort -u

grep "eventPrefix" -R * | sort -u

위에 나열된 grep 명령은 복제본을 많이 렌더링하며 동적으로 생성 된 이벤트 이름을 이해하는 데 필요한 이벤트 접두사 목록을 다루지 않습니다. 이 명령은 두 목록을 고유 한 값으로 만 렌더링합니다. 다른 grep 답변과 같이 -n 플래그를 추가하고 내가 생각하는 줄 번호를 얻을 수 있습니다. 그러나 질문은 코드에서 그들이 어디에 있는지 묻지 않았습니다. ~ _ ~


여기에도 비슷한 대답이 있습니다. 참조 @TimBezhashvyly 의 대답을
라지브 K 다카라 토미에게

sort ..... 이전에 나열된 grep 명령은 복제본 (많은)을 렌더링하며 동적으로 생성 된 이벤트 이름을 이해하는 데 필요한 이벤트 접두사 목록을 다루지 않습니다. 이 명령은 두 목록을 고유 한 값으로 만 렌더링합니다. 다른 grep 답변과 같이 -n 플래그를 추가하고 내가 생각하는 줄 번호를 얻을 수 있습니다. 그러나 질문은 코드에서 그들이 어디에 있는지 묻지 않았습니다.
mprototype

이 설명을 답변에 추가하십시오. 그런 다음 대답은 :-) (다음 upvote에을 할 준비가되어있다) ... 슈퍼 쿨하게
라지브 K 다카라 토미

도움이 되나요?
mprototype

예. +1입니다. :)
Rajeev K Tomy






당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.