2012-01-26 24 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'); ?>