# Magento2语法讲解
M2不是一个标准的MVC架构。
![](https://box.kancloud.cn/0388fdc35b6131ecaad47b434ae4c0f8_324x834.png)
这是m2的app/code/Magento/Catalog插件代码。
可以看到,它有Controller,也有Model,也有view.
奇怪的是,在Controller找不到调用模版的代码。
这是因为我们之前讲过,m2的页面都是用xml写的,xml里是由若干个block组成的。block里调用的template就是view下面的template。
所以,这个Controller加载的是该页面的xml文件。xml再解析输出成html。
细心的你会发现,这个插件里也有一个Block目录,没错,就是它。
xml里的就是这个block,这个block里才是真正的逻辑功能代码。
![](https://box.kancloud.cn/07e24f060407c112a09939cf7c4ba21a_1638x1110.png)
到处都是block。
M2有自己的语法,封装了很多类。
## 增删改查
一个标准的php类如下:
~~~
<?php
namespace Zou\Test\Block;
class Demo extends \Magento\Framework\View\Element\Template{
protected $_storeManager;
protected $_scopeConfig;
protected $_productFactory;
protected $_productCollectionFactory;
protected $_categoryFactory;
protected $_categoryCollectionFactory;
protected $_customerFactory;
protected $_customerCollectionFactory;
protected $_orderFactory;
protected $_orderCollectionFactory;
public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Catalog\Model\ProductFactory $productFactory,
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
\Magento\Catalog\Model\CategoryFactory $categoryFactory,
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
\Magento\Customer\Model\CustomerFactory $customerFactory,
\Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerCollectionFactory,
\Magento\Sales\Model\OrderFactory $orderFactory,
\Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory
) {
$this->_scopeConfig = $scopeConfig;
$this->_storeManager = $storeManager;
$this->_productFactory = $productFactory;
$this->_productCollectionFactory = $productCollectionFactory;
$this->_categoryFactory = $categoryFactory;
$this->_categoryCollectionFactory = $categoryCollectionFactory;
$this->_customerFactory = $customerFactory;
$this->_customerCollectionFactory = $customerCollectionFactory;
}
//通过产品id,获取产品的name(属性)
public function getProductName($pid=1){
$product = $this->_productFactory->create()->load($pid);
return $product->getName();
}
//获取价格大于100的产品
public function getProductsByPrice($price=100){
$productCollection = $this->_productCollectionFactory->create();
$productCollection->addAttributeToSelect('price');
$productCollection->addAttributeToFilter('price', array('gt'=>$price));
foreach ($productCollection as $product) {
echo $product->getPrice();
}
return $productCollection;
}
//把id为10的产品价格修改为50
public function setProduct(){
$price = 50;
$pid = 10;
$product = $this->_productFactory->create()->load($pid);
$product->setPrice(50);
$product->save();
}
//删掉id为1的产品
public function deleteProduct($pid=1){
$product = $this->_productFactory->create()->load($pid);
$product->delete();
}
}
?>
~~~
namespace对phper应该不陌生了,现在php7新框架基本上都是用的命名空间。
在__construct里的声明的需要的类。
比如
1. `\Magento\Catalog\Model\ProductFactory`是产品模型类,通过这个类你可以得到单个产品的任何信息(比如属性)。
2. ` \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory`是产品数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤产品
3. `\Magento\Catalog\Model\CategoryFactory`是分类模型类,通过这个类你可以得到单个分类的任何信息(比如属性)。
4. ` \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory`是分类数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤分类
5. `\Magento\Customer\Model\CustomerFactory $customerFactory`是客户联系人模型类,通过这个类你可以得到单个Customer的任何信息(比如属性)。
6. `\Magento\Customer\Model\ResourceModel\Customer\CollectionFactory`是联系人数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤联系人
7. `\Magento\Sales\Model\OrderFactory`是订单模型类,通过这个类你可以得到单个订单的任何信息(比如属性)。
8. `\Magento\Sales\Model\ResourceModel\Order\CollectionFactory`是订单数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤订单
通过上面这个简易的php代码,你就学会了增删改查,是不是非常简单粗暴?
通过M2提供的模型数据资源类,就可以从容优雅的进行增删改查。
先卖个关子,具体的我们在第四章做插件的时候 会细讲。
- 序言
- 全面解读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服务器的项目
- 后续之路