# 目录结构
![](https://box.kancloud.cn/c276f3bbc8432f885816e217cb13495d_342x1390.png)
可以看到,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
![](https://box.kancloud.cn/364170ae5a8db19c6ac10c8de5e547ce_256x396.png)
### code
插件放这个目录,包括Magento核心代码。
你安装后 会发现已存在code/Magento目录。
当然以后装第三方插件或者自己写的插件 都放在code下面
我们在第四章会手把手教你写插件。现在就卖个关子。
### design
主题放这个目录,包括前后台主题。
![](https://box.kancloud.cn/ce6508167a07572a2530bda4a1ea3a1e_468x162.png)
adminhtml/Magento/backend是默认后台主题
frontend/Magento 是默认前台主题
我们一般不需要改后台主题。
我们主要是改前台主题,但是不要直接改frontend/Magento默认主题。
你最好自己新建一个主题,在自己的主题里修改。
我们在第三章会手把手教你写主题,重写默认主题代码。现在就卖个关子。
### etc
这里是m2系统配置文件,不需要动它。
### i18n
这是m2的语言包存放目录。
你安装的第三方语言包都会放在这里
## pub
![](https://box.kancloud.cn/6ea8f0b96db4729f8501a4b0d1922be7_372x770.png)
这里面有个`index.php`,这个跟项目根目录下的`index.php`是一样的。
自带的`nginx.conf.sample`是把`pub/index.php`设置成入口路径。
当然你也可以把入口路径改成`项目根目录/index.php`,也没问题,不建议这样做,因为暴露了`app/`目录,不安全。
一般是读取`pub/`文件夹下`deploy`生成的文件。保证了`app/`目录的安全性。
### errors
这里放的是一些404或者503错误页面。
不需要动它
### media
这里放的是分类图片/产品图片/下载文件/其他后台上传的图片或者文件,
不需要动它
### static
这个就非常重要了,你deploy后就会生成网站静态文件到这里。
![](https://box.kancloud.cn/4cb9aad1978851868f74fc4c888adecd_450x252.png)
他会生成前后台的静态文件。
包括phtml(模版文件)/js/css等等,也就是把所有插件(code目录里的)里的代码都生成静态文件。
所以,在开启缓存的情况下,前台都是读取这里的js/css/模版。
![](https://box.kancloud.cn/4f3858b264e0d5c0f0221cd9b9b50bf4_2240x738.png)
因此,在开启缓存的情况下,调试模版/js/css代码的时候,要注意下,不能直接改code,design里的源代码,改了后会不生效,直接改static下面的文件就行。
因为它生成的目录结构 跟插件的目录结构是一样的。
现在非常流行deploy 生成全静态文件。比如hexo 是把md文件都deploy成静态html。
你也许会觉得这样的话,调试代码很麻烦,改个地方 还得deploy下 才能看到效果。
其实不然,你可以建2个版本的网站,一个是开发版,一个是线上版。
开发功能的时候 只在开发版里开发调试,把缓存都禁用 ,调完测试完后,就把代码推到线上去。
线上的再接收,然后deploy生成静态文件部署。
## 核心文件介绍
**注意:
如果是用composer安装的话,核心文件在`vendor/magento`里。
如果是用github下载安装的话,核心文件在`app/code/Magento`里。**
请自己确认是用哪种方式安装的,别到时候找不到地方怪教程不对。
`app/code/Magento`里的:
![](https://box.kancloud.cn/4642a308d6bb01387864fd442bb8220f_1682x724.png)
`vendor/magento`里的:
![](https://box.kancloud.cn/48ffc40f28b67245a0b914340168bffa_1940x960.png)
可以看到,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服务器的项目
- 后续之路