2012-04-11 83 views
5

在Magento中創建自定義模塊時,有時需要在系統中創建自定義屬性。通常,我會用我的設置模型擴展相關模塊,或者簡單地擴展Mage_Core_Model_Resource_Setup。Magento - 自定義模塊所需的多種設置模型

如果我的模塊需要爲特定模型添加屬性,並且需要特定的設置模型,即eav或銷售 - 那麼此處最佳做法是什麼。我正在考慮定義我自己的設置模型:MyCompany_MyModuel_Reseource_Setup(對於1.6 +),然後在我的sql安裝文件中創建所需的設置模型。這是這裏最好的方法嗎?

回答

3

這是完全可以接受的(和適當的)在你的模塊的文件使用其他模塊的安裝文件:特別是在安裝新的屬性的情況下

$otherSetup = Mage::getResourceModel('catalog/setup','default_setup'); 
$otherSetup->addAttribute(...); 

,也有具體的實體屬性的默認值,每個模塊將處理爲你(見_prepareValues()方法)。

這當然會在您的模塊的安裝類實例中執行,但這是一個好的。

+0

這讓我多次陷入困境。始終確保您正在使用正確的資源模型來添加您要添加​​的實體類型! – 2014-08-13 01:24:12

2

編輯:我已經重新讀過你的問題,我不確定我是否完全覆蓋了你所要求的。儘管如此,這些信息適用於某些情況,所以我將在此處留下。不過,我認爲你的問題是關於向現有實體添加屬性的最佳做法。特別是在這一點上,使用設置資源爲事物添加屬性,EAV或其他方式是完全可以接受的。爲此,您可以使用Mage_Eav_Model_Entity_Setup::addAttribute()等函數,或者使用Mage_Core_Model_Resource_Setup::run()根據需要使用SQL查詢修改表。

原來的答覆:

它可以在同一模塊中使用多種資源,所以這應該是足夠的做你的要求。

事實上,這很簡單,只需定義兩個設置資源,Magento就可以同時運行這兩個設置。

在你的config.xml:

<config> 
    ... 
    <global> 
     ... 
     <resources> 
      <!-- Resource 1 --> 
      <mymodule_setup> 
       <setup> 
        <module>MyCompany_MyModule</module> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </mymodule_setup> 
      <mymodule_write> 
       <connection> 
        <use>core_write</use> 
       </connection> 
      </mymodule_write> 
      <mymodule_read> 
       <connection> 
        <use>core_read</use> 
       </connection> 
      </mymodule_read> 

      <!-- Resource 2 --> 
      <mymodule2_setup> 
       <setup> 
        <module>MyCompany_MyModule</module> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </mymodule2_setup> 
      <mymodule2_write> 
       <connection> 
        <use>core_write</use> 
       </connection> 
      </mymodule2_write> 
      <mymodule2_read> 
       <connection> 
        <use>core_read</use> 
       </connection> 
      </mymodule2_read> 
     </resources> 
     ... 
    </global> 
    ... 
</config> 

然後包含必要的安裝/通過擴展設置模型app/code/local/MyCompany/MyModule/sql/mymodule_setupapp/code/local/MyCompany/MyModule/sql/mymodule2_setup

你甚至可以添加自己的功能來安裝升級文件。

<resources> 
    <mymodule2_setup> 
     <setup> 

這樣的:

<class>MyCompany_MyModule_Entity_Setup</class> 

,並創建在app/code/local/MyCompany/MyModule/Entity/Setup.php

文件看起來像這樣:

<?php 
    class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup 
    { 
    } 

所以您可以通過添加類標籤做到這一點正如你懷疑的那樣,你將需要擴展Mage_Core_Model_Resource_Setup或Mage_Eav_Model_Entity_Setup (EAV)。