# Magento2語法講解
M2不是一個標準的MVC架構。

這是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里才是真正的邏輯功能代碼。

到處都是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服務器的項目
- 后續之路