我正在运行Magento CE 1.9,我有一段代码在产品页面上显示sku: 模板>目录>产品> view.phtml
php代码是: < ?php echo $ this-> getProduct() - > getSku()?>
效果很好,但是如果我尝试在页面的其他地方添加sku ...比如PowerReviews的一段代码,它需要动态插入SKU以进行跟踪...如果我添加了获取sku的相同php代码,它在那里打破了页面。我不知道为什么我可以在view.phtml中显示sku,但不能在产品页面选项卡中显示...例如...
在这个例子中,我需要在我制作的自定义标签中...所以它将是:frontend / rwd / default / template / so / reviews.phtml
答案 0 :(得分:0)
我认为您的问题是了解Magento块是如何定义的。模板(如app/design/frontend/[DESIGN PACKAGE]/[THEME]/template/catalog/product/view.phtml
)具有相应的PHP块定义。例如,此特定模板的块在app/code/core/Mage/Catalog/Block/Product/View.php
中定义 - 您甚至应该看到它在产品视图块的核心模板文件的顶部进行了注释:
/**
* Product view template
*
* @see Mage_Catalog_Block_Product_View
* @see Mage_Review_Block_Product_View
*/
在块定义中,您应该找到一个名为getProduct
的方法,这就是您可以从view.phtml
块访问该方法的原因。 $this
变量引用块定义对象的实例,换句话说,是Mage_Catalog_Block_Product_View
的实例。如果您希望访问产品的其他块定义(包括来自第三方库的定义)没有定义类似getProduct
的方法(或从块定义继承),那么您将无法调用该方法并返回产品。您可以做的事情是,在块定义中为您要用于访问产品数据的任何块定义类似的方法。例如,您可以将核心产品视图块定义中的getProduct
方法定义从PowerReviews扩展中复制到块的块定义中。
这个资源应该给你一个体面的概述,并希望更好地理解这个概念:
更新:这里有更多指示,并在评论中对我的回复进行了详细说明。解决此问题的一种方法是在布局定义中使用块的现有块定义,如下所示:
您可以选择对模板文件使用现有的块定义,也可以创建自己的块定义(并可能继承该类)
<block type="catalog/product_view" name="my.product.block" template="path/to/custom/template.pthml" />
注意我正在使用Magento核心catalog/product_view
块类型,它对应于我之前提到的定义块及其getProduct
方法的PHP文件。
或者,如果您需要在块中使用某种自定义功能,但是您希望依赖现有块的基本功能,请定义您自己的块并扩展具有所需功能的现有块:
class MyPackage_MyExtension_Block_Product_View extends Mage_Catalog_Block_Product_View {
// add your custom methods
}
这里我扩展了现有的Magento核心块定义,它具有您想要的方法。然后在布局定义中使用自定义块定义:
<block type="mypackage_myextension/product_view" name="my.product.block" template="path/to/custom/template.pthml" />
希望这有助于清除它。