1

我们有会计软件填充 magento 网上商店的名称字段,问题是有 30 个字符的限制,而且名称往往更多地针对我们的内部操作,而不是 SEO 或 UI。

我想知道为某些 magento 产品创建“备用名称”的最佳方法,但前提是它退出,否则回退到常规名称字段。

最好的方法是创建一个新的产品属性(alternate_name)并在前端调用 if else 语句?

<?php if($_product->getAttributeText(’alternate_name’)) { 
 echo $_product->getAttributeText(’alternate_name’) 
 } else {
 echo $_product->getName(); 
 } ?>

然后我需要在布局文件夹中的几个地方更改它吗?还是有一个更容易的地方来覆盖这个方法一次并让它在每次 $product->getName() 被调用时工作?

4

1 回答 1

1

如果您只需要在前端阅读/查看它,您可以覆盖getName()核心模型的方法Mage_Catalog_Model_Product来执行以下操作:

public function getName()
{
    if (Mage::app()->getStore()->isAdmin()) {
        return $this->getData('name');
    }
    return (
        ($this->getData('alternate_name')
        ? $this->getData('alternate_name')
        : $this->getData('name')
    );

}

这样,您只需进行单点更改,即可为所有产品getName()调用提供服务,无论它们来自何处。

请注意,这样做可能会在编辑/保存name属性时引起问题。

这是因为例如 Magento 后端也将使用您getName()来填充nameproduct edit 的字段<form>,因此该<input>字段中的值可以是 thealternate_namename属性之一。

保存更改可能会导致保存属性alternate_name中的值name,这很可能是您不想要的。

为了避免这种情况,上面的方法总是返回name属性的值,以防调用来自管理区域内。这应该足以捕获管理员编辑表单,但当然不能捕获其他可能的情况,getName()用于提供setName()->save()调用。

于 2012-06-28T16:42:10.720 回答