Sistem module XOOPS
Sistem module XOOPS menyediakan kerangka kerja lengkap untuk mengembangkan, menginstal, mengelola, dan memperluas fungsionalitas module. module adalah paket mandiri yang memperluas XOOPS dengan fitur dan kemampuan tambahan.
Arsitektur module
Section titled “Arsitektur module”graph TD A[Module Package] -->|contains| B[xoops_version.php] A -->|contains| C[Admin Interface] A -->|contains| D[User Interface] A -->|contains| E[Class Files] A -->|contains| F[SQL Schema]
B -->|defines| G[Module Metadata] B -->|defines| H[Admin Pages] B -->|defines| I[User Pages] B -->|defines| J[Blocks] B -->|defines| K[Hooks]
L[Module Manager] -->|reads| B L -->|controls| M[Installation] L -->|controls| N[Activation] L -->|controls| O[Update] L -->|controls| P[Uninstallation]Struktur module
Section titled “Struktur module”Struktur direktori module XOOPS standar:
mymodule/├── xoops_version.php # Module manifest and configuration├── admin.php # Admin main page├── index.php # User main page├── admin/ # Admin pages directory│ ├── main.php│ ├── manage.php│ └── settings.php├── class/ # Module classes│ ├── Handler/│ │ ├── ItemHandler.php│ │ └── CategoryHandler.php│ └── Objects/│ ├── Item.php│ └── Category.php├── sql/ # Database schemas│ ├── mysql.sql│ └── postgres.sql├── include/ # Include files│ ├── common.inc.php│ └── functions.php├── templates/ # Module templates│ ├── admin/│ │ └── main.tpl│ └── user/│ ├── index.tpl│ └── item.tpl├── blocks/ # Module blocks│ └── blocks.php├── tests/ # Unit tests├── language/ # Language files│ ├── english/│ │ └── main.php│ └── spanish/│ └── main.php└── docs/ # DocumentationKelas XoopsModule
Section titled “Kelas XoopsModule”Kelas XoopsModule mewakili module XOOPS yang diinstal.
Ikhtisar Kelas
Section titled “Ikhtisar Kelas”namespace Xoops\Core\Module;
class XoopsModule extends XoopsObject{ protected int $moduleid = 0; protected string $name = ''; protected string $dirname = ''; protected string $version = ''; protected string $description = ''; protected array $config = []; protected array $blocks = []; protected array $adminPages = []; protected array $userPages = [];}Properti
Section titled “Properti”| Properti | Ketik | Deskripsi |
|---|---|---|
$moduleid | ke dalam | ID module unik |
$name | tali | Nama tampilan module |
$dirname | tali | Nama direktori module |
$version | tali | Versi module saat ini |
$description | tali | Deskripsi module |
$config | susunan | Konfigurasi module |
$blocks | susunan | block module |
$adminPages | susunan | Halaman panel admin |
$userPages | susunan | Halaman yang dilihat pengguna |
Konstruktor
Section titled “Konstruktor”public function __construct()Membuat instance module baru dan menginisialisasi variabel.
Metode core
Section titled “Metode core”dapatkan Nama
Section titled “dapatkan Nama”Mendapatkan nama tampilan module.
public function getName(): stringPengembalian: string - Nama tampilan module
Contoh:
$module = new XoopsModule();$module->setVar('name', 'Publisher');echo $module->getName(); // "Publisher"dapatkan NamaDirname
Section titled “dapatkan NamaDirname”Mendapatkan nama direktori module.
public function getDirname(): stringPengembalian: string - Nama direktori module
Contoh:
echo $module->getDirname(); // "publisher"dapatkanVersi
Section titled “dapatkanVersi”Mendapatkan versi module saat ini.
public function getVersion(): stringPengembalian: string - String versi
Contoh:
echo $module->getVersion(); // "2.1.0"dapatkanDeskripsi
Section titled “dapatkanDeskripsi”Mendapatkan deskripsi module.
public function getDescription(): stringPengembalian: string - Deskripsi module
Contoh:
$desc = $module->getDescription();dapatkan Konfigurasi
Section titled “dapatkan Konfigurasi”Mengambil konfigurasi module.
public function getConfig(string $key = null): mixedParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$key | tali | Kunci konfigurasi (null untuk semua) |
Pengembalian: mixed - Nilai atau array konfigurasi
Contoh:
$config = $module->getConfig();$itemsPerPage = $module->getConfig('items_per_page');setConfig
Section titled “setConfig”Mengatur konfigurasi module.
public function setConfig(string $key, mixed $value): voidParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$key | tali | Kunci konfigurasi |
$value | campuran | Nilai konfigurasi |
Contoh:
$module->setConfig('items_per_page', 20);$module->setConfig('enable_cache', true);dapatkan Jalur
Section titled “dapatkan Jalur”Mendapatkan jalur sistem file lengkap ke module.
public function getPath(): stringPengembalian: string - Jalur direktori module absolut
Contoh:
$path = $module->getPath(); // "/var/www/xoops/modules/publisher"$classPath = $module->getPath() . '/class';dapatkan Url
Section titled “dapatkan Url”Mendapatkan URL ke module.
public function getUrl(): stringPengembalian: string - module URL
Contoh:
$url = $module->getUrl(); // "http://example.com/modules/publisher"Proses Instalasi module
Section titled “Proses Instalasi module”Fungsi xoops_module_install
Section titled “Fungsi xoops_module_install”Fungsi instalasi module yang ditentukan dalam xoops_version.php:
function xoops_module_install_modulename($module){ // $module is an XoopsModule instance
// Create database tables // Initialize default configuration // Create default folders // Set up file permissions
return true; // Success}Parameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$module | XoopsModul | module yang sedang diinstal |
Pengembalian: bool - Benar jika berhasil, salah jika gagal
Contoh:
function xoops_module_install_publisher($module){ // Get module path $modulePath = $module->getPath();
// Create uploads directory $uploadsPath = XOOPS_ROOT_PATH . '/uploads/publisher'; if (!is_dir($uploadsPath)) { mkdir($uploadsPath, 0755, true); }
// Get database connection global $xoopsDB;
// Execute SQL installation script $sqlFile = $modulePath . '/sql/mysql.sql'; if (file_exists($sqlFile)) { $sqlQueries = file_get_contents($sqlFile); // Execute queries (simplified) $xoopsDB->queryFromFile($sqlFile); }
// Set default configuration $module->setConfig('items_per_page', 10); $module->setConfig('enable_comments', true);
return true;}xoops_module_uninstall Fungsi
Section titled “xoops_module_uninstall Fungsi”Fungsi penghapusan module:
function xoops_module_uninstall_modulename($module){ // Drop database tables // Remove uploaded files // Clean up configuration
return true;}Contoh:
function xoops_module_uninstall_publisher($module){ global $xoopsDB;
// Drop tables $tables = ['publisher_items', 'publisher_categories', 'publisher_comments']; foreach ($tables as $table) { $xoopsDB->query('DROP TABLE IF EXISTS ' . $xoopsDB->prefix($table)); }
// Remove upload folder $uploadsPath = XOOPS_ROOT_PATH . '/uploads/publisher'; if (is_dir($uploadsPath)) { // Recursive directory deletion $this->recursiveRemoveDir($uploadsPath); }
return true;}Kait module
Section titled “Kait module”hook module memungkinkan module berintegrasi dengan module lain dan sistem.
Deklarasi Kait
Section titled “Deklarasi Kait”Di xoops_version.php:
$modversion['hooks'] = [ 'system.page.footer' => [ 'function' => 'publisher_page_footer' ], 'user.profile.view' => [ 'function' => 'publisher_user_articles' ],];Implementasi Kait
Section titled “Implementasi Kait”// In a module file (e.g., include/hooks.php)
function publisher_page_footer(){ // Return HTML for footer return '<div class="publisher-footer">Publisher Footer Content</div>';}
function publisher_user_articles($user_id){ global $xoopsDB;
// Get user's articles $result = $xoopsDB->query( 'SELECT * FROM ' . $xoopsDB->prefix('publisher_articles') . ' WHERE author_id = ? ORDER BY published DESC LIMIT 5', [$user_id] );
$articles = []; while ($row = $xoopsDB->fetchAssoc($result)) { $articles[] = $row; }
return $articles;}Kait Sistem yang Tersedia
Section titled “Kait Sistem yang Tersedia”| Kait | Parameter | Deskripsi |
|---|---|---|
system.page.header | Tidak ada | Keluaran tajuk halaman |
system.page.footer | Tidak ada | Keluaran footer halaman |
user.login.success | Objek $user | Setelah pengguna login |
user.logout | Objek $user | Setelah pengguna logout |
user.profile.view | $user_id | Melihat profil pengguna |
module.install | Objek $module | Pemasangan module |
module.uninstall | Objek $module | Penghapusan module |
Layanan Manajer module
Section titled “Layanan Manajer module”Layanan ModuleManager menangani operasi module.
Metode#### getModule
Section titled “Metode#### getModule”Mengambil module berdasarkan nama.
public function getModule(string $dirname): ?XoopsModuleParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$dirname | tali | Nama direktori module |
Pengembalian: ?XoopsModule - Contoh module atau nol
Contoh:
$moduleManager = $kernel->getService('module');$publisher = $moduleManager->getModule('publisher');if ($publisher) { echo $publisher->getName();}dapatkanSemuaModul
Section titled “dapatkanSemuaModul”Mendapatkan semua module yang terpasang.
public function getAllModules(bool $activeOnly = true): arrayParameter:
| Parameter | Ketik | Deskripsi |
|---|---|---|
$activeOnly | bodoh | Hanya kembalikan module aktif |
Pengembalian: array - Array objek XoopsModule
Contoh:
$activeModules = $moduleManager->getAllModules(true);foreach ($activeModules as $module) { echo $module->getName() . " - " . $module->getVersion() . "\n";}adalahModuleActive
Section titled “adalahModuleActive”Memeriksa apakah module aktif.
public function isModuleActive(string $dirname): boolContoh:
if ($moduleManager->isModuleActive('publisher')) { // Publisher module is active}aktifkanModul
Section titled “aktifkanModul”Mengaktifkan module.
public function activateModule(string $dirname): boolContoh:
if ($moduleManager->activateModule('publisher')) { echo "Publisher activated";}nonaktifkanModul
Section titled “nonaktifkanModul”Menonaktifkan module.
public function deactivateModule(string $dirname): boolContoh:
if ($moduleManager->deactivateModule('publisher')) { echo "Publisher deactivated";}Konfigurasi module (xoops_version.php)
Section titled “Konfigurasi module (xoops_version.php)”Contoh manifes module lengkap:
<?php/** * Module manifest for Publisher */
$modversion = [ 'name' => 'Publisher', 'version' => '2.1.0', 'description' => 'Professional content publishing module', 'author' => 'XOOPS Community', 'credits' => 'Based on original work by...', 'license' => 'GPL v2', 'official' => 1, 'image' => 'images/logo.png', 'dirname' => 'publisher', 'onInstall' => 'xoops_module_install_publisher', 'onUpdate' => 'xoops_module_update_publisher', 'onUninstall' => 'xoops_module_uninstall_publisher',
// Admin pages 'hasAdmin' => 1, 'adminindex' => 'admin/main.php', 'adminmenu' => [ [ 'title' => 'Dashboard', 'link' => 'admin/main.php', 'icon' => 'dashboard.png' ], [ 'title' => 'Manage Items', 'link' => 'admin/items.php', 'icon' => 'items.png' ], [ 'title' => 'Settings', 'link' => 'admin/settings.php', 'icon' => 'settings.png' ] ],
// User pages 'hasMain' => 1, 'main_file' => 'index.php',
// Blocks 'blocks' => [ [ 'file' => 'blocks/recent.php', 'name' => 'Recent Articles', 'description' => 'Display recent published articles', 'show_func' => 'publisher_recent_show', 'edit_func' => 'publisher_recent_edit', 'options' => '5|0|0', 'template' => 'publisher_block_recent.tpl' ], [ 'file' => 'blocks/featured.php', 'name' => 'Featured Articles', 'description' => 'Display featured articles', 'show_func' => 'publisher_featured_show', 'edit_func' => 'publisher_featured_edit' ] ],
// Module hooks 'hooks' => [ 'system.page.footer' => [ 'function' => 'publisher_page_footer' ], 'user.profile.view' => [ 'function' => 'publisher_user_articles' ] ],
// Configuration items 'config' => [ [ 'name' => 'items_per_page', 'title' => '_MI_PUBLISHER_ITEMS_PER_PAGE', 'description' => '_MI_PUBLISHER_ITEMS_PER_PAGE_DESC', 'formtype' => 'text', 'valuetype' => 'int', 'default' => '10' ], [ 'name' => 'enable_comments', 'title' => '_MI_PUBLISHER_ENABLE_COMMENTS', 'description' => '_MI_PUBLISHER_ENABLE_COMMENTS_DESC', 'formtype' => 'yesno', 'valuetype' => 'int', 'default' => '1' ] ]];
function xoops_module_install_publisher($module){ // Installation logic return true;}
function xoops_module_update_publisher($module){ // Update logic return true;}
function xoops_module_uninstall_publisher($module){ // Uninstallation logic return true;}Praktik Terbaik
Section titled “Praktik Terbaik”-
namespace Kelas Anda - Gunakan namespace khusus module untuk menghindari konflik
-
Gunakan handler - Selalu gunakan kelas handler untuk operasi database
-
Internasionalisasi Konten - Gunakan konstanta bahasa untuk semua string yang dilihat pengguna
-
Buat Skrip Instalasi - Menyediakan skema SQL untuk tabel database
-
Dokumen Kait - Dokumentasikan dengan jelas kait apa yang disediakan module Anda
-
Versi module Anda - Tingkatkan nomor versi dengan rilis
-
Uji Instalasi - Uji proses install/uninstall secara menyeluruh
-
Menangani Izin - Periksa izin pengguna sebelum mengizinkan tindakan
Contoh module Lengkap
Section titled “Contoh module Lengkap”<?php/** * Custom Article Module Main Page */
include __DIR__ . '/include/common.inc.php';
// Get module instance$module = xoops_getModuleByDirname('mymodule');
// Check if module is activeif (!$module) { die('Module not found');}
// Get module configuration$itemsPerPage = $module->getConfig('items_per_page');
// Get item handler$itemHandler = xoops_getModuleHandler('item', 'mymodule');
// Fetch items with pagination$criteria = new CriteriaCompo();$criteria->add(new Criteria('status', 1));$items = $itemHandler->getObjects($criteria, $itemsPerPage);
// Prepare template$xoopsTpl->assign('items', $items);$xoopsTpl->assign('module_name', $module->getName());$xoopsTpl->display($module->getPath() . '/templates/user/index.tpl');Dokumentasi Terkait
Section titled “Dokumentasi Terkait”- ../Kernel/Kernel-Classes - Inisialisasi kernel dan layanan core
- ../Template/Template-System - template module dan integrasi theme
- ../Database/QueryBuilder - Pembuatan kueri basis data
- ../Core/XoopsObject - Kelas objek dasar
Lihat juga: Panduan Pengembangan module XOOPS