2009-10-06 56 views
6

我正在爲客戶構建Magento商店,並且想要將所有產品的屬性添加到下拉列表中。像'製造商'屬性一樣。Magento:如何預先填充產品的下拉屬性值

但是,而不是手動輸入屬性的值列表我想要從外部站點填充值。因此,每次創建新產品或編輯現有產品時,下拉列表都會填入從遠程站點檢索到的最新值列表。在創建屬性時不應該僅提取一次列表,而是每次創建或編輯產品時。

例如,假設您可以從遠程站點通過curl獲取所有制造商的列表。這個列表中的名字偶爾會被修改或添加,但是ID保持不變,所以它們應該在幕後使用。您如何預先填寫製造商的下拉菜單的值?

我知道如何創建基本的自定義擴展,但擴展adminhtml後端對我來說是新東西。

任何幫助表示讚賞。

+0

接受答案? – ColinM 2014-07-15 20:33:10

+0

@ColinM哎呀。完成。 :) – 2014-07-16 08:02:17

回答

10

Magento產品屬性非常靈活,但每個產品具有動態值意味着您需要每個產品一個屬性,這樣做沒什麼意義,所以我假設這些屬性值共享產品中的一些共同點所以你將擁有有限數量的屬性(或一個?)。對於每個這樣的屬性,您應該先爲其創建屬性和後端模型,然後使用cron作業或事件從您的API更新屬性值選項,並將它們本地緩存在數據庫或其他方法中。您可以在模塊的安裝程序添加一個屬性是這樣的:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

或者推出自己的SQL INSERT語句爲eav_attribute表。確保將新屬性分配給在後端設置的屬性,以便它可用於您的產品。然後你在My_Namespace_Model_Source延伸Mage_Eav_Model_Entity_Attribute_Source_Table(假設你想爲你的屬性值的選擇輸入),並在最小實現下列方法創建一個模型:

getAllOptions() 
getOptionText($value) 

因此,這些將來自於本地緩存的動態選項拉和在大多數情況下,您的新屬性的行爲與Magento中的其他屬性相同。請務必使用智能緩存,因爲這些方法可能會在一次頁面加載中多次觸發。在產品創建或編輯頁面顯示之前,可能會出現一個您可以觀察到的事件,否則只是覆蓋類或控制器或使用Magento cron任務。

編輯:您也可以使用現有的Magento屬性模型,並通過現有的API創建您的選項值,但我假設要執行同步或出於其他原因,您可能需要一些額外的元數據,一個自定義的後端模型。

4

我想不是一個好的答案,但是在這裏,我會先添加一個屬性,然後對其進行反向工程,以查看它是如何填充的。

然後在管理員的產品展示頁面,我就重寫ProductController的的編輯和新的行動,來加載使用curl該屬性的值(你可以查找屬性的ID在eav_attribute表)

然後,您可以將其打包爲自定義擴展名,這樣您就不需要直接編輯核心代碼。祝你好運!

4

您需要查看Magento Event Dispatchers。

基本上,每次發生事件時 - 更新產品,提交訂單,刪除等等 - 都會通過系統發送消息。這些消息可以被捕獲,然後可以觸發你創建的方法。爲了達到您想要的效果,您需要捕獲在創建和更新產品時觸發的事件,並從此自定義模塊中運行方法。然後,該方法將從遠程站點獲取該值並使用該值更新產品。

快速谷歌搜索後,我發現下面的文章:

http://blog.baobaz.com/en/tag/magento-events

你可以找到Magento的事件被期待在適當的模塊代碼觸發。