2

我正在尝试调用subtitle模板文件中调用的自定义属性

app/design/frontend/base/default/template/email/order/items/order/default.phtml

我努力了

Mage::getModel('catalog/product')->load($this->getProduct()->getId())->getdata('subtitle')

但到目前为止还没有运气。有人愿意帮忙吗,我已经尝试了几个小时了。:(

4

3 回答 3

2

您的代码假定$this->getProduct()返回一个Mage_Catalog_Model_Product对象。

错误Fatal error: Call to a member function getId() on a non-object告诉我们,这$this->getProduct()实际上不返回任何对象(但可能null相反)。

模板

app/design/frontend/base/default/template/email/order/items/order/default.phtml

你说的是,包含在 中Mage_Sales_Block_Order_Email_Items_Order_Default,但是 afaik 这个块默认没有任何getProduct()方法。

所以要么你失踪了,没有这样的方法,要么你定义了自己的方法,但它不返回Mage_Catalog_Model_Product实例(无论出于何种原因)。

编辑

解决此问题的一种方法是将模板的第一行从

<?php $_item = $this->getItem() ?>
<?php $_order = $this->getItem()->getOrder() ?>

<?php $_item = $this->getItem() ?>
<?php $_product = Mage::getModel('catalog/product')->load($_item->getProductId()) ?>
<?php $_order = $this->getItem()->getOrder() ?>

此更改后,您可以使用

$_product->getSubtitle()

获取自定义属性的值。

于 2012-05-15T16:00:58.793 回答
0

执行var_dump()或调试$_item模板中的变量。我敢打赌,您会在变量的某处找到某种产品对象$_item,并且您很可能能够找到它的 ID。(甚至可能类似于$productId = $_item->getProduct()->getId()?)一旦您找到产品 ID,您肯定可以通过此代码找到您的属性

// $productId = Whatever product ID was found previously
if ($productId) {
    $subtitle = Mage::getModel('catalog/product')->load($productId)->getSubtitle();
    if ($subtitle) {
        echo 'This is the subtitle ' . $subtitle;
    }
}
于 2012-05-15T16:17:48.317 回答
0

如果您使用的是多存储 Magento设置并且每个疮的属性值不同,则可以使用以下内容。

首先,在 email/order/items/order/default.phtml 中加载产品:

$_product = Mage::getModel('catalog/product')->setStoreId($_order->getStoreId())->load($_item->getProductId());

要获取属性的“字幕”值,请使用以下命令:

$_product->getSubtitle();

如果您想获取属性标签:

$_product->getResource()->getAttribute('subtitle')->getStoreLabel($_order->getStoreId());

如果 fe 您的属性是下拉类型,则要获取该值,请使用以下命令:

$_product->getResource()->getAttribute('dropdown_attribute')->getFrontend()->getValue($_product);

在 Magento CE 1.6.2.0 上测试。

于 2014-01-17T18:19:25.500 回答