XOOPS שיעורי ליבה
הקרנל XOOPS מספק את המסגרת הבסיסית לאתחול של המערכת, ניהול תצורות, טיפול באירועי מערכת ואספקת כלי עזר ליבה. שיעורים אלה מהווים את עמוד השדרה של היישום XOOPS.
ארכיטקטורת מערכת
Section titled “ארכיטקטורת מערכת”graph TD A[XoopsKernel] -->|initializes| B[Configuration Manager] A -->|manages| C[Service Container] A -->|handles| D[System Hooks] A -->|registers| E[Core Services]
B -->|loads| F[config.php] B -->|manages| G[Module Configs]
C -->|contains| H[Database] C -->|contains| I[Logger] C -->|contains| J[Template Engine] C -->|contains| K[Module Manager]
E -->|registers| L[User Service] E -->|registers| M[Module Service] E -->|registers| N[Database Service]XoopsKernel שיעור
Section titled “XoopsKernel שיעור”מחלקת הקרנל הראשית המאתחלת ומנהלת את מערכת XOOPS.
סקירת כיתה
Section titled “סקירת כיתה”namespace Xoops;
class XoopsKernel{ private static ?XoopsKernel $instance = null; protected ServiceContainer $services; protected ConfigurationManager $config; protected array $modules = []; protected bool $isLoaded = false;}קונסטרוקטור
Section titled “קונסטרוקטור”private function __construct()בנאי פרטי אוכף דפוס יחיד.
getInstance
Section titled “getInstance”מאחזר את מופע ליבת הסינגלטון.
public static function getInstance(): XoopsKernelמחזירות: XoopsKernel - מופע ליבת הסינגלטון
דוגמה:
$kernel = XoopsKernel::getInstance();תהליך אתחול
Section titled “תהליך אתחול”תהליך האתחול של הליבה מבצע את השלבים הבאים:
- אתחול - הגדר מטפלי שגיאות, הגדר קבועים
- תצורה - טען קבצי תצורה
- רישום שירות - רישום שירותי ליבה
- זיהוי מודולים - סרוק וזיהוי מודולים פעילים
- אתחול מסד נתונים - התחבר למסד נתונים
- ניקוי - היכונו לטיפול בבקשות
public function boot(): voidדוּגמָה:
$kernel = XoopsKernel::getInstance();$kernel->boot();שיטות מיכל שירות
Section titled “שיטות מיכל שירות”registerService
Section titled “registerService”רושם שירות במיכל השירות.
public function registerService( string $name, callable|object $definition): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$name | מחרוזת | מזהה שירות |
$definition | ניתן להתקשר|אובייקט | מפעל שירות או מופע |
דוּגמָה:
$kernel->registerService('custom.handler', function($c) { return new CustomHandler();});getService
Section titled “getService”מאחזר שירות רשום.
public function getService(string $name): mixedפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$name | מחרוזת | מזהה שירות |
החזרות: mixed - השירות המבוקש
דוגמה:
$database = $kernel->getService('database');$logger = $kernel->getService('logger');hasService
Section titled “hasService”בודק אם שירות רשום.
public function hasService(string $name): boolדוּגמָה:
if ($kernel->hasService('cache')) { $cache = $kernel->getService('cache');}מנהל תצורה
Section titled “מנהל תצורה”מנהל את תצורת האפליקציה והגדרות המודול.
סקירת כיתה
Section titled “סקירת כיתה”namespace Xoops\Core;
class ConfigurationManager{ protected array $config = []; protected array $defaults = []; protected string $configPath;}טוען תצורה מקובץ או מערך.
public function load(string|array $source): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$source | מחרוזת|מערך | נתיב קובץ תצורה או מערך |
דוּגמָה:
$config = $kernel->getService('config');$config->load(XOOPS_ROOT_PATH . '/include/config.php');$config->load(['sitename' => 'My Site', 'admin_email' => 'admin@example.com']);מאחזר ערך תצורה.
public function get(string $key, mixed $default = null): mixedפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$key | מחרוזת | מפתח תצורה (סימון נקודה) |
$default | מעורב | ערך ברירת מחדל אם לא נמצא |
החזרות: mixed - ערך תצורה
דוגמה:
$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email', 'admin@example.com');מגדיר ערך תצורה.
public function set(string $key, mixed $value): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$key | מחרוזת | מפתח תצורה |
$value | מעורב | ערך תצורה |
דוּגמָה:
$config->set('sitename', 'New Site Name');$config->set('features.cache_enabled', true);getModuleConfig
Section titled “getModuleConfig”מקבל תצורה עבור מודול ספציפי.
public function getModuleConfig( string $moduleName): arrayפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$moduleName | מחרוזת | שם ספריית מודול |
החזרות: array - מערך תצורת מודול
דוגמה:
$publisherConfig = $config->getModuleConfig('publisher');ווי מערכת
Section titled “ווי מערכת”ווי מערכת מאפשרים למודולים ותוספים להפעיל קוד בנקודות ספציפיות במחזור החיים של האפליקציה.
כיתת HookManager
Section titled “כיתת HookManager”namespace Xoops\Core;
class HookManager{ protected array $hooks = []; protected array $listeners = [];}addHook
Section titled “addHook”רושם נקודת הוק.
public function addHook(string $name): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$name | מחרוזת | מזהה הוק |
דוּגמָה:
$hooks = $kernel->getService('hooks');$hooks->addHook('system.startup');$hooks->addHook('user.login');$hooks->addHook('module.install');תקשיבו
Section titled “תקשיבו”מצרף מאזין להוק.
public function listen( string $hookName, callable $callback, int $priority = 10): voidפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$hookName | מחרוזת | מזהה הוק |
$callback | ניתן להתקשר | פונקציה לביצוע |
$priority | int | עדיפות ביצוע (ריצות גבוהות יותר תחילה) |
דוּגמָה:
$hooks->listen('user.login', function($user) { error_log('User ' . $user->uname . ' logged in');}, 10);
$hooks->listen('module.install', function($module) { // Custom module installation logic echo "Installing " . $module->getName();}, 5);מבצע את כל המאזינים להוק.
public function trigger( string $hookName, mixed $arguments = null): arrayפרמטרים:
| פרמטר | הקלד | תיאור |
|---|---|---|
$hookName | מחרוזת | מזהה הוק |
$arguments | מעורב | נתונים להעביר למאזינים |
החזרות: array - תוצאות מכל המאזינים
דוגמה:
$results = $hooks->trigger('system.startup');$results = $hooks->trigger('user.created', $newUser);סקירה כללית של שירותי ליבה
Section titled “סקירה כללית של שירותי ליבה”הקרנל רושם מספר שירותי ליבה במהלך האתחול:
| שירות | כיתה | מטרה |
|---|---|---|
database | XoopsDatabase | שכבת הפשטת מסד נתונים |
config | ConfigurationManager | ניהול תצורה |
logger | לוגר | רישום יישומים |
template | XoopsTpl | מנוע תבנית |
user | מנהל משתמשים | שירות ניהול משתמשים |
module | ModuleManager | ניהול מודול |
cache | CacheManager | שכבת cache |
hooks | HookManager | מערכת ווים לאירועים |
דוגמה מלאה לשימוש
Section titled “דוגמה מלאה לשימוש”<?php/** * Custom module boot process utilizing kernel */
// Get kernel instance$kernel = XoopsKernel::getInstance();
// Boot the system$kernel->boot();
// Get services$config = $kernel->getService('config');$database = $kernel->getService('database');$logger = $kernel->getService('logger');$hooks = $kernel->getService('hooks');
// Access configuration$siteName = $config->get('sitename');$adminEmail = $config->get('admin.email');
// Register module-specific hooks$hooks->listen('user.login', function($user) { // Log user login $logger->info('User login: ' . $user->uname);
// Track in database $database->query( 'INSERT INTO ' . $database->prefix('event_log') . ' (type, user_id, message, timestamp) VALUES (?, ?, ?, ?)', ['login', $user->uid(), 'User login', time()] );});
$hooks->listen('module.install', function($module) { $logger->info('Module installed: ' . $module->getName());});
// Trigger hooks$hooks->trigger('system.startup');
// Use database service$result = $database->query( 'SELECT * FROM ' . $database->prefix('users') . ' LIMIT 10');
while ($row = $database->fetchArray($result)) { echo "User: " . htmlspecialchars($row['uname']) . "\n";}
// Register custom service$kernel->registerService('custom.repository', function($c) { return new CustomRepository($c->getService('database'));});
// Later access custom service$repo = $kernel->getService('custom.repository');קבועי ליבה
Section titled “קבועי ליבה”הקרנל מגדיר מספר קבועים חשובים במהלך האתחול:
// System pathsdefine('XOOPS_ROOT_PATH', '/var/www/xoops');define('XOOPS_HTDOCS_PATH', XOOPS_ROOT_PATH . '/htdocs');define('XOOPS_MODULES_PATH', XOOPS_ROOT_PATH . '/htdocs/modules');define('XOOPS_THEMES_PATH', XOOPS_ROOT_PATH . '/htdocs/themes');
// Web pathsdefine('XOOPS_URL', 'http://example.com');define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// Databasedefine('XOOPS_DB_PREFIX', 'xoops_');טיפול בשגיאות
Section titled “טיפול בשגיאות”הקרנל מגדיר מטפלי שגיאות במהלך האתחול:
// Set custom error handlerset_error_handler(function($errno, $errstr, $errfile, $errline) { $kernel->getService('logger')->error( "Error: $errstr in $errfile:$errline" );});
// Set exception handlerset_exception_handler(function($exception) { $kernel->getService('logger')->critical( "Exception: " . $exception->getMessage() );});שיטות עבודה מומלצות
Section titled “שיטות עבודה מומלצות”- אתחול בודד - התקשר
boot()פעם אחת בלבד במהלך הפעלת האפליקציה - השתמש ב-Service Container - רישום ואחזר שירותים דרך הקרנל
- טיפול בהוקס מוקדם - רשום מאזיני הוק לפני הפעלתם
- יומן אירועים חשובים - השתמש בשירות לוגר לצורך איתור באגים
- תצורת cache - טען תצורה פעם אחת ועשה שימוש חוזר
- טיפול בשגיאות - הגדר תמיד מטפלי שגיאות לפני עיבוד בקשות
תיעוד קשור
Section titled “תיעוד קשור”- ../Module/Module-System - מערכת מודול ומחזור חיים
- ../Template/Template-System - שילוב מנוע תבניות
- ../User/User-System - אימות וניהול משתמשים
- ../Database/XoopsDatabase - שכבת מסד נתונים
ראה גם: XOOPS מקור ליבה