2011-02-15 2 views
6

("헤드"블록에 블록을 삽입 할 기회를 원한다면 어떤 magento 프론트 엔드 이벤트를 관찰해야합니까?관찰 된 이벤트를 통해 헤드에 마젠타 블록을 주입

관찰자의 코드에서 현재 레이아웃에 핸들 (예 : not_logged_in)이 설정되어 있는지 확인하려면 어떻게해야합니까?

+0

그래,이 이벤트 목록 http://masteringmagento.com/2010/06/events-list-in-magento-community-1-4/을 찾았고 controller_action_layout_render_before를 사용할 것입니다. 이제 핸들을 어떻게 확인합니까? – epeleg

+2

레이아웃 파일을 사용하지 않는 이유는 무엇입니까? – clockworkgeek

+0

내 경우에는 "새로운"레이아웃이 템플릿을 변경하고 블록을 추가 할뿐만 아니라. 그래서 일부 전제 조건들이 아직 충족되지 않았다면 (확장이 아직 제대로 구성되지 않았다면) 수정을 원하지 않습니다. layout xml 파일에 "onlyIf"속성이있는 헬퍼 함수를 ​​가리키는 경우 오버 라이딩이 실제로 수행되어야 하는지를 결정할 수 있다면 좋을 것입니다. – epeleg

답변

4

controller_action_layout_generate_blocks_after 

이벤트에게 시험을주십시오. Layout 개체와 그 자식 블록은 이벤트가 발생하는 지점에서 인스턴스화되어야합니다.

가 오직 하나의 레이아웃 객체가, 그리고 당신이

// get the layout->get the updates manager->get the handles 
$handles = Mage::getSingleton('core/layout')->getUpdate()->getHandles(); 
var_dump($handles); 

당신이 프런트 엔드 코드에 노력하고 젠토 규칙에 충실하려는 경우와 연극에서 핸들을 잡아 수 있습니다, 그것은 추가 아마 더 낫다 layout.xml 파일을 모듈에 추가하고 레이아웃 파일을 사용하여 블록을 추가하십시오. 새로운 것을 알아내는 것보다 덜 재미 있습니다!

+0

핸들 포인터에 감사드립니다. 이 주제에 대한 지원이 거의 없다는 사실에 놀랐습니다. ie isHandleSet 또는 이와 비슷한 것 ... – epeleg

+0

@epeleg 1. 놀랐습니까? 당신은 Magento에게 새로운 것이어야합니다 :) 2. 시스템의 클라이언트 프로그래머로서, 당신은 실제로 핸들과 많은 상호 작용을하지 않아야합니다. 핸들을 사용하면 레이아웃 레이아웃에서 가져올 XML 업데이트를 레이아웃 시스템에 알릴 수 있습니다. 재미있는 것은 무엇이든을 위해 그 (것)들을 사용하여, 아마 선의 아래 말썽을 요구하고있다. –

+0

1. 유죄로 유죄이지만, 모든 지나가는 날과 함께 그 활동에 대한 더 나은 이해를 얻고 있습니다. 2.나는 이것을 알고 있으며 기본적으로 이것이 내가하고 싶은 일이다. 단지 그것을 프로그램 적으로 그리고 감산 적으로하지 않기 때문에, 내가 그것을 토글하는 것을 허용합니다. 3. 내가 보았던 코드가 올바르게 언더우드에 있다면 핸들을 키의 일부로 사용하여 확장 기능의 상태가 변경되면 캐시를 무효화 할 핸들을 추가 할 수도 있습니다. b.t.w - 레이아웃 객체에 주어진 레이아웃이 갖는 블록을 볼 수있는 합리적인 방법이 있습니까? – epeleg

1

블로그의 플러그를 고맙게 생각하지만 clockworkgeek이 맞습니다. 이를 달성하는 가장 좋은 방법은 레이아웃 파일을 사용하여 필요한 블록을 추가하는 것입니다. 또한 이러한 블록이 임의의 코드를 기반으로 자신의 렌더링 동작을 변경할 수도 있습니다.

레이아웃을 사용할 수없는 이유가있는 경우 질문에 정교하게 답해 주시면 기꺼이 도와 드리겠습니다.

감사합니다, 조

+0

"블로그에 플러그인"?? 질문에 대한 논평에서 이유를 보아라. – epeleg

관련 문제