【问题标题】:Magento product page variablesMagento 产品页面变量
【发布时间】:2014-12-19 21:14:13
【问题描述】:

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

php 代码是: getProduct()->getSku() ?>

效果很好,但是如果我尝试将 sku 添加到页面中的其他位置...例如 PowerReviews 的一段代码,它需要动态插入 SKU 以进行跟踪...如果我添加获取 sku 的相同 php 代码,它打破了那里的页面。我不知道为什么我可以在 view.phtml 中显示 sku,但不能在产品页面选项卡中显示...

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

【问题讨论】:

  • 您想在哪里显示 sku?
  • 它显示在 view.phtml 中,因为 view.phtml 使用了 catalog/category_view 块。当调用 $this->getProduct() 时,将创建产品实例并使用它我们可以 getSku()。如果您在其他地方编写相同的代码 $this 将无权调用 getSku 函数。您究竟想在哪里显示 sku?
  • 在这个例子中,我需要在我制作的自定义选项卡中使用它......所以它会是:frontend/rwd/default/template/so/reviews.phtml

标签: php magento variables product


【解决方案1】:

我认为您的问题是了解 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

更新:以下是我在 cmets 中的回复的更多方向和详细说明。解决此问题的一种方法是在布局定义中为您的块使用现有块定义,如下所示:

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

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

希望这有助于更清楚一点。

【讨论】:

  • 好的,我会稍微弄乱一下,看看我能想出什么!我很感激,PowerReviews 没有令人惊讶的扩展,这就是我手动编码的原因......如果我可以获得 sku 变量,这将很容易! :) 这看起来让我朝着正确的方向前进......谢谢(所以对于我制作的新标签,它有一个 phtml 文件,我是否还需要为它制作一个 php 块,所以我可以粘贴像上面评论的其他人一样的产品实例?
  • 是的,或者您可以使您的模板定义依赖于现有的块定义。但是,它需要已经包含检索 SKU 数据的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多