1. 程式人生 > >Magento開發文件(二):Magento配置

Magento開發文件(二):Magento配置

Magento 的配置檔案如同該系統的心臟一般。它負責從總體上配置所有被請求的模組,模型,類,模板檔案等。它是絕大部分PHP程式設計師不會接觸到的一塊抽象層,同時也 會增加一系列的開發成本,但是,所有這些都是值得的,因為Magento的配置檔案允許你對系統的預設功能進行你無法想象的高度擴充套件。

為了學習Magento配置檔案,我們將會在本章建立一個Magento模組,使其能夠在瀏覽器中訪問並顯示Magento系統的配置檔案。

本篇文章中包括的內容有,

  • 設定一個Magento模組的目錄結構
  • 建立模組的配置檔案
  • 我能在配置檔案中找到什麼有用資訊?
  • 為什麼配置檔案對我如此重要?

設定Magento模組的目錄結構

這一節我們將建立一個Magento模組。Magento模組是由PHP及XML檔案組成,用來給系統擴充套件新的功能,或重寫、擴充套件核心系統的行為。這可能意味著新增新的資料模型來跟蹤銷售資訊,改變系統中類的行為,或新增完全新的功能。

Magento系統中絕大多數你將使用到的模組都具有相同的結構。如果你檢視,

app/code/core/Mage

該目錄下的每個資料夾都是Magento團隊建立的一個單獨的模組。同時,你建立的模組將會放在以下資料夾中,

app/code/local/Packagename

“Packagename” 應該是能夠區別你程式碼的唯一命名。一般情況下是可以是你的公司名稱,但你也可以隨意命名。例如,微軟公司開發的Magento模組,可能會使用以下命名,

app/code/local/Microsoft

在這裡,我們使用”Magentotutorial”。那麼首先,要建立模組,我們需要建立如下所示的目錄結構,

app/code/local/Magentotutorial/Configviewer/Block

app/code/local/Magentotutorial/Configviewer/controllers

app/code/local/Magentotutorial/Configviewer/etc

app/code/local/Magentotutorial/Configviewer/Helper

app/code/local/Magentotutorial/Configviewer/Model

app/code/local/Magentotutorial/Configviewer/sql

一個模組並不一定需要上述所有的目錄,但是先把他們給全部建立好是個不錯的注意。接著,需要建立兩個配置檔案,一個是位於上述路徑etc目錄中的config.xml ,

app/code/local/Magentotutorial/Configviewer/etc/config.xml

第二個位於下面的路徑,

app/etc/modules/Magentotutorial_configviewer.xml

config.xml檔案中會包含下面的程式碼,先不用理解這些代表什麼,繼續看,下面會細細講解。

<config>
<modules>
<Magentotutorial_Configviewer>
<version>0.1.0</version>
</Magentotutorail_Configviewer>
</modules>
</config>

最後, Magentotutorial_configviewer.xml需要包含以下配置檔案程式碼,

<config>
<modules>
<Magentotutorial_Configviewer>
<active>true</active>
<codePool>local</codePool.
</Magentotutorial_Configviewr>
</modules>
</config>

再然後?不需要再然後了,你現在已經建立了一個基本的模組,當然它還什麼都不能幹,但是Magento已經能夠識別到此模組的存在。登入Magento後臺,進行如下操作,

  • 清空Magento快取
  • 訪問System->Configuration->Advanced
  • 點選”Disable modules output”,大概在最下面的位置,能夠找到你剛建立的模組

找到了?恭喜你,你的第一個Magento模組建立完畢。

建立、完善模組的配置檔案

向上面說的一樣,這個模組目前還什麼都不能做,完成本章之後,這個模組會有如下功能,

  • 檢查請求路徑中是否包含”showConfig”字串
  • 如果存在該字串,將會顯示Magento的配置檔案,並停止請求的預設執行
  • 檢查請求路徑中是否包含”showConfigFormat”字串,它能夠定製配置檔案輸出格式

首先,我們將下列程式碼中的<global>部分新增到config.xml檔案中,

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 <modules> ... </modules> <global> <events> <controller_front_init_routers> <observers> <Magentototurial_configviewer_model_observer> <type>singleton</type> <class>Magentototurial_Configviewer_Model_Observer</class> <mothod>checkForConfigRequest</mothod> </Magentototurial_configviewer_model_observer> </observers> </controller_front_init_routers> </events> </global>

然後在下面的路徑中建立Ovserver.php檔案,

Magentotutorial/Configviewer/Model/Observer.php

