# M2有哪些特点
M2是基于`zend framework`框架的,只不过在它身上加了一层华丽的皮,隐藏了`zend framework`的底层接口,封装了自己的接口。
所有我们写代码的时候,只需要调用M2自己的类和方法就行。
![](https://box.kancloud.cn/36d51d84ccff49bded8f9233664ae58d_1200x900.png)
如果说Linux一切设备皆文件,那么M2一切设计皆XML。
不管是主题还是插件还是API还是数据库 都有XML的身影,正因为它,M2才这么灵活强大!
如下几个特点 算是很牛逼到位之处:
## 页面xml布局
让你在不动源码的情况下,尽情任意修改页面布局。
每个页面都有唯一的辨识符的xml文件,这个页面的布局都由该xml生成,你可以任意增删改这个xml文件,实现各种效果。
xml文件里放的是各种block,这个block就是每个块,真正输出内容的地方。
以产品详情页为例:
![](https://box.kancloud.cn/1749c8311ce694cdc76474490bb8698a_720x460.png)
可以看到非常灵活,至于具体怎么增删改,我们在`Magento2主题`这一章节具体讲解。
## 数据库EAV结构
> `E` ->实体
> `A` -> 属性
> `V` -> 值
EAV模型是一种数据模型,用于描述实体的数量预计会很大,但事实上,实体中要使用的属性数量并不多。
M2这么设计,其实说白了就是为了灵活性,在不影响主干的基础上,任意新增删除属性。
EAV模型说白了就是分表,不需要把所有字段都放在主表里,而是按类型存放在不同的副表上。
对于字段少的项目来说 EAV其实没啥用 效率不高。
> 按照常规做法,比如一个产品的所有相关属性都会存放在产品表里,增删改查的都是这一个表。
> EAV模式 就是把这些属性按照类型独立分开存放到不同表里的。
> 所有查询属性值的时候会比较麻烦 要联表查询。
> 不过M2里不用担心,他提供了非常简单的方法,直接get属性名就得到值了,不需要你手动去写sql查表。
~~~
实体存储的是数据类型的信息。
就Magento而言,就是Customer,Category,Product等。
属性是每个实体的单独属性(比如name,weight,email)。
值是实体某个属性的值。
~~~
比如,产品有个属性叫产地(Manufacture),它的值为中国。
那么产品就是实体,Manufacture就是属性,中国就是值。
EAV模型带来的好处如下:
1. 灵活的多功能数据结构(可以在不更改数据库模式的情况下更改属性数量)。
2. 为给定实体添加新属性时,我们有可能在其他实体中使用它
3. 快速实施。
EAV实体的数据库模式:
1. eav_entity - (E)实体表。
2. eav_entity_attribute(A)属性表
3. eav_entity_ {type}(V) - 值表。{type} - datetime,decimals,int,text和varchar。
4. eav_attribute 里面是所有实体的属性
带有eav_ *表格的图表:
![](https://box.kancloud.cn/b82e0d2883d05db4fcb83df5815a64ac_1600x1356.png)
Magento 2中有哪些EAV实体:
实体列表可以在eav_entity_type表中找到:
> customer
> customer_address
> catalog_category
> catalog_product
> order
> invoice
> creditmemo
> shipment
Magento 2中有哪些EAV属性类型:
> eav_entity_int
> eav_entity_varchar
> eav_entity_text
> eav_entity_decimal
> eav_entity_datetime
这5种属性类型就相当于字段类型。
* `int` 对应mysql字段的int类型
* `varchar` 对应mysql字段的varchar类型
* `text` 对应mysql字段的text类型
* `decimal` 对应mysql字段的decimal类型
* `datetime`对应mysql字段的datetime类型
比如产品的name 是varchar类型。
他的值存在catalog_product_entity_varchar表里。
知道了这个原理,你就很轻松的知道属性和值在哪个表里。
聪明的你会觉得,把属性分散存在不同的表里,如果要查询全部属性的话,要联十几张表,是不是太耗资源了?
这点,M2官方也考虑到了,以产品为例,他提供了catalog_product_flat表,也就是说后台开启flat模式后,查产品数据就直接读取这个表,他把属性都存放在这个表里了。
catalog_product_flat是按store id来分的。如果你有多网店的话。
比如:
~~~
catalog_product_flat_1 //代表store id为1的所有产品数据
catalog_product_flat_2 ////代表store id为2的所有产品数据
~~~
## 缓存
俗话说东西吃多了就变胖了,胖了就不灵活了,走路都喘气。
M2是个灵活的胖子,他的缓存是其杀手锏。
![](https://box.kancloud.cn/eb5b9b911f52cac037b69706b5ac2721_2188x1262.png)
可以看到,缓存的类型多不胜数,后台轻松设置。
默认是开启了全部缓存类型。
缓存多了 也有很多弊端,就是对开发者不友好,导致开发过程中改了代码后 发现前台页面总是不生效,折腾半天 原来是缓存的问题。
所以我建议是开发版本里禁用所有缓存。 线上版本开启所有缓存。
我们刚开始不需要搞清楚所有缓存类型代表什么意思。等你熟悉一段时间后 再研究会更明白。
以后如果有高级课程的话,我会一个个分析讲解。
## 模块化
composer是个好东西,希望你会用。
m2的核心代码都是模块化的,可以任意开启禁用。
同理,第三方插件和主题也都是模块化的,可以通过composer来安装升级或者打包上传。
如果你安装了第三方插件或者看M2的核心代码的话,你会发现都有composer.json这个玩意。
这个就是用来安装/打包上传插件的。里面定义了各种依赖库以及插件源地址
## 安全性
M2的安全性也是其杀手锏,几乎没有被黑过。
社区会每隔1-2个月出安全补丁,自己下载安装就行。
老版本也会出对应的安全补丁。
## 社区活跃
群里有个小伙子说他经常混https://magento.stackexchange.com
和https://stackoverflow.com/。
几乎能找到任何你遇到的magento问题帖子并解决。
官方社区为https://community.magento.com/
里面也非常活跃,只要你问问题,肯定会得到答案。
所以,有这么多活跃的玩家,这么靠谱的官方,没理由不火,没理由不去用。
- 序言
- 全面解读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服务器的项目
- 后续之路