דלגו לתוכן

XOOPS שיעורי ליבה

הקרנל XOOPS מספק את המסגרת הבסיסית לאתחול של המערכת, ניהול תצורות, טיפול באירועי מערכת ואספקת כלי עזר ליבה. שיעורים אלה מהווים את עמוד השדרה של היישום XOOPS.

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]

מחלקת הקרנל הראשית המאתחלת ומנהלת את מערכת XOOPS.

namespace Xoops;
class XoopsKernel
{
private static ?XoopsKernel $instance = null;
protected ServiceContainer $services;
protected ConfigurationManager $config;
protected array $modules = [];
protected bool $isLoaded = false;
}
private function __construct()

בנאי פרטי אוכף דפוס יחיד.

מאחזר את מופע ליבת הסינגלטון.

public static function getInstance(): XoopsKernel

מחזירות: XoopsKernel - מופע ליבת הסינגלטון

דוגמה:

$kernel = XoopsKernel::getInstance();

תהליך האתחול של הליבה מבצע את השלבים הבאים:

  1. אתחול - הגדר מטפלי שגיאות, הגדר קבועים
  2. תצורה - טען קבצי תצורה
  3. רישום שירות - רישום שירותי ליבה
  4. זיהוי מודולים - סרוק וזיהוי מודולים פעילים
  5. אתחול מסד נתונים - התחבר למסד נתונים
  6. ניקוי - היכונו לטיפול בבקשות
public function boot(): void

דוּגמָה:

$kernel = XoopsKernel::getInstance();
$kernel->boot();

רושם שירות במיכל השירות.

public function registerService(
string $name,
callable|object $definition
): void

פרמטרים:

פרמטרהקלדתיאור
$nameמחרוזתמזהה שירות
$definitionניתן להתקשר|אובייקטמפעל שירות או מופע

דוּגמָה:

$kernel->registerService('custom.handler', function($c) {
return new CustomHandler();
});

מאחזר שירות רשום.

public function getService(string $name): mixed

פרמטרים:

פרמטרהקלדתיאור
$nameמחרוזתמזהה שירות

החזרות: mixed - השירות המבוקש

דוגמה:

$database = $kernel->getService('database');
$logger = $kernel->getService('logger');

בודק אם שירות רשום.

public function hasService(string $name): bool

דוּגמָה:

if ($kernel->hasService('cache')) {
$cache = $kernel->getService('cache');
}

מנהל את תצורת האפליקציה והגדרות המודול.

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);

מקבל תצורה עבור מודול ספציפי.

public function getModuleConfig(
string $moduleName
): array

פרמטרים:

פרמטרהקלדתיאור
$moduleNameמחרוזתשם ספריית מודול

החזרות: array - מערך תצורת מודול

דוגמה:

$publisherConfig = $config->getModuleConfig('publisher');

ווי מערכת מאפשרים למודולים ותוספים להפעיל קוד בנקודות ספציפיות במחזור החיים של האפליקציה.

namespace Xoops\Core;
class HookManager
{
protected array $hooks = [];
protected array $listeners = [];
}

רושם נקודת הוק.

public function addHook(string $name): void

פרמטרים:

פרמטרהקלדתיאור
$nameמחרוזתמזהה הוק

דוּגמָה:

$hooks = $kernel->getService('hooks');
$hooks->addHook('system.startup');
$hooks->addHook('user.login');
$hooks->addHook('module.install');

מצרף מאזין להוק.

public function listen(
string $hookName,
callable $callback,
int $priority = 10
): void

פרמטרים:

פרמטרהקלדתיאור
$hookNameמחרוזתמזהה הוק
$callbackניתן להתקשרפונקציה לביצוע
$priorityintעדיפות ביצוע (ריצות גבוהות יותר תחילה)

דוּגמָה:

$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 “סקירה כללית של שירותי ליבה”

הקרנל רושם מספר שירותי ליבה במהלך האתחול:

שירותכיתהמטרה
databaseXoopsDatabaseשכבת הפשטת מסד נתונים
configConfigurationManagerניהול תצורה
loggerלוגררישום יישומים
templateXoopsTplמנוע תבנית
userמנהל משתמשיםשירות ניהול משתמשים
moduleModuleManagerניהול מודול
cacheCacheManagerשכבת cache
hooksHookManagerמערכת ווים לאירועים
<?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');

הקרנל מגדיר מספר קבועים חשובים במהלך האתחול:

// System paths
define('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 paths
define('XOOPS_URL', 'http://example.com');
define('XOOPS_HTDOCS_URL', XOOPS_URL . '/htdocs');
// Database
define('XOOPS_DB_PREFIX', 'xoops_');

הקרנל מגדיר מטפלי שגיאות במהלך האתחול:

// Set custom error handler
set_error_handler(function($errno, $errstr, $errfile, $errline) {
$kernel->getService('logger')->error(
"Error: $errstr in $errfile:$errline"
);
});
// Set exception handler
set_exception_handler(function($exception) {
$kernel->getService('logger')->critical(
"Exception: " . $exception->getMessage()
);
});
  1. אתחול בודד - התקשר boot() פעם אחת בלבד במהלך הפעלת האפליקציה
  2. השתמש ב-Service Container - רישום ואחזר שירותים דרך הקרנל
  3. טיפול בהוקס מוקדם - רשום מאזיני הוק לפני הפעלתם
  4. יומן אירועים חשובים - השתמש בשירות לוגר לצורך איתור באגים
  5. תצורת cache - טען תצורה פעם אחת ועשה שימוש חוזר
  6. טיפול בשגיאות - הגדר תמיד מטפלי שגיאות לפני עיבוד בקשות
  • ../Module/Module-System - מערכת מודול ומחזור חיים
  • ../Template/Template-System - שילוב מנוע תבניות
  • ../User/User-System - אימות וניהול משתמשים
  • ../Database/XoopsDatabase - שכבת מסד נתונים

ראה גם: XOOPS מקור ליבה