레이아웃에서 <remove name =” "/>와 <action method =”unsetChild”>의 차이점


21

차이점은 무엇이며 <action method=”unsetChild”>그리고 <remove name=""/>?

두 기능 모두 레이아웃에서 블록을 제거하는 데 사용됩니다.

누군가가 예를 들어 설명 할 수 있습니까?

답변:


21

<remove name="" />의 글로벌 블록 범위에서 작동합니다 Mage_Core_Model_Layout. 여기에 수집 Mage_Core_Model_Layout::generateXml()에서 지정된 이름을 가진 블록을 방지하기 위해 사용 도 인스턴스화 . 또한, 선언 하위 블록 <remove />에드 블록은 또한 인스턴스화 할 수 없습니다 .

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()는 조치가 호출되는 상위 블록 인스턴스에서 표시된 하위 블록 ( 이름이 아닌 별명 으로)을 나열 해제하는 블록 레벨 메소드입니다 . 블록 인스턴스가 여전히 생성 되더라도 렌더링 된 출력에서 ​​블록이 사라지는 경우가 가장 많습니다. 또는 메소드 와 함께 사용하여 "이동"을 수행하는 데 사용됩니다.::append()::insert()


이것에 추가하기 위해 블록에 별칭이 없으면 이름과 일치합니다.
벤 크룩

2
별명이 제공되지 않으면 alias하위에 대한가로 설정됩니다 name. 👍
benmarks

2

<remove name="" />, 모든 레이아웃이 완료되면 Magento는 추가 된 레이아웃 핸들에 관계없이 name = ""으로 표시된 블록을 완전히 삭제합니다. 이 방법을 사용하면 한 위치에서 블록을 제거한 다음 다른 위치에 추가 할 수 없습니다

<action method="unsetChild">사용중인 컨텍스트에서만 작동합니다. unsetChild는 기존 블록을 한 곳에서 다른 곳으로 이동하기 위해 만들어집니다. 특정 레이아웃 핸들에서 특정 블록을 제거한 다음 다른 위치 또는 레이아웃 핸들에 삽입하려면이 방법을 사용해야합니다.


좀 빠지는; 수정에 대한 내 대답을 참조하십시오.
benmarks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.