题
因此,我知道我只是不知道我的方法是否是最佳实践/“简单”的方法。
我打算展示品牌/制造商名称的地方是:(始终以产品名称之后)
- 迷你车
- 结帐/购物车
- 产品页面
- 愿望清单
- 产品网格
- 订购电子邮件(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>
有任何想法吗?
解决方案
诚实的真理?您的代码工作正常,但不好,也不是最好的练习。将整个产品模型加载到一个单个属性上是浪费的。而是考虑以下内容。
如果您希望以这种格式在任何地方显示名称,那么您将有许多选项。
您可以扩展产品模型并替换
getName()
方法是附加制造商名称的方法。您只需要向其添加条件语句,以便存储代码0无法获得此变体。这样,每次打开它时,都不会在管理员中编辑它。这意味着没有什么是硬编码,但是每次加载产品时都会在运行时执行。不需要修改模板文件。您可以添加一个观察者来附加产品保存,这只是改变了适合您要求的名称。然后将原始名称保存在另一个字段中。这意味着它是硬编码的,但性能会好得多,因为它在运行时没有运行。不需要修改模板文件。
根据需要将要选择的属性添加到每个集合中,然后编辑显示产品名称的每个模板。每次加载产品并需要修改模板文件时,这都会执行。
在灵活性和性能之间总会保持平衡。因此,适当地选择。
另外,与其曾经加载整个产品模型以获取一个属性,而是编辑被加载的集合以获取该属性。例如
$_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”。也许添加参数以更改格式。
您仍然需要更改每个模板,但是至少现在您有一个助手负责将名称格式化为模板。显然,这是有好处的,就像您想将颜色添加到名称中一样,您只需要更改一种方法而不是所有模板即可。