新增以下程式碼到該檔案中,

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 class Magentotutorial_Configviewer_Model_Observer { const FLAG_SHOW_CONFIG = 'showConfig'; const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat'; private $request; public function checkForConfigRequest($observer) { $this->request = $observer->getEvent()->getData('front')->getRequest(); if($this->request->{self::FLAG_SHOW_CONFIG} === 'true'){ $this->setHeader(); $this->outputConfig(); } } private function setHeader() { $format = isset($this->request->{self::FLAG_SHOW_CONFIG_FORMAT}) ? $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml'; switch($format){ case 'text': header("Content-Type: text/plain"); break; default: header("Content-Type: text/xml"); } } private function outputConfig() { die(Mage::app()->getConfig()->getNode()->asXML()); } }

到此,我們的配置檔案檢視模組完成了,清理下Magento快取,然後在瀏覽器開啟存放此模組的Magento的任意地址,並加上“showConfig=true”字串。

我能在配置檔案中找到什麼有用資訊?

開啟上述頁面之後,你會看到一個巨大的XML檔案。它描述了當前執行的Magento系統的整個狀態。你能夠找到所有的模組,模型,類,時間監聽者以及所有存在於Magento系統中的配置。

還記得本章建立模組時建立的config.xml配置檔案嗎?試著在瀏覽器中的xml文件中搜索該配置檔案中包含的Configviewer_Model_Observer,你會發現剛剛建立的這個配置檔案實際上也包含在這個xml文件中。總的來說Magento中所有模組的配置檔案都會被解析幷包含在這個全域性配置檔案當中。

為什麼配置檔案對我如此重要?

目前為止可能有些難以理解,但是這個配置檔案是你學習Magento系統的關鍵。你新增的任何所有模組都能夠在這個配置檔案中找到,任何時候當你需要請求核心系統的功能時,Magento都會使用到配置檔案。

舉個例子,作為一個MVC程式設計師,你經常會使用到一些助手類,使用如下方式例項化,

01 $helper_sales = new HelperSales();

而Magento是抽象化了這個過程,並非使用PHP的類宣告方式。在Magento中,上面的助手類物件會使用如下方式例項化,

01 $helper_sales = Mage::helper('sales');

通俗的說,這個靜態方法將會,

  • 在配置檔案找查詢<helpers />節點
  • 在<helpers />節點內,查詢<sales />節點
  • 在<sales />節點內,再查詢<class />節點
  • 例項化在<class />節點中找到的類

這看起來貌似費了很大的事,關鍵的優點是,通過在配置檔案中查詢類名,我們可以重寫Magento核心功能,而不需要改變或新增任何程式碼到核心庫中。這種“超程式設計“的方式在PHP中使用的並不多,不過它可以讓你明確的擴充套件你想擴充套件的任意一個地方。

相關推薦

Magento發文()Magento配置

Magento 的配置檔案如同該系統的心臟一般。它負責從總體上配置所有被請求的模組,模型,類,模板檔案等。它是絕大部分PHP程式設計師不會接觸到的一塊抽象層,同時也 會增加一系列的開發成本,但是,所有這些都是值得的,因為Magento的配置檔案允許你對系統的預設功能進行你

ECSHOP發文【檔案結構說明和資料庫表分析】

地址:https://www.cnblogs.com/nuanxin/p/8032743.html Ecshop檔案結構 ecshop檔案架構說明  /*  ECShop 2.5.1 的結構圖及各檔案相應功能介紹 ECShop2.5.1_Beta upload 的目

敏捷開發編寫發文的利與弊

