카탈로그 제품 목록 페이지의 템플릿 파일은 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() ?>">