久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

magento結(jié)構(gòu)解析

 sumi2005 2014-03-16

模塊( 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ù)模式 (database schema) ,,呈現(xiàn)對(duì)象 (rendering object) ,,輔助工具類(lèi) (utility helpers) ,數(shù)據(jù)模型 (data models) 或動(dòng)作控制器 (action controller) ,。一個(gè)模塊可以包含全部的這六項(xiàng)也可以只包含其中的幾項(xiàng),,甚至只有一項(xiàng)。所有的模塊可以通過(guò) app/etc/modules/ 目錄中 XML 配置系統(tǒng)來(lái)進(jìn)行開(kāi)關(guān),。每個(gè)模塊也可以在自己模塊目錄下的 etc 子目錄中創(chuàng)建一個(gè) XML 文件來(lái)保存自己的配置信息,。

由于 Magento 中的一切都是模塊而且模塊本身又可以有自己的配置文件和數(shù)據(jù)庫(kù)設(shè)置,這樣就允許開(kāi)發(fā)人員對(duì) Magento 進(jìn)行擴(kuò)展,。

模塊結(jié)構(gòu)

下面是 Catalog 模塊的目錄結(jié)構(gòu),,它包含了模塊的所有項(xiàng)目(上面提到的六項(xiàng)):


代碼池 (Code Pools)

Magento 中所有的模塊被放在三個(gè)代碼池中,它們分別是 core ,, local , community ,。 Magento 本身所附帶的模塊全部放在 core 代碼池中,。你自己開(kāi)發(fā)的模塊則就安裝在 local 代碼池中。至于 community 代碼池則是用來(lái)安裝第三方模塊,,但是這種想法也有可能會(huì)過(guò)時(shí),,因?yàn)槟K可以安裝在 lcoal 代碼池,也可以安裝在 community 代碼池,,而并不是必須那樣劃分,。


包 (Package)

所有的模塊都不是直接保存代碼池目錄中,而是保存在包目錄(代碼池的子目錄)中,。引入包概念的主要目的是類(lèi)命名的統(tǒng)一和一貫性,。所有的 Magento 模塊是保存在 core 代碼池中的 Mage 包中。所以,,所有的 Magento 類(lèi)名都以 Mage_ 為前綴,。而對(duì)我們自己開(kāi)發(fā)的代碼我們應(yīng)該在 lcoal 代碼池中創(chuàng)建一個(gè)包,比如以你公司的名字作為包名,這樣就可以避免類(lèi)名的重復(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)物車(chē)系統(tǒng)時(shí),,我們有一個(gè) Product 類(lèi)。每個(gè)產(chǎn)品需要一個(gè)指定一個(gè)圖片,。問(wèn)題是圖片如何模型化,?只是簡(jiǎn)單的給 Product 類(lèi)一個(gè) $image_url 屬性?還是創(chuàng)建一個(gè) Image_Gallery 類(lèi),,然后在兩個(gè)類(lèi)之間創(chuàng)建一個(gè)接口,,如 getDefaultImage 。最終的模型類(lèi)取決于你決定如何實(shí)現(xiàn)數(shù)據(jù)之間的操作,。


塊 (Block)

塊是 Magento 模板模式背后的大腦,。所有的塊形成一套嵌套的對(duì)象集協(xié)調(diào)模型和模板文件。每個(gè)塊對(duì)應(yīng)一個(gè)模板文件 ——模板文件是以 .phtml 為擴(kuò)展名的 html 和 php 代碼混合的文件,。也就是說(shuō)對(duì)于在 Magento 上的任何一個(gè)請(qǐng)求,,其實(shí)你在處理的是一系列的塊對(duì)象和相應(yīng)數(shù)量的模板文件。

Magento 的模板系統(tǒng)就是 php 語(yǔ)言本身,。它并沒(méi)有重新實(shí)現(xiàn)一個(gè)模板系統(tǒng),,所以 renderView() 方法也只不過(guò)是簡(jiǎn)單的調(diào)用 include 來(lái)包含相關(guān)的模板文件。也就是說(shuō),,如果你想使用某個(gè)模板引擎,,而不使用單純的 php 語(yǔ)言,你可以通過(guò)修改 Mage_Core_Block_Template 類(lèi)的 renderView 方法來(lái)調(diào)用你所選擇的模板系統(tǒng)的呈現(xiàn)函數(shù),。

 

 

控制器 (Controller)

控制器是 Magento 所有業(yè)務(wù)邏輯的起點(diǎn),。業(yè)務(wù)邏輯是指業(yè)務(wù)理論中的規(guī)則。至于

Magento 業(yè)務(wù)邏輯和域邏輯(數(shù)據(jù)處理指令)的區(qū)分是不太明顯的,。有的人認(rèn)為檢查必須欄位和可選欄位就是屬于業(yè)務(wù)邏輯,,而有人認(rèn)為那應(yīng)該屬于域邏輯。 Magento 中的大多數(shù)的邏輯的是在模型中實(shí)現(xiàn)的,。

