카탈로그 제품 목록 페이지에서 price.phtml을 어떻게 렌더링합니까? 제품의 렌더링이 foreach루프를

카탈로그 제품 목록 페이지의 템플릿 파일은 list.phtml입니다. 범주 내 모든 제품의 렌더링이 foreach루프를 사용하여 발생하는 경우

의 렌더링에 대해 혼란스러워합니다 price.phtml. 핸들에 블록이 없기 때문에<catalog_category_default>

이제 <?php echo $this->getPriceHtml($_product, true) ?>제품 가격을 반환합니다.

이 방법은 어떻게 연결되어 price.phtml있습니까?



답변

제품 가격 표시

이 메소드 getPriceHtml()는 블록 클래스에서 정의됩니다 Mage_Catalog_Block_Product_Abstract.

이 방법은 제품 유형에 따라 가격 렌더러를 사용합니다.

$type_id = $product->getTypeId(); // e.g. simple, configurable, bundle, grouped, ...
$this->_preparePriceRenderer($type_id)

가격 렌더러는 템플릿이 연결된 블록입니다. 둘 다 제품 유형에 따라 다릅니다.

지정된 제품 유형에 대해 정의 된 블록 또는 템플릿이없는 경우 기본적으로 catalog/product_price블록 및 catalog/product/price.phtml템플릿이 사용됩니다.

제품 유형에 대한 가격 렌더러 및 템플릿은 어디에 정의되어 있습니까?

가격 블록과 렌더러는 일반적으로 레이아웃 XML을 사용하여 지정되므로 새로운 제품 유형을 추가하는 모듈도 자체 렌더러를 쉽게 추가 할 수 있습니다. 예를 들어. 번들 제품은 bundle.xml레이아웃 파일 에서 다음과 같이 가격 렌더러를 추가 합니다.

<default>
    <reference name="catalog_product_price_template">
        <action method="addPriceBlockType">
            <type>bundle</type>
            <block>bundle/catalog_product_price</block>
            <template>bundle/catalog/product/price.phtml</template>
        </action>
    </reference>
</default>

맞춤형 가격 템플릿 또는 렌더러

동일한 메커니즘을 사용하여 기본 렌더러를 재정의 할 수도 있습니다. 템플릿을 변경하고 기본 가격 블록 유형을 유지 addPriceBlockType하려면 기본 블록 (위 참조)과 템플릿을 사용하여 레이아웃 파일을 호출 하면됩니다.

가격 블록 렌더링

실제로 가격 블록을 렌더링하는 코드는 다음과 같습니다.

$this->_preparePriceRenderer($type_id)
    ->setProduct($product)
    ->setDisplayMinimalPrice($displayMinimalPrice)
    ->setIdSuffix($idSuffix)
    ->toHtml();

$displayMinimalPrice$idSuffix변수는에 선택적 인수입니다 getPriceHtml방법.

public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')

$idSuffix의는 CSS의 ID를 완료하기 위해 가격 템플릿에 사용되는 <span>예를 들어 실제 가격을 둘러싼 태그 :

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">