레이아웃 XML의 잘못된 로딩 순서


15

커뮤니티 또는 로컬 코드 풀에 관계없이 관리 영역의 레이아웃 파일을 만들 때 Magento가 Adminhtml 모듈 레이아웃 XML을로드하기 전에 해당 레이아웃 XML을로드하는 경우가 있습니다. 결과적으로 적용 할 블록이 없으므로 참조 호출이 삭제됩니다.

캐싱은 여기서 역할을하지 않습니다. 모듈 선언 파일 Mage_Adminhtml<depends/>노드에 추가 했습니다 .

이것이 이전에 있었던 문제입니까? 그렇다면 어떻게 해결됩니까?

나는이 문제를 여러 번 겪었고 매번 해결책을 얻었지만 처음에 이것이 일어나는 원인을 알 수는 없습니다.

답변:


16

구체적인 예가 없으면 말하기가 어렵지만 파일 순서와 처리 순서 문제가 있다고 생각합니다.

특히, Magento는 XML 파일을 모듈 순서대로로드하고 local.xml마지막에 고정합니다. 다음은 일반적인 목록입니다.

frontend/base/default/layout/core.xml
frontend/rwd/default/layout/page.xml
frontend/rwd/default/layout/directory.xml
frontend/rwd/default/layout/cms.xml
frontend/rwd/default/layout/customer.xml
frontend/rwd/default/layout/catalog.xml
frontend/rwd/default/layout/catalog_msrp.xml
frontend/rwd/default/layout/catalogsearch.xml
frontend/base/default/layout/payment.xml
frontend/rwd/default/layout/sales.xml
frontend/base/default/layout/sales/billing_agreement.xml
frontend/base/default/layout/sales/recurring_profile.xml
frontend/base/default/layout/cataloginventory.xml
frontend/base/default/layout/shipping.xml
frontend/rwd/default/layout/checkout.xml
frontend/rwd/default/layout/paypal.xml
frontend/base/default/layout/bml.xml
frontend/rwd/default/layout/poll.xml
frontend/rwd/default/layout/review.xml
frontend/rwd/default/layout/tag.xml
frontend/base/default/layout/reports.xml
frontend/base/default/layout/googleanalytics.xml
frontend/rwd/default/layout/wishlist.xml
frontend/base/default/layout/paypaluk.xml
frontend/base/default/layout/giftmessage.xml
frontend/rwd/default/layout/contacts.xml
frontend/base/default/layout/sendfriend.xml
frontend/rwd/default/layout/rss.xml
frontend/base/default/layout/productalert.xml
frontend/rwd/default/layout/oauth.xml
frontend/base/default/layout/authorizenet.xml
frontend/rwd/default/layout/bundle.xml
frontend/rwd/default/layout/captcha.xml
frontend/base/default/layout/centinel.xml
frontend/rwd/default/layout/newsletter.xml
frontend/rwd/default/layout/downloadable.xml
frontend/base/default/layout/pagecache.xml
frontend/rwd/default/layout/persistent.xml
frontend/base/default/layout/weee.xml
frontend/base/default/layout/xmlconnect.xml
frontend/base/default/layout/moneybookers.xml
frontend/base/default/layout/pulsestorm_checkoutstep.xml
frontend/rwd/default/layout/local.xml

주문 레이아웃 XML 파일이로드되는 순서에 따라 핸들 당 주문 레이아웃 XML 규칙이 적용됩니다  . 사람들을 뒤 흔드는 것은이 마지막 부분입니다. 핸들은 이러한 최상위 XML 노드입니다.

<config>
    <handle_name>
    </handle_name>
</config>

핸들은 레이아웃에 대한 일종의 이벤트입니다. 매 페이지 요청마다 Magento는 많은 핸들을 발행합니다. Commerce Bug 를 사용 하여 특정 페이지 요청에 대해 어떤 핸들이 발행되는지 확인할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이미지가 해제 된 사용자의 경우 해당 특정 페이지 요청에 대해 발행 된 핸들은

<default />
<catalog_category_layered_nochildren />
<STORE_default />
<THEME_frontend_rwd_default />
<catalog_category_view />
<catalog_category_default />
<CATEGORY_3 />

이것이 의미하는 바는 Magento가 모든 defaultXML 청크를 먼저 실행한다는 것입니다 . 먼저 파일에 대해 모든 파일에 대해 core.xml모든 default청크를 실행합니다 .page.xmllocal.xml

그런 다음 Magento는 모든 catalog_category_layered_nochildrenXML 청크를 먼저 실행합니다 . 먼저 core.xml파일에 대해 page.xml파일에 대해 끝까지 진행합니다 local.xml.

이것은 각 핸들마다 계속됩니다.

당신이 레이아웃 업데이트 XML의 비트가있는 경우이 방법이 무엇인지 local.xml, 안쪽 default손잡이, 그것을 실행 하기 전에 에서 레이아웃 업데이트 XML의 약간 core.xml안쪽이의 catalog_category_layered_nochildren핸들입니다. 지금까지는 레이아웃 XML 시스템에서 가장 혼동되는 부분이 있는데, 특히 "local.xml loads last"라는 기존의 지식이 떠 있기 때문입니다.

위의 내용이 약간 혼란스럽고 Layout XML 시스템에 대해 더 자세히 알아야 할 경우에도 필자의 책 No Frills Magento Layout 이 시스템 내부를 배우는 가장 좋은 방법 이라고 생각 합니다.

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