Hệ Thống Extension
Hệ Thống Extension của Jankx cho phép bạn module hóa chức năng và tải tính năng động.
Tổng Quan
┌─────────────────────────────────────────┐
│ ExtensionManager │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Plugin │ │ Theme │ │ Custom │ │
│ │ Ext A │ │ Ext B │ │ Ext C │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ └────────────┴────────────┘ │
│ Manifest │
└─────────────────────────────────────────┘
ExtensionManager
Trung tâm quản lý tất cả các extensions:
use Jankx\Extensions\ExtensionManager;
// Lấy singleton instance
$manager = ExtensionManager::getInstance();
// Kiểm tra extension đang active
if ($manager->is_extension_active('my-extension')) {
// Extension đang active
}
// Lấy tất cả extensions
$extensions = $manager->get_extensions();
Extension Manager API
// Kích hoạt/Hủy kích hoạt
$manager->activate_extension('my-extension');
$manager->deactivate_extension('my-extension');
// Cài đặt/Gỡ cài đặt
$manager->install_extension('my-extension');
$manager->uninstall_extension('my-extension');
// Yêu cầu
$manager->require_extension('required-ext', true); // Bắt buộc
$manager->require_extension('optional-ext', false); // Khuyến nghị
// Kiểm tra
$manager->is_extension_active('my-extension');
$manager->is_extension_required('my-extension');
$manager->is_extension_installed('my-extension');
Tạo Extensions
Bước 1: Tạo Extension Class
<?php
namespace Jankx\Extensions\MyExtension;
use Jankx\Extensions\AbstractExtension;
class MyExtension extends AbstractExtension
{
protected $id = 'my-extension';
protected $name = 'My Extension';
protected $version = '1.0.0';
protected $author = 'Your Name';
protected $description = 'Mô tả extension';
public function activate(): void
{
parent::activate();
// Logic kích hoạt
$this->register_post_types();
$this->register_taxonomies();
}
public function deactivate(): void
{
// Logic cleanup
parent::deactivate();
}
public function boot(): void
{
// Chạy sau khi tất cả extensions được load
add_action('init', [$this, 'init']);
}
}
Bước 2: Tạo Manifest
{
"name": "My Extension",
"id": "my-extension",
"version": "1.0.0",
"author": "Your Name",
"description": "Mô tả extension",
"main": "MyExtension.php",
"class": "Jankx\\Extensions\\MyExtension\\MyExtension",
"requires": {
"php": ">=7.4",
"wordpress": ">=5.8",
"jankx": ">=2.0"
},
"dependencies": [
"other-extension"
]
}
Bước 3: Đăng Ký Extension
use Jankx\Extensions\ExtensionManager;
use Jankx\Extensions\MyExtension\MyExtension;
add_action('jankx/extensions/init', function(ExtensionManager $manager) {
$manager->add_extension('my-extension', new MyExtension());
});
Extension Manifest
| Trường | Kiểu | Mô Tả |
|---|---|---|
name | string | Tên hiển thị |
id | string | ID duy nhất |
version | string | Semantic version |
author | string | Tên tác giả |
description | string | Mô tả |
main | string | File entry point |
class | string | Tên class đầy đủ |
requires | object | Yêu cầu (php, wordpress, jankx) |
dependencies | array | Extensions phụ thuộc |
Vòng Đời Extension
class MyExtension extends AbstractExtension
{
// Gọi khi cài đặt
public function install(): bool
{
// Tạo tables, options, etc.
return true;
}
// Gọi khi kích hoạt
public function activate(): void
{
// Đăng ký hooks, flush rewrite rules
}
// Gọi sau khi tất cả extensions được load
public function boot(): void
{
// Khởi tạo services
}
// Gọi trên WordPress init
public function init(): void
{
// Đăng ký shortcodes, widgets
}
// Gọi khi hủy kích hoạt
public function deactivate(): void
{
// Cleanup, flush cache
}
// Gọi khi gỡ cài đặt
public function uninstall(): bool
{
// Xóa tables, options
return true;
}
}
Tính Năng Pro
License Management PRO
use Jankx\Facades\License;
// Kiểm tra license
if (License::is_valid()) {
// License hợp lệ
}
// Kích hoạt license
License::activate('your-license-key');
// Lấy thông tin license
$info = License::get_info();
Auto-Updates PRO
// Bật auto-update cho extension cụ thể
add_filter('jankx/extension/auto_update', function($enabled, $extension) {
if ($extension === 'my-premium-ext') {
return true;
}
return $enabled;
}, 10, 2);
Các Nguyên Tắc Tốt
- Namespace Đúng Cách - Dùng
Jankx\Extensions\MyExtension - Dùng Dependency Injection - Tận dụng Application container
- Xử Lý Phụ Thuộc - Kiểm tra các extensions yêu cầu
- Quản Lý Version - Chạy migrations khi đổi version
- Xử Lý Lỗi - Dùng try-catch và Log facade