Μετάβαση στο περιεχόμενο

Άγκιστρα και εκδηλώσεις

Το XOOPS παρέχει άγκιστρα και συμβάντα ως σημεία επέκτασης που επιτρέπουν στις μονάδες να αλληλεπιδρούν με τη βασική λειτουργικότητα και μεταξύ τους χωρίς άμεσες εξαρτήσεις.

ΌψηΆγκιστραΕκδηλώσεις
ΣκοπόςΤροποποίηση behavior/dataΑντίδραση σε περιστατικά
ΕπιστροφήΜπορεί να επιστρέψει τροποποιημένα δεδομέναΤυπικά άκυρο
ΧρονομέτρησηBefore/during δράσηΜετά από δράση
ΜοτίβοΑλυσίδα φίλτρουObserver/pub-sub
// Register a hook in xoops_version.php
$modversion['hooks'][] = [
'name' => 'user.profile.display',
'callback' => 'mymodule_hook_user_profile',
'priority' => 10,
];
include/hooks.php
function mymodule_hook_user_profile(array $data): array
{
$userId = $data['user_id'];
// Add custom profile fields
$data['fields']['reputation'] = mymodule_get_user_reputation($userId);
$data['fields']['badges'] = mymodule_get_user_badges($userId);
return $data;
}
Όνομα γάντζουΔεδομέναΠεριγραφή
user.profile.displayΣυστοιχία δεδομένων χρήστηΤροποποίηση εμφάνισης προφίλ
content.renderΠεριεχόμενο HTMLΦιλτράρισμα εξόδου περιεχομένου
form.submitΔεδομένα φόρμαςValidate/modify δεδομένα φόρμας
search.resultsΠίνακας αποτελεσμάτωνΦιλτράρισμα αποτελεσμάτων αναζήτησης
menu.mainΣτοιχεία μενούΤροποποίηση του κύριου μενού
// In your module code
$eventHandler = xoops_getHandler('event');
$eventHandler->trigger('mymodule.article.created', [
'article_id' => $article->id(),
'author_id' => $article->authorId(),
'title' => $article->title(),
]);
class/Preload.php
class MyModulePreload extends \Xmf\Module\Helper\AbstractHelper
{
public function eventMymoduleArticleCreated(array $args): void
{
$articleId = $args['article_id'];
// Notify subscribers
$this->notifyNewArticle($articleId);
}
public function eventUserLogin(array $args): void
{
$userId = $args['userid'];
// Update last login for module
$this->updateUserActivity($userId);
}
}
// Header/Footer
public function eventCoreHeaderStart(array $args): void {}
public function eventCoreHeaderEnd(array $args): void {}
public function eventCoreFooterStart(array $args): void {}
public function eventCoreFooterEnd(array $args): void {}
// Includes
public function eventCoreIncludeCommonStart(array $args): void {}
public function eventCoreIncludeCommonEnd(array $args): void {}
// Exceptions
public function eventCoreException(array $args): void {}
public function eventUserLogin(array $args): void {}
public function eventUserLogout(array $args): void {}
public function eventUserRegister(array $args): void {}
public function eventUserActivate(array $args): void {}
public function eventUserDelete(array $args): void {}
public function eventSystemModuleInstall(array $args): void {}
public function eventSystemModuleUninstall(array $args): void {}
public function eventSystemModuleUpdate(array $args): void {}
public function eventSystemModuleActivate(array $args): void {}
public function eventSystemModuleDeactivate(array $args): void {}
// Define event constants
class ArticleEvents
{
public const CREATED = 'mymodule.article.created';
public const UPDATED = 'mymodule.article.updated';
public const DELETED = 'mymodule.article.deleted';
public const PUBLISHED = 'mymodule.article.published';
}
class ArticleService
{
public function publish(Article $article): void
{
$article->publish();
$this->repository->save($article);
// Trigger event
$GLOBALS['xoopsPreload']->triggerEvent(
ArticleEvents::PUBLISHED,
['article' => $article]
);
}
}
// In another module's Preload.php
public function eventMymoduleArticlePublished(array $args): void
{
$article = $args['article'];
// Index for search
$this->searchIndexer->index($article);
// Update sitemap
$this->sitemapGenerator->addUrl($article->url());
}
  1. Χρησιμοποιήστε συγκεκριμένα ονόματα - μορφή module.entity.action
  2. Περάστε ελάχιστα δεδομένα - Μόνο ό,τι χρειάζονται οι ακροατές
  3. Συμβάντα εγγράφου - Καταχωρίστε συμβάντα στα έγγραφα της ενότητας
  4. Αποφύγετε τις παρενέργειες - Κρατήστε τους ακροατές συγκεντρωμένους
  5. Χειρισμός σφαλμάτων - Μην αφήνετε τα σφάλματα ακροατών να διακόπτουν τη ροή
  • Σύστημα συμβάντων - Αναλυτική τεκμηρίωση συμβάντων
  • ../03-Module-Development/Module-Development - Ανάπτυξη ενότητας
  • ../07-XOOPS-4.0/Implementation-Guides/Event-System-Guide - PSR-14 συμβάντα