# 目錄結構

可以看到,M2的目錄挺多的。
我們依次來講解下,
> 我這里截取的是github里的源代碼,核心代碼跟composer和官網下載的源碼包的存放路徑不一樣。
> 如果是github下載的,那么m2的核心源代碼就在`app/code/Magento`里。
> 如果是composer安裝或者官網下載的源碼包,那么m2的核心源代碼就在`vendor/magento`里。
> 其他的都是一樣的
**app**
毫無疑問,app目錄就是存放的網站源代碼。
我們的插件/主題/js/css/等等都放在這個目錄里。
**bin**
這是M2提供的命令行工具,比如最常用的
~~~
php bin/magento
~~~
我們之前就用這個工具來自動安裝m2了。
**dev**
M2的自動化功能測試和一些其他開發人員工具,這個我們普通用戶一般用不到。
m2的官方開發者會用到。
一般用不到,不管他就行。
**generated**
這個比較特殊,在M2里可以定義一些虛擬類。
這些類是自動生成的,會放在generated目錄里。
相當于php代碼緩存。
如果你有修改php的構造函數`function __construct()`里的代碼,就要`rm generated/* -rf`,不然會出現找不到類或者其他奇怪的錯誤。
**lib**
這里放的是m2自帶的公用js/jquery插件和字體。
一般用不到,不管他就行。
**phpserver**
這里放的是php內置的web服務器。
用來代替瀏覽器,直接命令行里打開網站。
一般用不到,不管他就行。
**pub**
這里存放的是圖片文件(比如產品圖片)
以及生成的靜態緩存文件.
我們會經常用到
**setup**
一看就知道是安裝目錄,沒什么好說的。
**var**
這里存放的是cache以及page cahce緩存文件。
以及log,report,export文件等。
我們會經常用到
**vendor**
這里存放的是第三方php組件。根據composer.json 文件生成的。
也就是composer install后下載安裝的第三方php組件。
如果是composer安裝或者官網下載的源碼包,那么m2的核心源代碼就在`vendor/magento`里,
這樣的話我們以后在開發過程中,會經常調試`vendor/magento`里的核心代碼。
**.htaccess**
這個是apache服務器里的配置文件
如果你用的是apache服務的話 會用到這個文件
**composer.json**
這里就是m2依賴的各種庫文件。
composer install 就是讀取的這個文件。
**index.php**
毫無疑問,這是入口文件
> 注意: M2的默認nginx配置的入口文件是在`pub/index.php`里,是為了安全,不暴露`app/`文件夾。
**nginx.conf.sample**
這是nginx下,m2官方推薦的配置文件。
如果你用的是nginx服務的話,會用到這個文件
基本上就這些了。
**現在我們重點講解下app,pub這2個目錄下面的內容。
因為我們開發中 基本上就是跟這2個目錄打交道。**
# 重點
## app

### code
插件放這個目錄,包括Magento核心代碼。
你安裝后 會發現已存在code/Magento目錄。
當然以后裝第三方插件或者自己寫的插件 都放在code下面
我們在第四章會手把手教你寫插件。現在就賣個關子。
### design
主題放這個目錄,包括前后臺主題。

adminhtml/Magento/backend是默認后臺主題
frontend/Magento 是默認前臺主題
我們一般不需要改后臺主題。
我們主要是改前臺主題,但是不要直接改frontend/Magento默認主題。
你最好自己新建一個主題,在自己的主題里修改。
我們在第三章會手把手教你寫主題,重寫默認主題代碼。現在就賣個關子。
### etc
這里是m2系統配置文件,不需要動它。
### i18n
這是m2的語言包存放目錄。
你安裝的第三方語言包都會放在這里
## pub

這里面有個`index.php`,這個跟項目根目錄下的`index.php`是一樣的。
自帶的`nginx.conf.sample`是把`pub/index.php`設置成入口路徑。
當然你也可以把入口路徑改成`項目根目錄/index.php`,也沒問題,不建議這樣做,因為暴露了`app/`目錄,不安全。
一般是讀取`pub/`文件夾下`deploy`生成的文件。保證了`app/`目錄的安全性。
### errors
這里放的是一些404或者503錯誤頁面。
不需要動它
### media
這里放的是分類圖片/產品圖片/下載文件/其他后臺上傳的圖片或者文件,
不需要動它
### static
這個就非常重要了,你deploy后就會生成網站靜態文件到這里。

他會生成前后臺的靜態文件。
包括phtml(模版文件)/js/css等等,也就是把所有插件(code目錄里的)里的代碼都生成靜態文件。
所以,在開啟緩存的情況下,前臺都是讀取這里的js/css/模版。

