Magento产品页面变量

时间:2014-12-19 21:14:14

标签: php magento variables product

我正在运行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

1 个答案:

答案 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扩展中复制到块的块定义中。

这个资源应该给你一个体面的概述,并希望更好地理解这个概念:

http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-4-magento-layouts-blocks-and-templates

更新:这里有更多指示,并在评论中对我的回复进行了详细说明。解决此问题的一种方法是在布局定义中使用块的现有块定义,如下所示:

您可以选择对模板文件使用现有的块定义,也可以创建自己的块定义(并可能继承该类)

<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" />

希望这有助于清除它。