Magento 模块详解
模塊(module)是Magento的核心。站點上的任何 一個動作(action),無論是在前臺和還是在后臺的每一個操作都是通過模塊來實現的。模塊是可以視為一個容器,它可包 含下面這幾項:設置(settings),數據庫模式(database schema), 呈現對象(rendering object),輔助工具類(utility helpers), 數據模型(data models)或動作控制器(action controller)。一個模塊可以包含全部的這六項也可以只包含其中的幾項,甚至只有一項。所有的模塊可以通過app/etc/modules/目錄中XML配置系統來進行開關。每個模塊 也可以在自己模塊目錄下的etc子目錄中創建一個XML文件來保存自己的配置信息。
由于Magento中的一切都是模塊而且模塊本身又可以有自己的配置文件和數據庫設置,這樣就允許開發人員對Magento進行擴展。
模塊結構
下面是Catalog模塊的目錄結構,它包含了模塊的所有項目(上面提到的六項):
代碼池(Code Pools)
Magento中所有的模塊被放在三個代碼池中,它們分別是core,local,community。Magento本身所附帶的模塊全部 放在core代碼池中。你自己開發的模塊則就安裝在local代碼池中。至于community代碼池則是用來安 裝第三方模塊,但是這種想法也有可能會過時,因為模塊可以安裝在lcoal代碼池,也可以安裝在community代碼池,而并不是必須那樣劃分。
包(Package)
所有的模塊都不是直接保存代碼 池目錄中,而是保存在包目錄(代碼池的子目錄)中。引入包概念的主要目的是類命名的統一和一貫性。所有的Magento模塊是保存在core代碼池中的Mage包中。所以,所有的Magento類名都以Mage_為前綴。而對我們自己開發的代碼我們應該在lcoal代碼池中創建一個包,比如以你公司的名字作為包名,這樣就可以避免類名的重復的可能性。
模型(Model)
模型可以說是Magento的肌肉。它主要是用來從數據庫提取數據到程序中。數據的輸出,呈現是通過塊(Block)來實現的。也就是說它主要是用來負責數據庫操作的。事實上在任何一個編程環境中,模型都是被用來識別 處理數據域的工作,也就是說它在數據組的定義和其它相關數據組之間起到聯系的作用。
為了說明前面模型化的理論,我 們舉個例子來說明一下:在創建一個購物車系統時,我們有一個Product類。每個產品需要一個 指定一個圖片。問題是圖片如何模型化?只是簡單的給Product類一個$image_url屬性?還是創建 一個Image_Gallery類,然后在兩個類之間創建一個接口,如getDefaultImage。最終的模型類取決于你決定如何實現數據之間的操作。
塊(Block)
塊是Magento模板模式背后的大腦。所有的塊形成一套嵌套的對象集協調模型和模板文件。每個塊對應一個模板文件 —— 模板文件是以.phtml為擴展名的html 和php代碼混合的文件。也就是說對于在Magento上的任何一個請求,其實你在處理的是一系列的塊對象和相應數量的模板文件。
Magento的模板系統就是php語言本身。它并沒有重新實現一 個模板系統,所以renderView()方法也只不過是簡單的調用include來包含相關的模板文件。也就是說,如果你想使用某個模板引擎,而不使用單純的php語言,你可以通過修改Mage_Core_Block_Template類的renderView方法來調用你所 選擇的模板系統的呈現函數。
控制器(Controller)
控制器是Magento所有業務邏輯的起點。 業務邏輯是指業務理論中的規則。至于
Magento業務邏輯和域邏輯(數據處理指令)的區分是不太明顯的。有的人認為檢查必須欄位和可選欄位就是屬于 業務邏輯,而有人認為那應該屬于域邏輯。Magento中的大多數的邏輯的是在模型中實現的。
控制器類繼承了Mage_Core_Controller_Varien_Action基類,而這個基類是Zend框架的Zend_Controller_Action類的修改版本。其中比較重要的方法包括:
l dispatch($action)
l preDispatch();
l postDispatch()
其它的方法只是簡單的利用URL將指令傳遞給系統的其它關鍵部分。Dispatch()方法啟動當前請求的所有業務邏輯,$action的值是根據URL決定的,默認通常是index。Dispatch方法首先調用preDispatch方法,而這個方法則觸發下面這幾個事件,你可以偵聽這幾個事件并添加處理代碼:
n controller_action_predispatch
n controller_action_predispatch_ModuleName
n controller_action_predispatch_ModuleName_ControllerName_ActionName
dispatch方法只會在preDispatch方法末將當前 請求標記為dispatched時被調用,最終它會調用相應的控制器實例中對應的action方法,看下圖:
輔助類(Helper)
Magento中的輔助類是用來將那些輔助接口從內核類中提取抽象出來的途徑。我們通常既有在塊類中,也有在模型 類中調用輔助類的接口,所以這些接口的返回值是不太可靠的,而且你幾乎不會去繼承某個輔助類,因為你可以直接添加一個輔助類來添加新的輔助接口。
不過你會感興趣的輔助類的兩個 重要的接口是:
l __(兩個下劃線)
l htmlEscape
雙下劃線方法是翻譯接口。它幾 乎被所有的對象封裝使用,也就是說你幾乎可以在代碼中的任何地方調用這個方法來翻譯一個字符串。htmlEscape只是簡單封裝了htmlspecialchars函 數,不過它也可以接收一個數組并對數組中的每個元素應用htmlspecialchars函 數。
配置文件(config files)
模塊的配置文件是保存在模塊目 錄下的etc子目錄中。每個模塊可以有三個配置文件,它們全是XML文件。其中config.xml是直接影響你模塊的行為,其它的兩個文件system.xml和convert.xml會自動為你在 后臺配置頁面創建設置表單。
所有模塊的配置文件最后會被組 合到一起。這就意味著你可以在某個模塊相應的XML標簽中設置配置來重寫或覆蓋任何模塊的相應配置,這也正是Magento重寫的本質。
為了某種需要,你可以創建一個 類,再創建一個config.xml文件,在其中相同的位置指定你的類名,這樣你就可以你將你的類安裝到系統中。
這也是你為什么會看見在系統中 到處都有類似getModel(‘catalog/product’)的調用,而不是簡單的像這樣的調用:new Catalog_Model_Product();。
每個類對標簽,名稱的使用給了 你一個強大的方式使你可以重寫系統中的任何一個部分。
注:類名中使用標簽假定的上下 文件可能是Block,Model,Helper。
模板系統
Magento中的模板系統是很有爭議的。有些用戶對于使用PHP作為模板系統很有意見。但是使用PHP作為模板系統并沒有使用模板系統簡單或功能變得不夠強大,至少從長遠看來不是。在筆者看來這是最靈 活最高級的模板系統。
一個完整的頁面是通過一組嵌套 的模板文件來實現(理論上講應該是一組嵌套的塊對象)。系統中不會有“組件”的概念,也就是說你不會有“Form”,“Button”類或對象。模板文件和 塊對象是通過一組xml文件控制的,這有利于開發人員開發插件,但是似乎這對設計人員(即使是那些熟悉php的程序員)來講有點難度。
布局文件(Layout file)
布局文件控制了頁面的最終結 構。所有的布局文件保存在當前主題的layout目錄下。所有布局文件的名稱都和相應的模塊名一樣,只不過它們都使用小寫,而模塊名使用所謂的駱駝 式命名法。其中最重要的布局文件是page.xml文件
page.xml文件指定了默認的頁面結構。從其它的xml文件的修改是來自default標簽下的設置。下列是布局文件中常用的標簽:
l layout
l default
l reference
l block
l action
l update
你也可能看到類似下面這樣的標 簽,這些在Magento中被layout handle,它們的 作用和default標簽一樣,但是只會在某些特定的請求時起作用。這些標簽遵循一個模式,即和模塊名,控制器名,和action名相關聯。如果一個標簽只有兩個部分,以下劃線分開,比如cms_page,那么這個標簽下的所有設置會應用到這個模塊下的對應控制器下的所有請求。
模板文件
關于模板文件沒有太多介紹的, 它們只是簡單的在html文件中嵌套php代碼的文件,以.phtml為擴展名。這些文件中使用了php語法的模板特性,你會看到PHP的另一個使用冒號的循環結構,還有endwhile,endfor,endif。
模板文件的目錄結構模仿對應模 塊的目錄結構,但是這并不是必須的。筆者發現,在開發自己的模塊時,不按Magento的習慣來命名模板文 件并將它們保存在一個目錄下會簡單的多。你可以將文件名中的斜杠替換成下劃線,這樣就相當于模仿了你模塊的文件名。如果你需要重寫一組文件,不管是哪里的 文件,不管是幾個文件,要想直接看到到底重寫了哪些文件,最好就是將它們重寫并保存在一個目錄下。
有一些重要的模板文件你需要熟 悉,就是在page目錄下的模板文件。這個目錄下的所有模板文件在修改你的頁面時具有最高的級別。這些文件指定了哪些 頁面有1,2或3列,也提供類似dashboard類似的頁面和打印布局的頁面。
盡管你可以在你自己的主題的page目錄中添加最高級別的模板文件,但是只有default界面中default主題中page目錄下的模板文件可以通過后臺管理界面來選擇。比如說你想要一個有四個列的頁面結構,所以你就創建了4-column.phtml,但是你是不能通過后臺管理界面來選擇這個模板文件。但是你可以在布局文件中重新(重寫)定義頁面結 構為4-column.phtml。所以這只不過是用戶界面上的限制。
source: ?http://blog.aim-china.com/?cat=3
轉載于:https://www.cnblogs.com/wwufengg/articles/magento-module.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Magento 模块详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字电影打包内容(Packaging)
- 下一篇: Chrome插件:OneNote Web