摘要:今天記錄下如何創建一個,直接進入正題。創建好我們的和之后,接下來就需要創建一系列的文件,我們依次來說每個文件如何創建。
Magento2.x版本已經發布一段時間了,到現在為止已經到2.2了,最新版本可以關注Magento在github上的更新。今天記錄下Magento2.1如何創建一個module,直接進入正題。
安裝Magento2后,進入項目的根目錄后,進入/app目錄,只有app/design/,app/etc/兩個文件夾,design/目錄是存放主題內容,安裝成功后,在etc/文件夾下會多出config.php和env.php兩個php文件,config.php可以看到magento2加載了那些模塊,類似magento1.x的eetc/modules/文件夾,env.php保存了連接的數據庫的一些信息,如果你要更改項目連接的數據庫,可以在env.php里面修改,類似Magento1.x的local.xml文件。用過Magento1.x,應該發現app目錄少了code目錄,對頭,這里我們也要新建code目錄,用來存放我自己編寫的模塊代碼,首先需要創建一個"
備注:Magento2.1的所有核心代碼位于/vendor/magento/目錄下。
--magento2.1 |---code |---Silk |---Test |---design |---etc |---config.php |---env.php
創建好我們的
File:app/code/Silk/Test/etc/module.xml
在module.xml中編寫如下代碼:
"module" 標簽說明 :
name: 表示module的名稱
setup_version: 表示module的版本號
Module registration這里需要在module的根目錄下創建一個"registration.php"文件
File:app/code/Silk/Test/registration.php
在registration.php中編寫如下代碼:
查看module是否激活打開app/etc/config/php文件后,這時你會發現沒有剛才我們編寫的module,這里需要利用終端進入到magento2的根目錄執行magento命令:
php bin/magento setup:upgrade執行完成之后,你將會在config.php中看到剛才我們寫的module。
接下來,我們就來創建前端控制器。
路由聲明創建前端控制器時,需要新建etc/frontend/routes.xml文件,來聲明前端控制器的名稱。
File:app/code/Silk/Test/etc/frontend/routes.xml
在routes.php中編寫如下代碼:
標簽說明: id = standard 表示前端路由;
標簽說明: id : 對于router的唯一標識名;
frontName : 前端URL的控制名稱;
標簽說明: name : 聲明module的名稱;
before : 表示在定義module之前加載;
after : 表示在定義moduel之后加載;
創建前端控制器備注:“before” et “after” 在創建module時不是必須的.
比如我們的URL為:local.magento2.com/test,繼續創建文件
File:app/code/Silk/Test/Controller/Index/Index.php
控制器中代碼如下:
resultPageFactory = $resultPageFactory; parent::__construct($context); } /** * @return MagentoFrameworkViewResultPageFactory */ public function execute() { echo "this is Silk_Test_Controller_Index_Index"; die(); } }現在訪問剛才的路由URL,就可以看到瀏覽器輸出內容了。
備注:這里如果報錯:Please upgrade your database: Run "bin/magento setup:upgrade" from the Magento root directory.
解決辦法就是到根目錄執行命令
php bin/magento setup:upgrade自定義URL上面我們的URL很簡單,為local.magento2.com/test,實際上magento將它轉化成了local.magento2.com/test/index/index,test為/etc/routes.xml下我們定義的frontName名,第一個index是位于Controller文件夾下的Index文件夾名,第二個index是位于Index文件夾下的Index.php名,比如我們現在要我們的URL為:local.magento2.com/test/hello/world,我們該如何創建文件呢?
示例如下://File:app/code/Silk/Test/Controller/Helo/World.php Silk |---Test |--Controller |--Hello |---World.phpWorld.php內容如下:
resultPageFactory = $resultPageFactory; parent::__construct($context); } /** * @return MagentoFrameworkViewResultPageFactory */ public function execute() { echo "this is Silk_Test_Controller_Hello_World"; die(); } }創建Block上面我們說了如何從控制器輸出內容到頁面,但是真正與瀏覽器頁面最相關的還是由對應的Block輸出數據,那么如何創建一個block呢?
我們來修改下我們控制器app/code/Silk/Test/Controller/Helo/World.php里面的內容:namespace SilkTestControllerHello; use MagentoFrameworkAppActionAction; class World extends Action { /** @var MagentoFrameworkViewResultPage */ protected $resultPageFactory; /*** @param MagentoFrameworkAppActionContext $context*/ public function __construct(MagentoFrameworkAppActionContext $context, MagentoFrameworkViewResultPageFactory $resultPageFactory) { $this->resultPageFactory = $resultPageFactory; parent::__construct($context); } /** * @return MagentoFrameworkViewResultPageFactory */ public function execute() { $this->_view->loadLayout(); $this->_view->getLayout()->initMessages(); $this->_view->renderLayout(); } }接著創建block文件
File:app/code/Silk/Test/Block/Hello.php
Hello.php中代碼如下:
創建layout布局文件布局文件的命名規則為:
_ _ 例如:
local.magento2.com/test -----test_index_index.xml
local.magento2.com/test/say -----test_say_index_index.xml
local.magento2.com/test/hello/world -----test_hello_world.xml這里我們的布局文件名稱test_hello_world.xml
File:app/code/Silk/Test/view/frontend/layout/test_hello_world.xml
代碼內容如下:
這里我們又定義了一個helloworld.phtml文件,繼續來新建這個模板文件。
創建模板文件File:app/code/Silk/Test/view/frontend/templates/helloworld.phtml
helloworld.phtml代碼內容如下:
HelloWorld
Congratulations ! You have created your first Magento Module !
The block classname is :
現在重新刷新我們的網頁URL:local.magento2.com/test/hello/world
創建Model模型
到此,我們就完成了一個簡單的前端控制器到模板的數據輸出.需要注意的是,block仍然是提供給模板phtml頁面數據,但是在模板中調用Block中的函數方式時,Magento2是用$block,而不再是$this.
下面我們繼續完善我們這module,在創建后臺部分之前,先來創建Model模型.-Model |--Job.php |--ResourceModel |--Job.php |--Job |--Collection.php接著我們依次來創建這幾個文件
File:app/code/Silk/Test/Model/Job.php
代碼內容如下:
_init("SilkTestModelResourceModelJob"); } }File:app/code/Silk/Test/Model/ResourceModel/Job.php
代碼內容如下:
_init("silk_job", "entity_id"); } }File:app/code/Silk/Test/Model/ResourceModel/Job/Collection.php
代碼內容如下:
_init("SilkTestModelJob", "SilkTestModelResourceModelJob"); } }到此,我們就創建了一個Model模型.接下來,我們來創建腳本文件,即Setup/目錄下的文件
InstallSchema.php
UpgradeSchema.php
InstallData.php
UpgradeData.php
Recurring.php
創建表結構InstallSchema.php備注:InstallSchema.php是模塊初次運行時創建表結構的腳本,InstallData.php是模塊初次運行時插入表中的數據,而UpgradeSchema.php和UpgradeData.php是根據module.xml中的setup_version版本號來執行更新表結構和表數據的腳本.
File:app/code/Silk/Test/Setup/InstallSchema.php
代碼內容如下:
startSetup(); $table = $installer->getConnection()->newTable( $installer->getTable("silk_test") )->addColumn( "e_id", MagentoFrameworkDBDdlTable::TYPE_INTEGER, null, array("identity" => true, "nullable" => false, "primary" => true), "Employee ID" )->addColumn( "e_name", MagentoFrameworkDBDdlTable::TYPE_TEXT, 255, array("nullable" => false), "Employee Name" )->addColumn( "e_address", MagentoFrameworkDBDdlTable::TYPE_TEXT, "2M", array("nullable" => false), "Employee Address" )->addColumn( "is_active", MagentoFrameworkDBDdlTable::TYPE_SMALLINT, null, array(), "Active Status" )->addColumn( "created_at", MagentoFrameworkDBDdlTable::TYPE_TIMESTAMP, null, array(), "Creation Time" )->addColumn( "update_time", MagentoFrameworkDBDdlTable::TYPE_TIMESTAMP, null, array(), "Modification Time" )->setComment( "Employee Table" ); $installer->getConnection()->createTable($table); $installer->endSetup(); } }upgrade表結構UpgradeSchema.phpFile:app/code/Silk/Test/Setup/UpgradeSchema.php
代碼內容如下:
startSetup(); if (version_compare($context->getVersion(), "1.0.1") < 0) { $installer->startSetup(); $tableName = $setup->getTable("silk_test"); if ($setup->getConnection()->isTableExists($tableName) == true) { $installer->getConnection() ->addColumn($installer->getTable("silk_test"),"e_profile_picture", array( "type" => Table::TYPE_TEXT, "nullable" => true, "length" => 255, "comment" => "Profile Picture" )); } } $installer->endSetup(); } }備注: 更新表結構要查看module.xml中的schema_version標簽的值是否小于這里的版本號.
創建后臺配置文件后臺的配置文件是在etc/adminhtml/目錄下創建,比如menu.xml,routes.xml,system.xml,di.xml等等,依次來解釋下這些xml的作用
menu.xmlmenu.xml可以看作是配置當前模塊在后臺的導航位置的配置信息
File:app/code/Silk/Test/etc/adminhtml/menu.xml
代碼內容如下:
說明:
parent: "Magento_Backend::stores"表示當前模塊位于后臺Stores選項中;
title : 表示在后臺顯示的名稱;
id : 唯一標識符;
action: 表示點擊該選項要跳轉的路由;
acl.xmlFile:app/code/Silk/Test/etc/acl.xml
代碼內容如下:
查看權限位置:System > Permissions > User roles;
routes.xmlroutes.xml是配置后臺路由的信息
File:app/code/Silk/Test/etc/adminhtml/routes.xml
代碼內容如下:
說明:
frontName: 表示你后臺控制器的名稱
id: 唯一標識符;
system.xmlsystem.xml是配置后臺路由的信息
File:app/code/Silk/Test/etc/adminhtml/system.xml
代碼內容如下:
test Silk_Test::test Show list of the viewing MagentoConfigModelConfigSourceYesno
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21852.html
摘要:目標自定義字段。能夠對接自定義商品后續處理過程。參考模塊博文狀態持續編輯中簡單教程通過模塊開發自定義商品類型忽略部分,如何創建一個模塊,并啟用這個部分可以看我的其它博文。基本內容可以看到我整篇代碼復制模塊下面的,只自定義了一下這樣就可以了。 目標: 1. 自定義字段。 2. 啟用新商品類型簡化商品屬性。 3. 能夠對接自定義商品后續處理過程。 參考:Magento_Downloa...
摘要:原文地址上面一篇文章簡單介紹了如何使用進行的單元測試我們用了一段簡單的代碼進行計算的測試。添加測試接下來終于到了我們的主題,添加一些單元測試給我們忽略代碼中部分,主要集中在的代碼中。 原文地址:http://www.bradoncode.com/blog/2015/05/17/angularjs-testing-controller/@Bradley Braithwaite show...
閱讀 1837·2021-09-23 11:21
閱讀 698·2019-08-30 15:55
閱讀 832·2019-08-29 15:40
閱讀 528·2019-08-29 12:56
閱讀 3158·2019-08-26 12:00
閱讀 3552·2019-08-23 18:24
閱讀 2246·2019-08-23 17:08
閱讀 1637·2019-08-23 17:03