控制器類(lèi)繼承了 Mage_Core_Controller_Varien_Action 基類(lèi),,而這個(gè)基類(lèi)是 Zend 框架的 Zend_Controller_Action 類(lèi)的修改版本,。其中比較重要的方法包括:

l   dispatch($action)

l   preDispatch();

l   postDispatch()

其它的方法只是簡(jiǎn)單的利用 URL 將指令傳遞給系統(tǒng)的其它關(guān)鍵部分。 Dispatch() 方法啟動(dòng)當(dāng)前請(qǐng)求的所有業(yè)務(wù)邏輯,, $action 的值是根據(jù) URL 決定的,,默認(rèn)通常是 index 。 Dispatch 方法首先調(diào)用 preDispatch 方法,,而這個(gè)方法則觸發(fā)下面這幾個(gè)事件,,你可以偵聽(tīng)這幾個(gè)事件并添加處理代碼:

n   controller_action_predispatch

n   controller_action_predispatch_ModuleName

n   controller_action_predispatch_ModuleName_ControllerName_ActionName

dispatch 方法只會(huì)在 preDispatch 方法末將當(dāng)前請(qǐng)求標(biāo)記為 dispatched 時(shí)被調(diào)用,最終它會(huì)調(diào)用相應(yīng)的控制器實(shí)例中對(duì)應(yīng)的 action 方法,,看下圖:

 


輔助類(lèi) (Helper)

Magento 中的輔助類(lèi)是用來(lái)將那些輔助接口從內(nèi)核類(lèi)中提取抽象出來(lái)的途徑,。我們通常既有在塊類(lèi)中,也有在模型類(lèi)中調(diào)用輔助類(lèi)的接口,,所以這些接口的返回值是不太可靠的,,而且你幾乎不會(huì)去繼承某個(gè)輔助類(lèi),因?yàn)槟憧梢灾苯犹砑右粋€(gè)輔助類(lèi)來(lái)添加新的輔助接口,。     

不過(guò)你會(huì)感興趣的輔助類(lèi)的兩個(gè)重要的接口是:

l   __( 兩個(gè)下劃線(xiàn) )

l   htmlEscape

雙下劃線(xiàn)方法是翻譯接口,。它幾乎被所有的對(duì)象封裝使用,也就是說(shuō)你幾乎可以在代碼中的任何地方調(diào)用這個(gè)方法來(lái)翻譯一個(gè)字符串,。 htmlEscape 只是簡(jiǎn)單封裝了 htmlspecialchars 函數(shù),,不過(guò)它也可以接收一個(gè)數(shù)組并對(duì)數(shù)組中的每個(gè)元素應(yīng)用 htmlspecialchars 函數(shù)。


配置文件 (config files)

模塊的配置文件是保存在模塊目錄下的 etc 子目錄中,。每個(gè)模塊可以有三個(gè)配置文件,,它們?nèi)?XML 文件。其中 config.xml 是直接影響你模塊的行為,,其它的兩個(gè)文件 system.xml 和 convert.xml 會(huì)自動(dòng)為你在后臺(tái)配置頁(yè)面創(chuàng)建設(shè)置表單,。

所有模塊的配置文件最后會(huì)被組合到一起。這就意味著你可以在某個(gè)模塊相應(yīng)的 XML 標(biāo)簽中設(shè)置配置來(lái)重寫(xiě)或覆蓋任何模塊的相應(yīng)配置,,這也正是 Magento 重寫(xiě)的本質(zhì),。

為了某種需要,你可以創(chuàng)建一個(gè)類(lèi),,再創(chuàng)建一個(gè) config.xml 文件,在其中相同的位置指定你的類(lèi)名,,這樣你就可以你將你的類(lèi)安裝到系統(tǒng)中,。

這也是你為什么會(huì)看見(jiàn)在系統(tǒng)中到處都有類(lèi)似 getModel(‘catalog/product’) 的調(diào)用,而不是簡(jiǎn)單的像這樣的調(diào)用: new Catalog_Model_Product(); ,。

每個(gè)類(lèi)對(duì)標(biāo)簽,,名稱(chēng)的使用給了你一個(gè)強(qiáng)大的方式使你可以重寫(xiě)系統(tǒng)中的任何一個(gè)部分。

注:類(lèi)名中使用標(biāo)簽假定的上下文件可能是 Block ,, Model ,, Helper 。


模板系統(tǒng)

