Chamando $this->getChildHtml em um novo bloco fora do arquivo de modelo
-
12-12-2019 - |
Pergunta
Eu gostaria de ligar $this->getChildHtml('product_type_data')
para obter o preço do produto fora do arquivo de modelo view.phtml.
Atualmente eu tenho echo $this->getChildHtml('product_type_data')
e isso gera o conteúdo de 'catalog/product/view/type/default.phtml'.
Preciso movê-lo para um arquivo em um módulo personalizado (perfurador de cache) para que ele seja chamado separadamente.Então neste arquivo eu fiz:
$block = Mage::app()->getLayout()->createBlock('customerprices/catalog_product_view', $this->getId());
$block->setTemplate('catalog/product/view/type/default.phtml');
$block->setIsLoggedIn(Mage::getSingleton('customer/session')->isLoggedIn());
$out = $block->getChildHtml('product_type_data');
Mas neste caso $out contém uma string vazia.Preciso definir algo neste bloco para que ele retorne o preço html?Se sim, como?Eu tenho um objeto $_product atual, se necessário.
Eu apreciaria qualquer sugestão.
Usando Mage::getBlockSingleton(...)
quando eu uso este código:
$thatx = Mage::getBlockSingleton('catalog/product_view');
$cnamex = get_class($thatx);
echo 'cname: '.$cnamex;
$cnamex não contém nome de classe (string/variável vazia).Conseqüentemente, não consigo executar nenhum método nele.
Solução
Se você precisar que apenas o bloco de preço do produto seja renderizado, você pode usar assim:
$out=Mage::getBlockSingleton('catalog/product_view')->getPriceHtml($_product);
Ver getPriceHtml()
método de Mage_Catalog_Block_Product_Abstract
que é a classe pai de Mage_Catalog_Block_Product_View
Segunda via
Estenda seu bloco customerprices/catalog_product_view
de Mage_Catalog_Block_Product_Abstract
e use-o:
class MyCompany_Customerprices_Catalog_Product_View extends Mage_Catalog_Block_Product_Abstract{
}
e
$block = Mage::app()->getLayout()->createBlock('customerprices/catalog_product_view', $this->getId());
$out=$block->getPriceHtml($_product);