2012-09-07 2 views
3

나는 설정으로 설정하여 블록이 괜찮다고 무시, 내 모듈에서 제공하는 새 것으로 Mage_Catalog_Block_Product_Price_Template 블록과 템플릿을 무시하기 위해 노력하고있어 :Overrriding 젠토 블록 및 템플릿

<global> 
    <blocks> 
     <catalog> 
      <rewrite> 
       <product_price>ABC_PriceX_Block_Price</product_price> 
      </rewrite> 
     </catalog> 
    </blocks> 
</global> 

그리고 새로운 블록이 호출되는 나는 매우 이상한 행동을 받고 있어요 그러나

<?php 

class ABC_PriceX_Block_Price extends Mage_Catalog_Block_Product_Price_Template { 

    protected function _construct() { 
     parent::_construct(); 

     Mage::log('I am in ABC block'); 
     $this->setTemplate('pricex/price.phtml'); 


     Mage::log('Template file is '. $this->getTemplateFile()); 
    } 

} 

, 가격 블록은 프론트 엔드에 더 이상 표시 나던, 그리고 로그 파일에 들어갈 모든

0 12,346,665,946,197,863,556,973,210

그리고 템플릿은 렌더링되지 않습니다 :

<p> 
<?php Mage::log('I am in ABC template'); ?> 
</p> 

내가 여기서 뭔가를 놓치고 있습니까?

+0

참고 XML 코드를 업데이트 Weirder –

답변

7

당신은 그 오해의 소지가 이름에도 불구하고, Mage_Catalog_Block_Product_Price_Template 클래스는, 마 젠토 1.7.0.1의 하지 템플릿 블록 클래스를 설치 바닐라에서 젠토 버전, 하지만 언급하지 않았다. 이 Mage_Core_Block_Abstract하지 Mage_Core_Block_Template에서 확장하는

#File: app/code/core/Mage/Catalog/Block/Product/Price/Template.php 
class Mage_Catalog_Block_Product_Price_Template extends Mage_Core_Block_Abstract 
{ 
    ... 
} 

알 수 있습니다. 이 블록은 이후

그래서, 당신은 템플릿을

$this->setTemplate('pricex/price.phtml'); 

을 설정할 수 있지만 작동 단지 블록의 마법 getset 방법입니다. 마찬가지로 getTemplateFile에 전화 할 때 Magento는 귀하의 블록에 아직 아무도 전화하지 않으므로 setTemplateFile을 반환합니다. 실제로 정의 getTemplateFile 방법이있다 Mage_Core_Block_Template, 상속 블록에 반대. (

당신의 가장 큰 문제는이 템플릿 블록. 이것은 레이아웃에 의해 백업되지 때 템플릿 블록으로 Mage_Catalog_Block_Product_Price_Template을 치료하고있다 같은 블록 대신 Mage_Catalog_Block_Product_Price_Template의 Mage_Core_Block_Template을 연장 짝수 새로운 블록 ABC_PriceX_Block_Price와 이전 가격 템플릿 '프론트 엔드 \ 기본 \ 기본 \ 템플릿 \ 카탈로그/제품/price.phtml'을 보여주고 있음을

<block type="catalog/product_price_template" name="catalog_product_price_template" /> 
+0

템플릿/템플릿이 아닌 블록이란? magento 사이트에서 모두 언급 된 것은 구조적 d 콘텐츠 블록 –

+0

템플릿 블록은 내용을 렌더링하기 위해 phtml 템플릿을 사용하는 블록입니다. 템플릿이 아닌 블록은 _toHtml 메서드를 사용하여 템플릿을 렌더링하고 다른 이유로 레이아웃에 삽입 된 블록입니다. –

+1

좋은 답변 - 항상 내가 price.phtml을 그릴 수없는 이유를 궁금해했습니다! – Theodores