วิธีสร้างโมดูลที่กำหนดเองใน Magento 2
เผยแพร่แล้ว: 2018-03-19โมดูล Magento คืออะไร?
ดังที่คุณทราบ โมดูลคือไดเร็กทอรีที่มี block , controllers , models , helper ฯลฯ ที่เกี่ยวข้องกับคุณลักษณะทางธุรกิจเฉพาะ
เพื่อให้สอดคล้องกับความมุ่งมั่นของ Magento ในด้านโมดูลาร์ที่เหมาะสมที่สุด โมดูลจึงรวมคุณลักษณะหนึ่งไว้และมีการพึ่งพาโมดูลอื่นๆ น้อยที่สุด
โมดูลมีคุณสมบัติทางธุรกิจพร้อมตรรกะสนับสนุน ในขณะที่ธีมมีอิทธิพลอย่างมากต่อประสบการณ์ของผู้ใช้และรูปลักษณ์หน้าร้าน
วัตถุประสงค์ของโมดูล
วัตถุประสงค์ของแต่ละโมดูลคือการจัดเตรียมคุณลักษณะเฉพาะของผลิตภัณฑ์โดยใช้ฟังก์ชันการทำงานใหม่หรือขยายฟังก์ชันการทำงานของโมดูลอื่นๆ แต่ละโมดูลได้รับการออกแบบมาให้ทำงานได้อย่างอิสระ ดังนั้นการรวมหรือการยกเว้นของโมดูลเฉพาะจึงไม่ส่งผลต่อการทำงานของโมดูลอื่นๆ
ใน Magento 2 โมดูลจะใช้งานจริงในไดเร็กทอรี app/code ของการติดตั้ง Magento ด้วยรูปแบบนี้: app/code/<Vendor>/<ModuleName> ตอนนี้เราจะทำตามขั้นตอนเหล่านี้เพื่อสร้างโมดูลง่ายๆ ที่ทำงานบน Magento 2
สร้างโมดูล Magento 2
- สร้างโฟลเดอร์โมดูล
- สร้างไฟล์ etc/module.xml
- สร้างไฟล์ register.php
- เรียกใช้สคริปต์ bin/magento setup:upgrade เพื่อติดตั้งโมดูลใหม่
- ตรวจสอบว่าโมดูลทำงาน
มาดูรายละเอียดแต่ละขั้นตอนเหล่านี้กัน
ขั้นตอนที่ 1: สร้างโฟลเดอร์โมดูล
- มีสองตำแหน่งที่เป็นไปได้สำหรับโมดูลใน Magento 2: โฟลเดอร์ app/code และโฟลเดอร์ vendor
ขึ้นอยู่กับวิธีการติดตั้ง Magento 2 โมดูลหลักสามารถอยู่ในโฟลเดอร์ vendor/magento/magento-* (สำหรับการติดตั้งผู้แต่ง) หรือใน app/code/Magento/ โฟลเดอร์ (สำหรับการโคลน github)
- คุณควรเลือกตำแหน่งใดต่อไปนี้สำหรับโมดูลใหม่ของคุณ
หากคุณสร้างโมดูลสำหรับโปรเจ็กต์เฉพาะ วิธีที่ดีที่สุดคือเลือกโฟลเดอร์แอป/โค้ดและคอมมิตกับที่เก็บของโปรเจ็กต์
หากคุณสร้างส่วนขยายเพื่อนำกลับมาใช้ใหม่ ควรใช้ผู้แต่งเพื่อสร้างส่วนขยาย และใส่โมดูลของคุณในโฟลเดอร์ vendor/<YOUR_VENDOR>/module-something
ชื่อโมดูลแต่ละชื่อใน Magento 2 ประกอบด้วยสองส่วน – ผู้ขายและตัวโมดูล ดังนั้นคุณต้องกำหนดชื่อผู้ขายและโมดูล สำหรับตัวอย่างนี้ ให้ตั้งชื่อผู้ขายว่า "การเรียนรู้" และโมดูล "FirstUnit"
มาสร้างโฟลเดอร์ app/code/Learning และในโฟลเดอร์นี้จะมีโฟลเดอร์อื่น: FirstUnit หากคุณกำลังใช้บรรทัดคำสั่ง รหัสจะเป็น:
- cd ไปยังโฟลเดอร์รูท
- mkdir app/code/Learning
- mkdirapp/code/Learning/FirstUnit
ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์สร้างไฟล์และโฟลเดอร์ในการติดตั้งของคุณ
ขั้นตอนที่ 2: สร้างไฟล์ etc/module.xml
ไฟล์นี้จำเป็นสำหรับโมดูลที่จะมีอยู่และมีข้อมูลต่อไปนี้:
- ชื่อโมดูล
- รุ่นโมดูล
- การพึ่งพา
ชื่อโมดูลถูกกำหนดโดยโฟลเดอร์ที่เราเพิ่งสร้างขึ้น เนื่องจากใน Magento 2 ชื่อคลาสต้องเป็นไปตามโครงสร้างโฟลเดอร์ เนื่องจากเราสร้างโฟลเดอร์ Learning/FirstUnit ชื่อโมดูลของเราจึงเป็น Learning_FirstUnit และทุกคลาสที่อยู่ในโมดูลนี้จะเริ่มต้นด้วย Learning\FirstUnit ตัวอย่างเช่น Learning\FirstUnit\Observer\Test
เวอร์ชันโมดูลระบุเวอร์ชันปัจจุบันของสคีมาฐานข้อมูลและข้อมูล และใช้ในการอัปเกรด ตัวอย่างเช่น สมมติว่าคุณตัดสินใจแก้ไขสคีมาของตารางในโมดูลของคุณ คุณจะแน่ใจได้อย่างไรว่าการเปลี่ยนแปลงนี้จะเกิดขึ้นกับทุกอินสแตนซ์ที่มีการปรับใช้โค้ด การเปลี่ยนแปลงฐานข้อมูลโดยการสืบค้น SQL โดยตรงจะไม่ทำงาน แต่ Magento 2 มีสคริปต์การติดตั้งและอัปเกรดในทุกโมดูล (เป็นทางเลือก) สคริปต์เหล่านี้มีคำสั่งเพื่อแก้ไขสคีมาฐานข้อมูลหรือข้อมูล ในการติดตามว่าจะรันสคริปต์หรือไม่ Magento 2 จะใช้เวอร์ชันของโมดูล ทุกครั้งที่คุณนำการเปลี่ยนแปลงฐานข้อมูลใหม่ไปใช้ คุณจะต้องใช้เวอร์ชันใหม่ของโมดูลและเปลี่ยน module.xml ที่เกี่ยวข้อง Magento บันทึกเวอร์ชันของโมดูลปัจจุบันในฐานข้อมูล และหากค่าฐานข้อมูลและค่าใน module.xml ไม่ตรงกัน ระบบจะรันโค้ดอัปเกรด

