我正在尝试在模板文件中调用名为subtitle
的自定义属性
应用程序/设计/前端/碱/默认/模板/电子邮件/顺序/物品/订单/ default.phtml
我试过了
Mage::getModel('catalog/product')->load($this->getProduct()->getId())->getdata('subtitle')
但到目前为止没有运气。有人愿意帮忙吗,我几个小时以来一直在尝试几件事。 :(
答案 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上测试。