我正在尝试调用subtitle
模板文件中调用的自定义属性
app/design/frontend/base/default/template/email/order/items/order/default.phtml
我努力了
Mage::getModel('catalog/product')->load($this->getProduct()->getId())->getdata('subtitle')
但到目前为止还没有运气。有人愿意帮忙吗,我已经尝试了几个小时了。:(
您的代码假定$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()
获取自定义属性的值。
执行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;
}
}
如果您使用的是多存储 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 上测试。