2012-06-28 93 views
1

我們在magento網上商店中安裝了名稱字段的會計軟件,問題是存在30個字符限制,名稱總是傾向於更多地針對我們的內部操作,而不是SEO或UI。Magento Store的替代產品名稱

我想知道爲某些magento產品創建「替代名稱」的最佳方法,但只有當它退出時,才能退回到常規名稱字段。

要做到這一點,只需創建一個新的Product Attribute(alternate_name)並在前端調用if else語句,最好的方法是?

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

然後我需要在佈局文件夾的幾個位置更改它嗎?或者是否有一個更容易的地方來重寫此方法一次,並讓它每次都有效$ product-> getName()被調用?

+0

也許使用SCU而不是產品名稱會適合您?否則你的想法與替代屬性是相當好的。 –

回答

1

如果你需要這個讀/觀看只在前端,您可以覆蓋核心模型Mage_Catalog_Model_ProductgetName()方法做這樣的事情:

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

}

這樣你」 d只需改變一點,即可爲所有產品getName()調用提供服務,無論他們來自哪裏。

請注意,在編輯/保存name屬性時,這樣做會導致問題。

這是因爲Magento的後端例如也會使用getName()填補產品編輯<form>name領域,所以值降落在這個<input>領域可能是要麼alternate_name的一個或name屬性。

保存更改可能會導致在name屬性中保存alternate_name值,這是您最不可能想要的。

爲了避免這種情況,上述方法總是返回name屬性的值,以防呼叫來自管理區域內。這應該足以抓住管理員編輯表單,但當然不能捕獲其他可能的情況,其中getName()用於提供setName()->save()呼叫。

+0

謝謝!我知道會有一種方法來覆蓋!我仍然試圖去理解整個編輯magento的東西。但是,它仍然不會在/template/catalog/product/list.phtml中更改。這個調用<?php echo $ _helper-> productAttribute($ _ product,$ _product-> getName(),'name')?> – willboudle

+0

沒關係,問題是我在Edit Attribute的前端屬性部分中的設置。謝謝你的幫助! – willboudle