因此,我知道我只是不知道我的方法是否是最佳实践/“简单”的方法。

我打算展示品牌/制造商名称的地方是:(始终以产品名称之后)

  • 迷你车
  • 结帐/购物车
  • 产品页面
  • 愿望清单
  • 产品网格
  • 订购电子邮件(items.phtml)
  • 相关产品
  • 向上销售
  • new.phtml

我现在正在使用的是:

产品/view.phtml:

<? echo $_product->getAttributeText('manufacturer') ?>

template/Checkout/cart/item/default.phtml(示例:在此处显示产品名称)

<a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->htmlEscape($this->getProductName()) ?>
<br>
<?php $_product = Mage::getModel('catalog/product')->load($_item->getProductId());
$manufacturerName = $_product->getAttributeText('manufacturer') ; ?>
<?php echo $manufacturerName; ?>
</a>

有任何想法吗?

有帮助吗?

解决方案

诚实的真理?您的代码工作正常,但不好,也不是最好的练习。将整个产品模型加载到一个单个属性上是浪费的。而是考虑以下内容。

如果您希望以这种格式在任何地方显示名称,那么您将有许多选项。

  1. 您可以扩展产品模型并替换 getName() 方法是附加制造商名称的方法。您只需要向其添加条件语句,以便存储代码0无法获得此变体。这样,每次打开它时,都不会在管理员中编辑它。这意味着没有什么是硬编码,但是每次加载产品时都会在运行时执行。不需要修改模板文件。

  2. 您可以添加一个观察者来附加产品保存,这只是改变了适合您要求的名称。然后将原始名称保存在另一个字段中。这意味着它是硬编码的,但性能会好得多,因为它在运行时没有运行。不需要修改模板文件。

  3. 根据需要将要选择的属性添加到每个集合中,然后编辑显示产品名称的每个模板。每次加载产品并需要修改模板文件时,这都会执行。

在灵活性和性能之间总会保持平衡。因此,适当地选择。

另外,与其曾经加载整个产品模型以获取一个属性,而是编辑被加载的集合以获取该属性。例如

$_productCollection = $category->getProductCollection() ->addAttributeToSelect('manufacturer');

这更轻巧,是最佳实践。

在执行时间和部署方面,选项2是一种更快的方法。在繁忙的商店中,可能是我们采用的方法。

其他提示

您可以将属性加载到基本集合槽中config.xml中,这将避免加载新集合。例如,如果您想在购物车中执行此操作:您可以这样做:

<sales>
      <quote>
          <item>
              <product_attributes>
                  <manufacturer/>
              </product_attributes>
          </item>
      </quote>
  </sales>

当您查看目录配置时,您也可以看到

<frontend>
    <product>
        <collection>
            <attributes>
               <manufacturer /> 
            </attributes>
        </collection>
    </product>
</frontend>

为此,您需要创建一个自定义扩展名...

这将使您只能从产品 /报价项目中获取属性

$_item->getAttributeText('manufacturer');

我将创建一个使用类似于货币方法的方法的助手。因此,而不是这样:

echo Mage::helper('core')->currency($_price);

您会有这样的东西:

echo Mage::helper('yourmodule/product')->formatName($product);

输出:“路由器X -Cisco”。也许添加参数以更改格式。

您仍然需要更改每个模板,但是至少现在您有一个助手负责将名称格式化为模板。显然,这是有好处的,就像您想将颜色添加到名称中一样,您只需要更改一种方法而不是所有模板即可。

许可以下: CC-BY-SA归因
scroll top