Magento产品页面变量


Magento product page variables

我正在运行Magento CE 1.9,我有一段代码在产品页面上显示SKU:模板>目录>产品> view.phtml

PHP代码是: <?php echo $this->getProduct((->getSku(( ?>

这很完美,但是如果我尝试在页面中的其他地方添加 sku......例如,对于 PowerReviews 的一段代码,它需要动态插入 SKU 以进行跟踪...如果我添加相同的 PHP 代码来获取 SKU,它会在那里破坏页面。我不确定为什么我可以在 view.phtml 中显示 sku,但不能在产品页面选项卡中显示,例如......

在这个例子中,我需要它在我制作的自定义选项卡中......所以它会是:frontend/rwd/default/template/so/reviews.phtml

我认为

您的问题是了解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" />

希望这有助于进一步清除它。