因此,在開啟緩存的情況下,調試模版/js/css代碼的時候,要注意下,不能直接改code,design里的源代碼,改了后會不生效,直接改static下面的文件就行。
因為它生成的目錄結構 跟插件的目錄結構是一樣的。
現在非常流行deploy 生成全靜態文件。比如hexo 是把md文件都deploy成靜態html。
你也許會覺得這樣的話,調試代碼很麻煩,改個地方 還得deploy下 才能看到效果。
其實不然,你可以建2個版本的網站,一個是開發版,一個是線上版。
開發功能的時候 只在開發版里開發調試,把緩存都禁用 ,調完測試完后,就把代碼推到線上去。
線上的再接收,然后deploy生成靜態文件部署。
## 核心文件介紹
**注意:
如果是用composer安裝的話,核心文件在`vendor/magento`里。
如果是用github下載安裝的話,核心文件在`app/code/Magento`里。**
請自己確認是用哪種方式安裝的,別到時候找不到地方怪教程不對。
`app/code/Magento`里的:

`vendor/magento`里的:

可以看到,M2的核心源代碼就這些,相當于是核心擴展。
版本升級的時候 也是自動更新這里的代碼。
看起來很多,因為m2功能太強大了,不多不行。
在這個入門課里 我們不需要那么燒腦 我們只需要掌握常用的幾個就行了。
以前臺為例,常用的主要有:
1. 分類和產品頁面 -> Catalog
2. customer用戶中心頁面 -> Customer
3. 購物車頁面 -> Checkout
4. 支付頁面 -> Checkout
5. 訂單頁面 -> Sales
6. 搜索頁面 -> Search
7. 首頁及cms頁面 -> Cms
8. 聯系我們頁面 -> Contact
然后product里的可配置產品和下載產品比較特殊,不在catalog里,是單獨擴展出來的。
1. 可配置產品 -> ConfigurableProduct
2. 下載產品 -> Downloadable
好了,掌握這些就足夠了,能解決80%的問題了。我們剛開始不需要一口吃個胖子。
有了這個概念后 你知道哪個頁面改該哪里的代碼了。
**必須注意一點:
不能直接改這里的核心源代碼,否則版本升級的時候會自動覆蓋
我們需要重寫這些文件。
php文件的話用plugin/preference/events等方式來重寫
phtml的話直接在自定義主題下面重寫。后面章節會講
xml的話也直接在自定義主題/插件下面的layout里重寫。后面章節會講**
- 序言
- 全面解讀Magento2
- Magento2簡介
- Magento2特點
- Magento2目錄結構
- Magento2語法講解
- 運行原理剖析
- 開啟Magento2之旅
- 安裝Magnto2
- 購買阿里云服務器(Ubuntu系統)
- 安裝和配置Nginx/PHP/PHP-FPM
- 配置Mysql并創建數據庫
- 配置Nginx虛擬主機
- 安裝和配置Magento2
- 導入演示數據
- 手把手教你創建git代碼庫
- 續外篇-購買AWS服務器
- 續外篇-Mac下安裝LNMP
- 續外篇-安裝phpmyadmin
- 如何升級php版本
- 使用Magento2
- 創建多網店多域名以及安裝中文語言包
- 創建獨立cms頁面
- 創建分類和產品
- 創建產品屬性
- 創建優惠券
- 導入產品csv
- 下單/發票/發貨/退貨
- M2常用命令
- 如何安裝主題
- 如何安裝插件
- 如何使用API
- 常見問題
- 常見問題 二
- 常見問題 三
- 常見問題 四
- 常見問題 五
- Magento2主題
- 主題框架詳解
- Layout文件詳解
- M2里的JS
- 主題實戰
- 前期準備工作
- 完成首頁
- 重寫分類頁面
- 錦囊妙計
- 產品詳情頁面講解
- 購物車頁面講解
- 支付頁面講解
- 主題修改記錄
- 關于主題的一些學員問答
- Magento2插件
- 插件框架詳解
- XML配置說明
- 插件實戰
- 準備工作
- 寫代碼
- 調試
- 難點解析
- 插件升級
- 插件修改記錄
- 擴展閱讀
- 如何創建cron任務和功能
- 發送郵件(帶附件)
- 如何在代碼里創建屬性
- Magento2線上部署
- 基本流程
- 配置Redis
- 配置Varnish+SSL
- Varnish配置教程(2020年修訂版)
- Paypal設置
- 一些優化
- Magento2 版本升級
- v2.3.0版本填坑指南
- v2.4.x升級指南
- 配置nginx pagespeed模塊進行加速
- M1數據庫遷移到M2指南
- 安裝配置Elasticsearch
- Magento2常用工具
- 網站測速分析工具
- 在線創建插件模塊
- M2后臺可視化編輯器里的標簽變量
- 遇到問題,我該怎么做
- 常用代碼
- SEO在線分析工具
- 本地用xdebug遠程調試mgtdev2服務器的項目
- 后續之路