opencart分享鏈接,magento結(jié)構(gòu)分析
2022-10-17 11:03:09 - 米境通跨境電商
模塊(module)是Magento的核心。站點(diǎn)上的任何一個(gè)動(dòng)作(action),無(wú)論是在前臺(tái)和還是在后臺(tái)的每一個(gè)操作都是通過(guò)模塊來(lái)實(shí)現(xiàn)的。模塊是可以視為一個(gè)容器,它可包含下面這幾項(xiàng):設(shè)置(settings),數(shù)據(jù)庫(kù)模式(databaseschema),呈現(xiàn)對(duì)象(renderingobject),輔助工具類(utilityhelpers),數(shù)據(jù)模型(datamodels)或動(dòng)作控制器(actioncontroller)。一個(gè)模塊可以包含全部的這六項(xiàng)也可以只包含其中的幾項(xiàng),甚至只有一項(xiàng)。所有的模塊可以通過(guò)app/etc/modules/目錄中XML配置系統(tǒng)來(lái)進(jìn)行開關(guān)。每個(gè)模塊也可以在自己模塊目錄下的etc子目錄中創(chuàng)建一個(gè)XML文件來(lái)保存自己的配置信息。
由于Magento中的一切都是模塊而且模塊本身又可以有自己的配置文件和數(shù)據(jù)庫(kù)設(shè)置,這樣就允許開發(fā)人員對(duì)Magento進(jìn)行擴(kuò)展。
模塊結(jié)構(gòu)
下面是Catalog模塊的目錄結(jié)構(gòu),它包含了模塊的所有項(xiàng)目(上面提到的六項(xiàng)):
代碼池(CodePools)
Magento中所有的模塊被放在三個(gè)代碼池中,它們分別是core,local,community。Magento本身所附帶的模塊全部放在core代碼池中。你自己開發(fā)的模塊則就安裝在local代碼池中。至于community代碼池則是用來(lái)安裝第三方模塊,但是這種想法也有可能會(huì)過(guò)時(shí),因?yàn)槟K可以安裝在lcoal代碼池,也可以安裝在community代碼池,而并不是必須那樣劃分。
包(Package)
所有的模塊都不是直接保存代碼池目錄中,而是保存在包目錄(代碼池的子目錄)中。引入包概念的主要目的是類命名的統(tǒng)一和一貫性。所有的Magento模塊是保存在core代碼池中的Mage包中。所以,所有的Magento類名都以Mage_為前綴。而對(duì)我們自己開發(fā)的代碼我們應(yīng)該在lcoal代碼池中創(chuàng)建一個(gè)包,比如以你公司的名字作為包名,這樣就可以避免類名的重復(fù)的可能性。
模型(Model)
模型可以說(shuō)是Magento的肌肉。它主要是用來(lái)從數(shù)據(jù)庫(kù)提取數(shù)據(jù)到程序中。數(shù)據(jù)的輸出,呈現(xiàn)是通過(guò)塊(Block)來(lái)實(shí)現(xiàn)的。也就是說(shuō)它主要是用來(lái)負(fù)責(zé)數(shù)據(jù)庫(kù)操作的。事實(shí)上在任何一個(gè)編程環(huán)境中,模型都是被用來(lái)識(shí)別處理數(shù)據(jù)域的工作,也就是說(shuō)它在數(shù)據(jù)組的定義和其它相關(guān)數(shù)據(jù)組之間起到聯(lián)系的作用。
為了說(shuō)明前面模型化的理論,我們舉個(gè)例子來(lái)說(shuō)明一下:在創(chuàng)建一個(gè)購(gòu)物車系統(tǒng)時(shí),我們有一個(gè)Product類。每個(gè)產(chǎn)品需要一個(gè)指定一個(gè)圖片。問(wèn)題是圖片如何模型化?只是簡(jiǎn)單的給Product類一個(gè)$image_url屬性?還是創(chuàng)建一個(gè)Image_Gallery類,然后在兩個(gè)類之間創(chuàng)建一個(gè)接口,如getDefaultImage。最終的模型類取決于你決定如何實(shí)現(xiàn)數(shù)據(jù)之間的操作。