敏捷開發學習總結: 思考開發文件的利與弊 文件是個好東西,這是不可否認的,但是太依賴文件也有弊端,下面我從不同的度來分析一下文件的利與弊,然後思考在敏捷開發時,文件又是如何進行的。從 公司的角度來看,編寫文件有如下好處:  a1) 公司使用的是瀑布生命週期(或序列式開發,

Android官方發文Training系列課程中文版新增ActionBar之新增Action按鈕

新增Action按鈕 ActionBar允許在當前的APP上下文內新增很多重要的功能按鈕。這樣便可以通過圖示或者文字作為功能按鈕直接展示在ActionBar上。功能按鈕如果沒有足夠空間或無足輕重的按鈕都會隱藏在隱藏按鈕下。 在XML指定功能

PIE.NET-SDK元件式發文

  一、PIE.Net開發環境及目錄說明 1.   開發環境  確保Win7系統已安裝SP1  安裝Visual Studio2013(支援VS2010/2012/2013/2015)  安裝PIESDK.exe二次開發包

Android官方發文Training系列課程中文版手勢處理之滾動動畫及Scroller

在Android中,滑動經常由ScrollView類來實現。任何超出容器邊界的佈局都應該將自己內嵌在ScrollView中,以便提供可滾動的檢視效果。自定義滾動只有在特定的場景下才會被用到。這節課將會描述這樣一種場景:使用scroller顯示一種可滾動的效果

Android官方發文Training系列課程中文版使用Fragment構建動態UI之構建靈活的UI

當設計應用程式時需要支援尺寸較大的寬屏裝置時,可以基於可用的螢幕空間在不同的佈局中配置並重新使用fragment來提升使用者體驗。 舉個例子,手持裝置在同一時間可能只適合展示一個介面,相反的,你可能希望在平板裝置上一邊一個Fragment,因為平板有更寬的

蘋果官方Apple Pay發文(中文版)開始使用Apple Pay

本文由CocoaChina翻譯自蘋果官方Apple Pay開發文件。目前版本為1.0 概覽: Apple Pay為使用者從你的App裡購買實際的物品和服務提供簡單而安全的方法。通過Touch ID,使用者可使用儲存在iPhone 6和iPhone 6 Plus上的

Android官方發文Training系列課程中文版分享檔案之獲取檔案資訊

之前的課程講述了客戶端APP試圖與含有檔案的URI一同執行,APP可以請求服務端APP的檔案資訊,包括檔案的資料型別以及檔案的大小。這些資料型別可以幫助客戶端APP來判斷該檔案是否可以處理,檔案的大小可以幫助客戶端APP對該檔案設定相應大小的緩衝區。 這節

之路讀寫

alt bsp http 文件讀寫 info 讀寫 技術分享 分享圖片 文件 open函數: 讀: 寫: 測開之路二:文件讀寫

巴山鐵路工人吳磊自學在雲上發文簽報系統,把緊急通知及時送到鐵路工人手中,確保行車安全

時空 無法 target 傳輸 管理 財務 一段時間 所有 重要 從雪域高原來到秦巴山區,轉眼已是12年。這期間,吳磊守著兩條靜靜的鋼軌。 吳磊說,他不怕守,因為,“1999年,18歲應征入伍就是邊防戰士,只不過那個時候在日喀則,守的是國境,守的是國家安全,現

r.js壓縮打包(require + backbone)項目發文

找到 -h ase 換行 body build ini 依賴 需要 最近項目穩定了一點,之前一直沒空關註的開發文件壓縮打包問題也有時間來解決了 AMD模塊化開發中的代碼壓縮打包工具——r.js 環境搭建基於nodejs;用於AMD模塊化

改 Anaconda Jupyter Notebook 發文保存目錄

自己的 alt 文件 pre 路徑 快捷方式 修改 .py cond 1.打開cmd,輸入命令找到配置文件路徑 jupyter notebook --generate-config 2.打開 jupyter_notebook_config.py 修改配置 c.Note

轉載InstallShield學習筆記元件配置

InstallShield學習筆記二:元件配置 這裡主要講的記錄的是配置檔案的細節。 1.Features配置 在 Installshield 中,可以在 Features 新增需要安裝元件大類,這裡需要注意的是: 在InstallSrcipt MSI ,預設DefaultFeatu

微信小程式小遊戲發文,小遊戲快速上手教程

微信小遊戲快速上手教程 檔案結構 小遊戲只有以下兩個必要檔案: game.js 小遊戲主程式入口 game.json 配置檔案 執行環境 小遊戲的執行環境跟小程式類似,執行在 JavaScriptCore 中,

軟體發文編寫規範

      對於軟體工程學科的同學都知道,軟體工程是一門技術含量高設計極其複雜的學科。為了控制好軟體產品質量和規範,就必須用大量的文件約束軟體工程的進度和狀態。浩大的軟體工程對於缺少工作和專案經驗的人來說,必然是摸不著頭腦不知從何開始。為了讓大家能夠快速適應標準的軟體開

【netcore基礎】.Net core使用swagger自動生成發文

之前寫過一篇 .Net 版本的部落格 https://www.cnblogs.com/jhli/p/8317566.html   現在只不過用了 netcore 之後的版本,其實差不多 netcore版本的效果圖如下   可以線上填引數除錯,非常方便  

如果沒有發文,會是什麼樣子?

首先,普及一下看圖知識:如何進入連續看圖模式? 1.安裝360瀏覽器 2.滑鼠懸放在圖片上 接著,你就可以隨心所欲的 看圖了            ---------------- 正文  -------

3.04-甘特圖的發文

普加甘特圖(PlusGantt) V3.0 開發文件: http://www.plusgantt.com/gantt/doc/ 資源甘特圖使用者手冊2.0(中文版): https://wenku.baidu.com/view/6a24e9d6844769

OpenCV3.0 + VS2013配置自動化配置

OpenCV 3.0+ VS2013開發環境基本配置已在前文“OpenCV3.0+VS2013配置一”中進行了介紹,有些時候我們可能需要重複配置相同的環境,相信大家都會採用一些自動化的手段,這裡總結一下我自己自動化配置的方法。 一、環境變數 新建OpenCV3.0_Environm