Ajax 요청에 응답하는 모듈이 있습니다. 여러 제품을 렌더링하고 결과 HTML을 가져 오려고 시도하고 있습니다. 내 컨트롤러는 코드입니다. 테스트 목적으로 ID를 하드 코딩했습니다.Magento의 같은 페이지에 여러 제품 표시
$ id = 52986;
foreach ($ids as $id) {
Mage::helper('catalog/product')->initProduct($id, $this);
$this->loadLayout();
$output[] = $this->getLayout()->getOutput();
Mage::unregister('current_product');
Mage::unregister('product');
}
print_r($output);
난 (각각에 대해 생성 될 수, 즉 A '새로운'레이아웃 렌더링)를 각각 독립적으로 렌더링 foreach는 렌더링에서 각각의 제품을 상정. 분명히 나는 레이아웃 시스템이 어떻게 작동하는지 완전히 이해하지 못한다. 따라서 두 가지 질문이 있습니다.
1) 어떻게 각 제품의 렌더링 된 HTML을 가져올 수 있습니까?
2) 레이아웃이 예상대로 작동하지 않는 이유는 무엇입니까? 그것은 기본적으로 새로운 출력을 추가 젠토을 알려줍니다
<?xml version="1.0"?>
<layout>
<shopthelook_ajax_index>
<remove name="right"/>
<remove name="left"/>
<reference name="content">
<block type="shopthelook_ajax/response" template="shopthelook_ajax/response.phtml" />
</reference>
</shopthelook_ajax_index>
</layout>
(:
관련 정보에 대한이 내가, 레이아웃 XML 파일을 업데이트 모든
<?xml version="1.0"?>
<layout version="0.1.0">
<shopthelook_ajax_index>
<update handle="catalog_product_view" />
<remove name="html_calendar" />
<reference name="root" output="toHtml">
<action method="setTemplate"><template>shopthelook/wrapper.phtml</template></action>
</reference>
<reference name="product.info">
<action method="setTemplate"><template>catalog/product/view.phtml</template></action>
</reference>
<reference name="product.info.media">
<action method="setTemplate"><template>catalog/product/view/media.phtml</template></action>
</reference>
<reference name="product.info.options.configurable">
<action method="setTemplate"><template>catalog/product/view/type/options/configurable.phtml</template></action>
</reference>
</shopthelook_ajax_index>
</layout>
이것은 나를 더 가깝게 만듭니다! product.info 블록을 실제로 사용해야하지만 전체 카탈로그 모듈은 한 번에 하나의 제품을 처리하도록 만들어졌습니다. 본질적으로 내가 뭘 하려는지 레이아웃로드, HTML 렌더링 및 반복 할 수 있습니다. – callmetwan
catalog.product (catalog/product_view) 블록은 글로벌 레지스트리 (Mage :: registry ('product'))에서 제품 모델을로드합니다. 블록을 한 페이지에 여러 번 렌더링하려면 제품 모델을 전역 레지스트리에 등록해야하고 렌더링 후에 블록을 등록 취소하고 다른 제품 모델을 다시 등록하십시오. 그러나 product_view 블록이 제품 데이터를 렌더링하는 범위를 넘어서는 다른 작업 (예 : 페이지 제목 및 메타 정보 설정)을 수행하기 때문에이 접근 방식을 권장 할 수 없습니다. 더 나은 방법은 제품 데이터를 렌더링하기 위해 맞춤 블록을 만드는 것입니다. –