我正在产品页面view.phtml
中创建自定义块。块已成功创建,因为我可以在打开路径提示时看到块。最初我只是为模板使用了一些简单的HTML内容,如下所示:
<div>
this is the new block
</div>
但是如果我将模板更改为phtml内容,它会返回我正在调用非对象函数的消息。如下所示:
TEMPLATE
<?php $_helper = $this->helper('catalog/output'); ?>
<?php $_product = $this->getProduct(); ?>
<?php $productName = $_helper->productAttribute($_product, $_product->getName(), 'name'); ?>
<?php $productUrl = $_helper->productAttribute($_product, $_product->getProductUrl(), 'product_url'); ?>
<?php $productImage = $_product->getImageUrl() ?>
<div class="socialShare clearfix">
<ul>
<li><a class="fa fa-facebook" href="javascript:popWin('https://www.facebook.com/sharer/sharer.php?u=<?php echo urlencode($productUrl); ?>&t=<?php echo urlencode($productName); ?>', 'facebook', 'width=640,height=480,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes');" title="<?php echo $this->__('Share it') ?>"></a></li>
</ul>
</div>
错误消息
致命错误:在非对象中调用成员函数getName() /home/onebig/public_html/app/design/frontend/ma_hitstore/default/template/catalog/product/view/socialShare.phtml 在第3行
catalog.xml 我有以下代码
<catalog_product_view translate="label">
<reference name="content">
<block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
<block type="core/template" name="product.info.socialShare" template="catalog/product/view/socialShare.phtml"/>
</reference>
</catalog_product_view>
view.phtml 调用块
<?php echo $this->getChildHtml('product.info.socialShare'); ?>
我测试过如果我直接在view.phtml中粘贴模板内容并且它可以正常工作。我想如果我创建一个自定义块,我必须在某处重新定义所有这些php变量$productName
,$productUrl
,$productImage
?对不起,我是新来的。非常感谢您的知识。
答案 0 :(得分:1)
此问题是您的子块具有core/template
类型。当您在核心模板上调用getProduct
时,它将返回null。
如果您将其更新为catalog/product_view
,那么$this->getProduct()
将返回该产品。
或者,您也可以通过从注册表中获取当前产品来获取当前产品:
$_product = Mage::registry('current_product');