2012-01-26 26 views
0

在我的產品視圖模板我加載子模板,和傳送產品實例在這個孩子的模板可供選擇:設置模式,作爲子女塊模板數據(屬性)

<?php 
    echo $this->getLayout() 
     ->createBlock('core/template') 
     ->setTemplate('catalog/product/view/addedToCartDialog.phtml') 
     ->setAttribute('product', $_product) 
     ->toHtml(); 
?> 

然後在我的目錄/產品/瀏覽/ addedToCartDialog.phtml我想要使用此產品實例:

<?php $product = $this->getData('product'); ?> 
<?php echo"<pre>";print_r($product->getId());echo"</pre>"; ?> 

但它似乎沒有加載:致命錯誤:調用一個成員函數的getId()在一個非對象/家用/ ryba /工作區/ polcode/Greenlights /應用程序/設計/前端/默認/ greenlights /模板/ catalo第2行克/產品/視圖/ addedToCartDialog.phtml 但是當我檢查變量$產物與的print_r:

<?php echo"<pre>";print_r($product);echo"</pre>"; ?> 

據顯示,該變量是正確Mage_Catalog_Model_Product對象,還檢查屬性是否是正確的(如SKU ,名字等) - 一切都是正確的。

這有什麼問題?

回答

1

我打算給你幾個答案。首先是直接回答你的問題。其餘的是替代品,但更好的方式來做你想要的東西。在我看來,最後的答案是最好的。

直接回答:

而不是通過使用setAttribute,只需用神奇的setter/getter方法:

<?php 
// In catalog/product/view.phtml 
echo $this->getLayout() 
    ->createBlock('core/template') 
    ->setTemplate('catalog/product/view/addedToCartDialog.phtml') 
    ->setProduct($_product) 
    ->toHtml(); 
?> 

<?php 
// In addedToCartDialog.phtml 
$_product = $this->getProduct(); 
echo $_product->getId(); 
?> 

更好:

而且,如果你知道你是在一個由目錄/產品控制器加載的模板,您可以通過這種方式獲得產品。

<?php 
// In catalog/product/view.phtml 
echo $this->getLayout() 
    ->createBlock('core/template') 
    ->setTemplate('catalog/product/view/addedToCartDialog.phtml') 
    ->toHtml(); 
?> 

<?php 
// In addedToCartDialog.phtml 
$_product = Mage::registry('product'); 
echo $_product->getId(); 
?> 

甚至更​​好

,最好的辦法是使用這又已加載(該方法,如果你知道你是在由目錄/產品控制器中加載模板的不同塊類型)

<?php 
// In catalog/product/view.phtml 
echo $this->getLayout() 
    ->createBlock('catalog/product_view') 
    ->setTemplate('catalog/product/view/addedToCartDialog.phtml') 
    ->toHtml(); 
?> 

<?php 
// In addedToCartDialog.phtml 
$_product = $this->getProduct(); 
echo $_product->getId(); 
?> 

,最後,最佳

最後一項業務。將更多塊添加到模板的更好方法是將塊添加到local.xml文件中。

<!-- Local.xml --> 
<catalog_product_view translate="label"> 
    <reference name="content"> 
    <block type="catalog/product_view" name="addedToCartDialog" as="addedToCartDialog" template="catalog/product/view/addedToCartDialog.phtml" /> 
    </reference> 
</catalog_product_view> 

現在,設置您的PHTML文件

<?php 
// In addedToCartDialog.phtml 
$_product = $this->getProduct(); 
echo $_product->getId(); 
?> 

然後從您的PHTML文件調用該塊

// In catalog/product/view.phtml 
<?php echo $this->getChildHtml('addedToCartDialog'); ?>