2013-10-11 44 views
0

我想介紹一下我自己的實體爲特定的Magento的模塊命名空間,例如我可能要能夠調用擴展法師核心文件沒有鬆動的命名空間

Mage::getModel('catalog/brand')->load(1); 

品牌目前未列入目錄的模型模塊。我不想修改核心文件,也不想通過將Mage文件夾添加到本地目錄來破解核心。

我在想我的類似於這樣的命名空間配置文件的語法也許裏面:

<models> 
    <catalog> 
     <args> 
      <modules> 
       <AJW_Catalog before="Mage_Catalog">AJW_Catalog</AJW_Catalog> 
      </modules> 
     </args> 
    </catalog> 
    <ajw_catalog> 
     <class>AJW_Catalog_Model</class> 
    </ajw_catalog> 
</models> 

,但它似乎並沒有工作。 有誰知道這是如何實現的?

+0

你有這個理由嗎?命名空間的全部要點是爲了防止核心擴展重疊。從實用性和穩定性的角度來看,實現使用核心名稱空間的非核心擴展沒有多大意義。 – Axel

+0

,因爲當你使用多個模塊處理多個商店時,使用默認的magento名稱空間引用與品牌相關的目錄相關實體時更有意義。例如,我或我的前任不希望梳理大量潛在候選人以找出應該使用哪種模型。讓我們在適當的時候把所有東西都聯繫起來。命名一直是我編程職業的禍根,要比目錄更好地描述與目錄相關的內容? – ajameswolf

回答

0

這可以是可能的修復(腦屁) 創建名爲Customnamespace_Catalog,然後只重寫與節點目錄模塊,這並不默認法師模塊中存在模塊:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Namespace_Catalog> 
      <version>0.1.0</version> 
     </Namespace_Catalog> 
    </modules> 
    <global> 
     <models> 
      <catalog> 
       <rewrite> 
        <brand>Namespace_Brand_Model_Brand</brand> 
       </rewrite> 
      </catalog> 
     </models> 
    </global> 
</config> 

隨後通過附加的模塊:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Namespace_Brand> 
      <version>0.1.0</version> 
     </Namespace_Brand> 
    </modules> 
    <global> 
     <models> 
      <brand> 
       <class>Namespace_Brand_Model</class> 
      </brand> 
     </models> 
    </global> 
    </config> 

這將允許你打電話給法師:: getModel('目錄/品牌)

echo get_class(Mage::getModel('catalog/brand'); // Namespace_Brand_Model_Brand 
1

也許可能有一些欺騙,但沒有正式支持,通常是一個壞主意。您使用的before=語法僅適用於routers節點。沒有框架代碼可以讓你做你想做的事情。此外,在Magento框架代碼中,個別模塊「擁有」其名稱空間/軟件包名稱時存在偏見。在現有命名空間中定義新模型(catalog)引入了理論上的可能性,即您的代碼可能與未來版本的Magento代碼衝突。

+0

看起來似乎把所有的「模塊」都拒之於通用的命名空間。如果我想調用一個與目錄相關的模型,我永遠不會打電話給Mage :: getModel('品牌/品牌'),但它對我來說並不足夠描述。第一部分是協會「目錄」,第二部分是協會「品牌」的另一部分。例如,一個目錄的品牌 - 儘管本地不支持,但大多數開發人員正在打造自己的名稱空間這一事實,這種偏見被忽略了。如果碰巧開發人員願意保持可讀性,我認爲該目錄需要目錄/品牌 – ajameswolf

+0

請注意,上述確實工作,但不是「完全」我想要的。它依賴於靜態定義,我寧願說「如果它不存在於一個模塊中使用這個」 – ajameswolf