logologo
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
logologo

เริ่มต้นใช้งานฉบับย่อ

ภาพรวมการพัฒนาปลั๊กอิน
การเขียนปลั๊กอินแรกของคุณ
โครงสร้างไดเรกทอรีโปรเจกต์

การพัฒนาฝั่งเซิร์ฟเวอร์

ภาพรวม
ปลั๊กอิน
คอลเลกชัน
การดำเนินการฐานข้อมูล
การจัดการแหล่งข้อมูล
การจัดการทรัพยากร
การควบคุมการเข้าถึง (ACL)
มิดเดิลแวร์
แคช
เหตุการณ์
คอนเท็กซ์คำขอ
สคริปต์การย้ายข้อมูล
ล็อก
การทำให้เป็นสากล (I18n)
คำสั่ง
การจัดการงานที่กำหนดเวลา
การทดสอบ

การพัฒนาฝั่งไคลเอนต์

ภาพรวม
ปลั๊กอิน
คอนเท็กซ์
เราเตอร์
การควบคุมการเข้าถึง (ACL)
การจัดการแหล่งข้อมูล
ทรัพยากร
คำขอ
สไตล์และธีม
ล็อก
การทำให้เป็นสากล (I18n)
การทดสอบ

อื่นๆ

คู่มือการอัปเกรดปลั๊กอิน
รายการภาษา
การจัดการ Dependencies
การสร้าง
Previous Pageภาพรวม
Next Pageคอนเท็กซ์
TIP

เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ

#ปลั๊กอิน (Plugin)

ใน NocoBase, ปลั๊กอินฝั่งไคลเอนต์ (Client Plugin) เป็นวิธีหลักในการขยายและปรับแต่งฟังก์ชันการทำงานของส่วนหน้า (frontend) ครับ/ค่ะ ด้วยการสืบทอด (extend) คลาสพื้นฐาน (base class) ของ Plugin ที่ @nocobase/client จัดเตรียมไว้ให้ นักพัฒนาสามารถลงทะเบียน (register) โลจิก, เพิ่มคอมโพเนนต์หน้าเว็บ, ขยายเมนู หรือผสานรวมฟังก์ชันจากภายนอกได้ในแต่ละช่วงชีวิต (lifecycle) ที่แตกต่างกันครับ/ค่ะ

#โครงสร้างคลาสของปลั๊กอิน

โครงสร้างปลั๊กอินฝั่งไคลเอนต์พื้นฐานที่สุดมีดังนี้ครับ/ค่ะ

import { Plugin } from '@nocobase/client';

export class PluginHelloClient extends Plugin {
  async afterAdd() {
    // ทำงานหลังจากเพิ่มปลั๊กอินแล้ว
    console.log('Plugin added');
  }

  async beforeLoad() {
    // ทำงานก่อนที่ปลั๊กอินจะโหลด
    console.log('Before plugin load');
  }

  async load() {
    // ทำงานเมื่อปลั๊กอินโหลด, ใช้สำหรับลงทะเบียนเราต์ (routes), คอมโพเนนต์ UI ฯลฯ
    console.log('Plugin loaded');
  }
}

export default PluginHelloClient;

#คำอธิบายช่วงชีวิต (Lifecycle)

ปลั๊กอินแต่ละตัวจะผ่านช่วงชีวิต (lifecycle) ต่อไปนี้ตามลำดับ เมื่อมีการรีเฟรชเบราว์เซอร์หรือเมื่อแอปพลิเคชันเริ่มต้นทำงานครับ/ค่ะ

เมธอดช่วงชีวิต (Lifecycle Method)ช่วงเวลาที่ทำงานคำอธิบาย
afterAdd()ทำงานทันทีหลังจากเพิ่มปลั๊กอินเข้าสู่ตัวจัดการปลั๊กอินณ จุดนี้ อินสแตนซ์ของปลั๊กอินถูกสร้างขึ้นแล้ว แต่ยังไม่ใช่ปลั๊กอินทั้งหมดที่เริ่มต้นทำงานเสร็จสมบูรณ์ เหมาะสำหรับการเริ่มต้นทำงานแบบเบาๆ เช่น การอ่านค่าคอนฟิกูเรชัน หรือการผูกเหตุการณ์พื้นฐานครับ/ค่ะ
beforeLoad()ทำงานก่อนเมธอด load() ของปลั๊กอินทั้งหมดสามารถเข้าถึงอินสแตนซ์ของปลั๊กอินที่เปิดใช้งานทั้งหมดได้ (this.app.pm.get()) เหมาะสำหรับโลจิกการเตรียมการที่ต้องพึ่งพาปลั๊กอินอื่นๆ ครับ/ค่ะ
load()ทำงานเมื่อปลั๊กอินโหลดเมธอดนี้จะทำงานหลังจากเมธอด beforeLoad() ของปลั๊กอินทั้งหมดทำงานเสร็จสมบูรณ์ เหมาะสำหรับการลงทะเบียนเราต์ (routes) ของส่วนหน้า (frontend), คอมโพเนนต์ UI และโลจิกหลักอื่นๆ ครับ/ค่ะ

#ลำดับการทำงาน

ทุกครั้งที่เบราว์เซอร์รีเฟรช เมธอด afterAdd() → beforeLoad() → load() จะถูกเรียกทำงานตามลำดับครับ/ค่ะ

#บริบทของปลั๊กอิน (Plugin Context) และ FlowEngine

ตั้งแต่ NocoBase 2.0 เป็นต้นไป API สำหรับการขยายฟังก์ชันการทำงานฝั่งไคลเอนต์จะเน้นอยู่ที่ FlowEngine เป็นหลักครับ/ค่ะ ในคลาสของปลั๊กอิน คุณสามารถเข้าถึงอินสแตนซ์ของเอนจินได้ผ่าน this.engine ครับ/ค่ะ

// เข้าถึงบริบทของเอนจินในเมธอด load()
async load() {
  const { app, router, apiClient } = this.engine.context;
  console.log('Current app:', app);
}

ดูรายละเอียดเพิ่มเติมได้ที่:

  • FlowEngine
  • บริบท (Context)