首頁
外貿B2C模板開發
zencart 開發
Magento開發
經典客戶案例
zencart 報價
外貿主機
聯系我們
 
 
首頁 ::  Magento開發 ::  Magento SEO優化 ::  Magento模塊創建前必須知道的知識
 
Magento模塊創建前必須知道的知識

  作者: Magento   |   2010-10-10     閱讀次數:547     關鍵字:indeedbuy.com模板開發


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 。所以這只不過是用戶界面上的限制。

 






Magento SEO優化的相關新聞


更早的新聞

 
 
 
外貿網站模板  |  關于我們  |  核心技術  |  人才招聘  |  幫助中心  |  zencart下載  |  付款方式  |  公司地圖  |  聯系我們


粵ICP備15004589號
深圳市迅捷網絡技術有限公司 Copyright ? 2004-2016 All Rights Reserved. 版權所有
總公司:深圳市龍華新區民治街道人民路中航天逸大廈A3棟15層     網址:www.818819.buzz  電話:0755-28107785
分公司:惠州市惠城區港惠新天地商業大廈2B棟19層 網址:www.0752web.com 電話:0752-2695554  2065565
全國服務熱線:137 14307967   售后服務熱線:159 19478387 客服QQ: 1512144 408079953 MSN:[email protected]
捕鱼大师1比1现金