วิธีสร้างโมดูลที่กำหนดเองใน Magento 2

เผยแพร่แล้ว: 2018-03-19

โมดูล Magento คืออะไร?

ดังที่คุณทราบ โมดูลคือไดเร็กทอรีที่มี block , controllers , models , helper ฯลฯ ที่เกี่ยวข้องกับคุณลักษณะทางธุรกิจเฉพาะ

เพื่อให้สอดคล้องกับความมุ่งมั่นของ Magento ในด้านโมดูลาร์ที่เหมาะสมที่สุด โมดูลจึงรวมคุณลักษณะหนึ่งไว้และมีการพึ่งพาโมดูลอื่นๆ น้อยที่สุด

โมดูลมีคุณสมบัติทางธุรกิจพร้อมตรรกะสนับสนุน ในขณะที่ธีมมีอิทธิพลอย่างมากต่อประสบการณ์ของผู้ใช้และรูปลักษณ์หน้าร้าน

วัตถุประสงค์ของโมดูล

วัตถุประสงค์ของแต่ละโมดูลคือการจัดเตรียมคุณลักษณะเฉพาะของผลิตภัณฑ์โดยใช้ฟังก์ชันการทำงานใหม่หรือขยายฟังก์ชันการทำงานของโมดูลอื่นๆ แต่ละโมดูลได้รับการออกแบบมาให้ทำงานได้อย่างอิสระ ดังนั้นการรวมหรือการยกเว้นของโมดูลเฉพาะจึงไม่ส่งผลต่อการทำงานของโมดูลอื่นๆ

ใน Magento 2 โมดูลจะใช้งานจริงในไดเร็กทอรี app/code ของการติดตั้ง Magento ด้วยรูปแบบนี้: app/code/<Vendor>/<ModuleName> ตอนนี้เราจะทำตามขั้นตอนเหล่านี้เพื่อสร้างโมดูลง่ายๆ ที่ทำงานบน Magento 2

สร้างโมดูล Magento 2

  1. สร้างโฟลเดอร์โมดูล
  2. สร้างไฟล์ etc/module.xml
  3. สร้างไฟล์ register.php
  4. เรียกใช้สคริปต์ bin/magento setup:upgrade เพื่อติดตั้งโมดูลใหม่
  5. ตรวจสอบว่าโมดูลทำงาน

มาดูรายละเอียดแต่ละขั้นตอนเหล่านี้กัน

ขั้นตอนที่ 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 หากคุณกำลังใช้บรรทัดคำสั่ง รหัสจะเป็น:

  1. cd ไปยังโฟลเดอร์รูท
  2. mkdir app/code/Learning
  3. 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