Magento網站運行原理解析

一、Magento文件目錄結構圖

二、Magento網站運行原理

Magento網站和常規的網站概念是有點不同,magento是由不少模塊組成的,你能夠自行開發和系統同樣級別的模塊替換系統模塊,因此很是方便進行二次開發和維護!magento的核心模塊page控制着全部頁面的輸出,其餘的模塊都是圍繞着更新page模塊的佈局文件page.xml來更新網頁的佈局來達到自定義頁面功能及顯示效果的。javascript

後臺Configuration -> web - default pages能夠設置首頁網址的默認模塊及首頁、404等頁面。php

假如Default Web URL設置爲cms,則首頁佈局框架爲<cms_index_index>css

(1)、一個magento模塊(以banner1爲例)的組成由如下文件組成:html

 

系統加載配置文件(app/etc/SCutePHP_Banner1.xml)java

模塊主文件夾(app/code/local/SCutePHP/Banner1)web

 

模塊經過模塊文件夾中的etc/config.xml配置文件來配置功能及其佈局文件,該模塊佈局文件能夠更新page.xml佈局文件來更新頁面,以及能夠關聯對於的模板文件展現效果。瀏覽器

當瀏覽器頁面打開magento網站時,magento先根據(appetcmodules)中的模塊配置文件加載全部對應的模塊,再根據佈局文件中的內容更新page.xml佈局文件來更新頁面,以及能夠關聯對於的模板文件展現效果。app

下面是一些行爲特性的佈局XML標記詳解:框架

<default>

在加載網店的幾乎全部頁面以前應該加載此特定頁面佈局的<default>嵌套更新(咱們說'幾乎 全部的',由於一些特殊的頁面像產品圖片彈出窗口就沒有加載佈局中的<default>句柄)。frontend

若是Magento找到<default>之外的句柄,它將按照指定的句柄中(<模塊名_頁面>,例如<catalog_product_view>對於產品頁面)的頁面嵌套更新對頁面進行處理。例 如,<catalog_product_view>包含Product View產品詳細頁面的佈局更新,而<catalog_product_compare_index>包含Compare Product 頁面的更新佈局。

<block>

Magento經過<block>標記決定頁面中的每一個區塊的行爲和視覺表現。在Magento中咱們已經提到了兩種類型的區塊-結構區塊(structural blocks)和內 容區塊(content blocks)。區分這兩種區塊最好的方式是經過分配給它的標記屬性來區分。結構區塊一般包含屬性'as',經過這個屬性值程序能夠在模板中(由getChildHTML 方法指定)經過as值調用,或者也能夠在指定佈局文件中經過name屬性值用<reference>調用(以下圖)。

讓咱們進一步挖 掘<block>的現有屬性。

type – 這是模塊類的標識符,它定義了區塊的功能,對應與該模塊包文件夾中的block文件夾中的相應類函數。此屬性不該該被修改。

name – 這是名稱,其餘的區塊能夠經過此名稱引用此區塊(看圖)。

Magento網站運行原理解析

before (and) after – 這兩種方法決定內容區塊在結構區塊中的位置。before="-" 和 after="-"這樣的命令標誌此區塊的位置是一個結構區塊的最上方或最下方。

template - 這個屬性指定的值決定了此區塊的功能是使用哪一個模板。例如,若是這個屬性值指定了'catalog/category/view.phtml ', 程序就會載入‘app/design/frontend/template/catalog/category/view.phtml ’ 模板文件。

action – <action> 是用來控制前臺的功能的,如加載或不加載一個javascript。最佳的學習途徑是瞭解現有的佈局更新 上面的不一樣Action方法。

as – 此屬性指 定模板文件中會調用那個區塊。當您在模板中看到getChildHtml(' block_name ')的PHP方法,能夠確定它指的是引用屬性'as'的值爲' block_name '的區塊。 (例如:在骨架模板中的方法<?=$this->getChildHtml('header')?>是調用<block as=「header」>)

<reference>

<reference>是用來引用另外一個區塊。要引用另一個區塊,在內部的更新將應用於與其關聯的<block>(見圖 )。

要使用引用,能夠經過區塊中的‘name’屬性值引用。此屬性的指向標籤中'name'屬性。因此,若是你使用<reference name="right">,響應的區塊名稱將是<block name="right">。

三、URL路由與分發器

Magento也採用單入口文件模式,根據不一樣參數調用相應的模塊。例如:http://127.0.0.1/index.php/customer/account/login首先接收customer參數,根據該參數查找到app/code/core/mage/customer模塊。接着查找第二個account參數,咱們繼續在customer模塊下查找。該參數默認調用customer模塊下的controller/AccountController.php文件。

接着查找第三個login參數,相信你已經明白了吧!在controller/AccountController.php下的loginAction方法。

根據調用方法查找模板:咱們繼續使用上面的例子,若是咱們查找到customer模塊,對應的模板目錄在app/design/frontend/default/你的主題/layout/customer.xml,若是不存在該文件,系統會向app/design/frontend/default/default/layout/customer.xml中查找,若是該目錄還不存在會向app/design/frontend/base/default/layout/customer.xml中查找。找到該文件後,根據account參數,magento會查找到標籤;根據login參數,magento會查找到標籤,並加載裏面相應的區塊。若是不明白沒有關係,在此你只須要知道如何根據URL參數調用對應的xml文件便可。

模板調用對應的js、CSS、圖片:模板是如何加載這些文件的呢?

Js和css文件是經過app/design/frontend/default/你的主題/layout/page.xml文件加載的。固然也能夠直接寫到模板文件裏。加載的js和css目錄放在/skin/fronted/default/你的主題/下。

若是不存在該目錄,會向/skin/fronted/base/default/目錄查找。跟模板的繼承機制是同樣。

重寫核心模塊:若是你要修改app/code/core/mage/customer/controller/AccountController.php文件。你能夠複製AccountController.php這個文件放到app/code/local/Company/customer/controller/AccountController.php;app/code/local/Company/customer/etc/customer.xml;

重寫controller類

require_once "Mage/Checkout/controllers/OnepageController.php";
class Company_Xcheckout_OnepageController extends Mage_Checkout_OnepageController{
//do what you want //盡情發揮吧

 }

重寫block類 

require_once "Mage/core/Checkout/Block/Onepage.php";

class Company_Xcheckout_Block_Onepage extends Mage_Checkout_Block_Onepage_Abstract{ … }

相關文章
相關標籤/搜索