การพึ่งพาอาศัยกัน หากโมดูลหนึ่งขึ้นอยู่กับโมดูลอื่น ไฟล์ module.xml จะมีการประกาศพิเศษที่กำหนดรายการของโมดูลที่โมดูลปัจจุบันขึ้นอยู่กับ สำหรับตัวอย่างนี้ เราจะทำให้โมดูลของเราขึ้นอยู่กับ Magento_Catalog
ใช้รหัสบรรทัดคำสั่งต่อไปนี้ สร้างโฟลเดอร์ app/code/Learning/FirstUnit/etc :
mkdir app/code/Learning/FirstUnit/etc
จากนั้นสร้างไฟล์ XML ที่มีเนื้อหาดังต่อไปนี้:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Learning_FirstUnit" setup_version="0.0.1"> <ลำดับ> <module name="Magento_Catalog" /> </sequence> </module> </config>
โปรดทราบว่าในไฟล์ XML เราระบุ:
- ชื่อโมดูล: Learning_FirstUnit (ตามโฟลเดอร์ที่เราสร้าง)
- เวอร์ชัน: 0.0.1 (เวอร์ชันเริ่มต้นของโมดูลของเรา)
- การพึ่งพา: Magento_Catalog เราสามารถพึ่งพาได้หลายแบบ ในกรณีนี้ เราจะใส่โหนด <module name=”..” /> ไว้ใต้โหนดลำดับ
ขั้นตอนที่ 3: สร้างไฟล์ register.php
แต่ละโมดูลต้องมีไฟล์นี้ ซึ่งจะบอกให้ Magento ทราบถึงวิธีค้นหาโมดูล ต่อจากตัวอย่างของเรา สร้างไฟล์ app/code/Learning/FirstUnit/registration.php จากนั้นใส่เนื้อหาต่อไปนี้ลงไป:
<?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);
register.php เป็นไฟล์มาตรฐานที่มีรูปแบบเดียวกันในทุกโมดูล
สิ่งเดียวที่แตกต่างกันไปคือชื่อโมดูล ซึ่งในกรณีของเราคือ Learning_FirstUnit
ขั้นตอนที่ 4: เรียกใช้คำสั่ง “setup:upgrade”
การรันคำสั่งนี้จะทำให้โมดูลใหม่ของคุณใช้งานได้ โดยจะแจ้งเตือน Magento ว่ามีอยู่
php bin/การติดตั้งวีโอไอพี:อัพเกรด
ควรสะท้อนเอาต์พุตจำนวนมาก โดยหนึ่งบรรทัดควรเป็น Learning_FirstUnit
ตรวจสอบว่ามีรหัสบรรทัดนี้
ขั้นตอนที่ 5: ตรวจสอบว่าโมดูลใหม่ทำงานอยู่
จนถึงตอนนี้ เรายังไม่ได้เพิ่มโค้ดที่เป็นประโยชน์ใดๆ ลงในโมดูลของเรา แต่โค้ดดังกล่าวยังว่างเปล่าอยู่ (จึงมองไม่เห็น) เพื่อตรวจสอบว่าได้รับการยอมรับหรือไม่ ให้ตรวจสอบไฟล์ app/etc/config.php มีรายการโมดูลที่สร้างขึ้นโดยอัตโนมัติซึ่งทำงานอยู่
อย่าเปลี่ยนรายการนี้ด้วยตนเอง!
cat app/etc/env.php | grep Learning_FirstUnit
เมื่อใช้ขั้นตอนเหล่านี้ คุณสามารถสร้างโมดูลใหม่ใน Magento 2 ได้สำเร็จ
อ่านเพิ่มเติม:
วิธีการปรับใช้เนื้อหาแบบคงที่ใน Magento 2