Magento 中的模板系統(tǒng)是很有爭(zhēng)議的。有些用戶(hù)對(duì)于使用 PHP 作為模板系統(tǒng)很有意見(jiàn),。但是使用 PHP 作為模板系統(tǒng)并沒(méi)有使用模板系統(tǒng)簡(jiǎn)單或功能變得不夠強(qiáng)大,,至少?gòu)拈L(zhǎng)遠(yuǎn)看來(lái)不是。在筆者看來(lái)這是最靈活最高級(jí)的模板系統(tǒng),。

一個(gè)完整的頁(yè)面是通過(guò)一組嵌套的模板文件來(lái)實(shí)現(xiàn)(理論上講應(yīng)該是一組嵌套的塊對(duì)象),。系統(tǒng)中不會(huì)有“組件”的概念,也就是說(shuō)你不會(huì)有“ Form ”,,“ Button ”類(lèi)或?qū)ο?。模板文件和塊對(duì)象是通過(guò)一組 xml 文件控制的,這有利于開(kāi)發(fā)人員開(kāi)發(fā)插件,,但是似乎這對(duì)設(shè)計(jì)人員(即使是那些熟悉 php 的程序員)來(lái)講有點(diǎn)難度,。


布局文件 (Layout file)

布局文件控制了頁(yè)面的最終結(jié)構(gòu)。所有的布局文件保存在當(dāng)前主題的 layout 目錄下,。所有布局文件的名稱(chēng)都和相應(yīng)的模塊名一樣,,只不過(guò)它們都使用小寫(xiě),而模塊名使用所謂的駱駝式命名法,。其中最重要的布局文件是 page.xml 文件

 

page.xml 文件指定了默認(rèn)的頁(yè)面結(jié)構(gòu),。從其它的 xml 文件的修改是來(lái)自 default 標(biāo)簽下的設(shè)置。下列是布局文件中常用的標(biāo)簽:

l   layout

l   default

l   reference

l   block

l   action

l   update


    你也可能看到類(lèi)似下面這樣的標(biāo)簽,,這些在 Magento 中被 layout handle ,,它們的作用和 default 標(biāo)簽一樣,但是只會(huì)在某些特定的請(qǐng)求時(shí)起作用,。這些標(biāo)簽遵循一個(gè)模式,,即和模塊名,控制器名,,和 action 名相關(guān)聯(lián),。如果一個(gè)標(biāo)簽只有兩個(gè)部分,以下劃線(xiàn)分開(kāi),,比如 cms_page ,,那么這個(gè)標(biāo)簽下的所有設(shè)置會(huì)應(yīng)用到這個(gè)模塊下的對(duì)應(yīng)控制器下的所有請(qǐng)求。

 


模板文件

關(guān)于模板文件沒(méi)有太多介紹的,,它們只是簡(jiǎn)單的在 html 文件中嵌套 php 代碼的文件,,以 .phtml 為擴(kuò)展名。這些文件中使用了 php 語(yǔ)法的模板特性,,你會(huì)看到 PHP 的另一個(gè)使用冒號(hào)的循環(huán)結(jié)構(gòu),,還有 endwhile,endfor,endif 。

模板文件的目錄結(jié)構(gòu)模仿對(duì)應(yīng)模塊的目錄結(jié)構(gòu),,但是這并不是必須的,。筆者發(fā)現(xiàn),,在開(kāi)發(fā)自己的模塊時(shí),不按 Magento 的習(xí)慣來(lái)命名模板文件并將它們保存在一個(gè)目錄下會(huì)簡(jiǎn)單的多,。你可以將文件名中的斜杠替換成下劃線(xiàn),,這樣就相當(dāng)于模仿了你模塊的文件名。如果你需要重寫(xiě)一組文件,,不管是哪里的文件,,不管是幾個(gè)文件,要想直接看到到底重寫(xiě)了哪些文件,,最好就是將它們重寫(xiě)并保存在一個(gè)目錄下,。

有一些重要的模板文件你需要熟悉,就是在 page 目錄下的模板文件,。這個(gè)目錄下的所有模板文件在修改你的頁(yè)面時(shí)具有最高的級(jí)別,。這些文件指定了哪些頁(yè)面有1,2或3列,,也提供類(lèi)似 dashboard 類(lèi)似的頁(yè)面和打印布局的頁(yè)面,。

盡管你可以在你自己的主題的 page 目錄中添加最高級(jí)別的模板文件,但是只有 default 界面中 default 主題中 page 目錄下的模板文件可以通過(guò)后臺(tái)管理界面來(lái)選擇,。比如說(shuō)你想要一個(gè)有四個(gè)列的頁(yè)面結(jié)構(gòu),,所以你就創(chuàng)建了 4-column.phtml ,但是你是不能通過(guò)后臺(tái)管理界面來(lái)選擇這個(gè)模板文件,。但是你可以在布局文件中重新(重寫(xiě))定義頁(yè)面結(jié)構(gòu)為 4-column.phtml ,。所以這只不過(guò)是用戶(hù)界面上的限制。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多