Magento:在电子邮件模板中调用属性?

时间:2012-05-15 13:36:00

标签: php magento

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

  

应用程序/设计/前端/碱/默认/模板/电子邮件/顺序/物品/订单/ default.phtml

我试过了

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

但到目前为止没有运气。有人愿意帮忙吗,我几个小时以来一直在尝试几件事。 :(

3 个答案:

答案 0 :(得分: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已包含此内容,但默认情况下此块未包含任何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()

获取自定义属性的值。

答案 1 :(得分: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;
    }
}

答案 2 :(得分: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());

如果是f.e.您的属性是下拉类型,要使用此值获取值:

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

在Magento CE 1.6.2.0上测试。