Trnki in dogodki
Pregled
Section titled “Pregled”XOOPS ponuja kljuke in dogodke kot razširitvene točke, ki modulom omogočajo interakcijo z osnovno funkcionalnostjo in med seboj brez neposrednih odvisnosti.
Kavlji proti dogodki
Section titled “Kavlji proti dogodki”| Vidik | Kljuke | Dogodki |
|---|---|---|
| Namen | Spremeni behavior/data | Odziv na dogodke |
| Vrnitev | Lahko vrne spremenjene podatke | Običajno nično |
| Čas | Before/during dejanje | Po akciji |
| Vzorec | Veriga filtra | Observer/pub-sub |
Sistem kavljev
Section titled “Sistem kavljev”Registriranje kavljev
Section titled “Registriranje kavljev”// Register a hook in xoops_version.php$modversion['hooks'][] = [ 'name' => 'user.profile.display', 'callback' => 'mymodule_hook_user_profile', 'priority' => 10,];Povratni klic
Section titled “Povratni klic”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;}Na voljo Core Hooks
Section titled “Na voljo Core Hooks”| Ime kljuke | Podatki | Opis |
|---|---|---|
user.profile.display | Niz uporabniških podatkov | Spremeni prikaz profila |
content.render | Vsebina HTML | Filtriraj izpis vsebine |
form.submit | Podatki obrazca | Validate/modify podatki obrazca |
search.results | Niz rezultatov | Filtriraj rezultate iskanja |
menu.main | Elementi menija | Spremeni glavni meni |
Sistem dogodkov
Section titled “Sistem dogodkov”Odpremni dogodki
Section titled “Odpremni dogodki”// In your module code$eventHandler = xoops_getHandler('event');
$eventHandler->trigger('mymodule.article.created', [ 'article_id' => $article->id(), 'author_id' => $article->authorId(), 'title' => $article->title(),]);Poslušanje dogodkov
Section titled “Poslušanje dogodkov”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); }}Referenca dogodkov prednalaganja
Section titled “Referenca dogodkov prednalaganja”Ključni dogodki
Section titled “Ključni dogodki”// Header/Footerpublic function eventCoreHeaderStart(array $args): void {}public function eventCoreHeaderEnd(array $args): void {}public function eventCoreFooterStart(array $args): void {}public function eventCoreFooterEnd(array $args): void {}
// Includespublic function eventCoreIncludeCommonStart(array $args): void {}public function eventCoreIncludeCommonEnd(array $args): void {}
// Exceptionspublic function eventCoreException(array $args): void {}Uporabniški dogodki
Section titled “Uporabniški dogodki”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 {}Dogodki modula
Section titled “Dogodki modula”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 {}Dogodki modula po meri
Section titled “Dogodki modula po meri”Definiranje dogodkov
Section titled “Definiranje dogodkov”// Define event constantsclass 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';}Sprožilni dogodki
Section titled “Sprožilni dogodki”class ArticleService{ public function publish(Article $article): void { $article->publish(); $this->repository->save($article);
// Trigger event $GLOBALS['xoopsPreload']->triggerEvent( ArticleEvents::PUBLISHED, ['article' => $article] ); }}Poslušanje dogodkov modula
Section titled “Poslušanje dogodkov modula”// 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());}Najboljše prakse
Section titled “Najboljše prakse”- Uporabite posebna imena - oblika
module.entity.action - Pass Minimal Data – Samo tisto, kar poslušalci potrebujejo
- Dokumentiraj dogodke - Seznam dogodkov v dokumentih modula
- Izogibajte se stranskim učinkom – Poslušalci naj bodo osredotočeni
- Obravnavajte napake - Ne dovolite, da bi napake poslušalcev prekinile tok
Povezana dokumentacija
Section titled “Povezana dokumentacija”- Event-System - Podrobna dokumentacija dogodkov
- ../03-Module-Development/Module-Development - Razvoj modula
- ../07-XOOPS-4.0/Implementation-Guides/Event-System-Guide - PSR-14 dogodkov