Saturday, June 01, 2013

[magento]manual-Introduction to Magento

初學者翻譯 contact:M9505506@gmail.com

開發者的Magento-第一部分-介紹Magento

什麼是Magento?他是最強的線上電子商務平台並永遠的改變了電子商務的面貌。 當然,妳已經知道了。妳可能沒有發現到Magento也是一個物件導向的PHP framework,他被用來開發現代化、動態的web application....(誇大的形容詞bla~bla~)。

Magento的MVC結構圖 Magento_MVC.pdf

模組內的程式組織

Magento組織他的單一程式成為分別的模組(Module),在一個典型的PHP model-view-Controller (MVC)應用程式中,所有的Controller將會在一個資料夾,所有的model在另一個,諸如此類。在Magento檔案是基於功能性群組在一起的被稱之為Modules. Magento的code。

Magento的程式碼

舉個例子,妳會找到控制器(Controller), 模型(Models), 協助(helpers), 區塊(blocks)等等,與結帳相關的功能在

app/code/core/Mage/Checkout

你會找到Controller, Models, Helpers, Block 等等,與Magento的google結帳功能相關的功能在

app/code/core/Mage/GoogleCheckout

你的程式碼

當你想要客製化或是擴展Magento,而不是直接編輯獨立的程式檔,又或甚至配置你新的Controllers, Models, Helpers, Block等到原始Magento code的裡面,你必須創建你自己的Modules

app/code/local/Package/Modulename

package(也常被稱為 a Namespace)是一個唯一名稱定義了你的公司或是組織名稱,用意是世上每個Mangento的社群成員,為了避免碰撞到其他的使用者的程式,在創建Modules時,都要使用他們自己的Package name

當創建一個新的Model, 你需要去告訴Magneto about it.這是透過新增一個XML檔案到資料夾下去完成的

app/etc/modules

有兩個種檔案在這個資料夾,首先開啟一個個別的Module,並且命名在下列這個XML表單裡:

Packagename_Modulename.xml

第二點是一個檔案將開啟多模組從一個Package/Namespace,並且被命名在下列的XML表單裡面:

Packagename_All.xml 附註:他只能被核心團隊使用,同Mage_All.xml

不建議啟動多個模組在一個檔案內,這樣會破壞你models的模組化規則。

基於設定檔的MVC架構

Magento是一個基於設定檔(Configuration-Based)的MVC系統,除此之外也是一個基於慣例的(convention-based)MVC系統

在一個基於慣例的系統,假如你想新增一個Controller或是一個新的Model,你只要創建檔案/類別(file/class), 那系統就會自動抓取

在一個基於設定檔的系統,像是Magento,根據新增檔案/類別到程式庫,你經常需要明確的告訴系統關於新的類別或是新的類別群組,在Magento每個模組有一個檔案名為config.xml,這隻檔案包含全部的Magento 模組的相關設定

在執行時,這些檔案會被讀到一個大型的設定樹狀結構。

舉個例子來說,想要使用Models 在你自定義的Module?你需要新增一些程式碼到config.xml,用來告訴Magento你要使用Models,就像是你的Modles 應該是有的基礎類別名稱

<models>
    <packagename>
          <class>Packagename_Modulename_Model</class>
    <packagename>
</models>

相同的對於Helper, blocks, Routes 和Controller,事件Handlers,與以及其他的。幾乎所有時間你想要塞進系統的,你都需要改變或新增config file

管控者(Controllers)

在php系統,主要的進入點存在一個php的檔案。在magento裡面沒有不同,那隻檔案是index.php。 但你永遠不用編寫index.php。在mvc系統裡,index.php將會包含 程式碼/呼叫 去編寫做到以下項目

  1. 監控URL
  2. 基於一系列規則,驅使這些URL進入Contoller的類別與其下一個Action的方法:這動作稱作路由(Routing)
  3. 重新實體化Controller類別與呼叫Actioin方法()

這些意指任意的進入點在Mangento(或是其他基於MVC架構的系統)是一個在Controll file的一個方法

參考以下的URL

http://example.com/catalog/category/view/id/25

路徑的每個在server name之後的區塊都會被如下的方式解析

前置名稱-catalog(Front name-catalog)

URL的第一部分是被呼叫的front name。這或多或少,告訴magento那一個模組他自己在Controller裡面。在以下的例子,前置名稱就是catalog,他被對應的模組配置

app/code/core/Mage/Catalog

管控者名稱-category(Controller Name-category)

第二部分的URL告訴Magento應該要用的Controller。每一個有Controller的模組有一個特殊的資料夾,名字叫做'controller',它包含了所有,一個模組要用Controllers。以下是一個例子,關於URL部分的cotegory被轉換到Controller file裡面

app/code/core/Mage/Catalog/controllers/CategoryController.php

檔案裡面看起來像這樣:

class Mage_Catalog_CategoryController extends Mage_Core_Controller_Front_Action
{
}

動作名稱-view(Action Name-view)

第三個在URL的部分是動作名稱。在範例中,這是一個'view'。代表的是被用以創造Action Method。所以再例子'view'將會被送進viewAction

class Mage_Catalog_CategoryController extends Mage_Core_Controller_Front_Action
{
    public function viewAction()
    {
        //main entry point
    }
}

No comments: