hooks ve Etkinlikler
Genel Bakış
Section titled “Genel Bakış”XOOPS, modüllerin temel işlevlerle ve birbirleriyle doğrudan bağımlılık olmadan etkileşime girmesine olanak tanıyan uzantı noktaları olarak hooks ve events sağlar.
hooks ve Etkinlikler
Section titled “hooks ve Etkinlikler”| Görünüş | hooks | Etkinlikler |
|---|---|---|
| Amaç | Değiştir behavior/data | Olaylara tepki verin |
| Geri Dön | Değiştirilen verileri döndürebilir | Genellikle geçersiz |
| Zamanlama | Before/during eylem | Eylemden sonra |
| Desen | Filtre zinciri | Observer/pub-sub |
Kanca Sistemi
Section titled “Kanca Sistemi”Kancaları Kaydetme
Section titled “Kancaları Kaydetme”// Register a hook in xoops_version.php$modversion['hooks'][] = [ 'name' => 'user.profile.display', 'callback' => 'mymodule_hook_user_profile', 'priority' => 10,];Kanca Geri Arama
Section titled “Kanca Geri Arama”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;}Mevcut Core Kancaları
Section titled “Mevcut Core Kancaları”| Kanca Adı | Veri | Açıklama |
|---|---|---|
user.profile.display | user veri dizisi | Profil görünümünü değiştirin |
content.render | İçerik HTML | İçerik çıktısını filtrele |
form.submit | Form verileri | Validate/modify form verileri |
search.results | Sonuçlar dizisi | Arama sonuçlarını filtrele |
menu.main | Menü öğeleri | Ana menüyü değiştir |
Etkinlik Sistemi
Section titled “Etkinlik Sistemi”Olayları Gönderme
Section titled “Olayları Gönderme”// In your module code$eventHandler = xoops_getHandler('event');
$eventHandler->trigger('mymodule.article.created', [ 'article_id' => $article->id(), 'author_id' => $article->authorId(), 'title' => $article->title(),]);Etkinlikleri Dinleme
Section titled “Etkinlikleri Dinleme”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); }}Ön Yükleme Olayları Referansı
Section titled “Ön Yükleme Olayları Referansı”Temel Etkinlikler
Section titled “Temel Etkinlikler”// 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 {}user Etkinlikleri
Section titled “user Etkinlikleri”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 {}module Etkinlikleri
Section titled “module Etkinlikleri”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 {}Özel module Etkinlikleri
Section titled “Özel module Etkinlikleri”Olayları Tanımlama
Section titled “Olayları Tanımlama”// 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';}Olayları Tetiklemek
Section titled “Olayları Tetiklemek”class ArticleService{ public function publish(Article $article): void { $article->publish(); $this->repository->save($article);
// Trigger event $GLOBALS['xoopsPreload']->triggerEvent( ArticleEvents::PUBLISHED, ['article' => $article] ); }}module Etkinliklerini Dinleme
Section titled “module Etkinliklerini Dinleme”// 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());}En İyi Uygulamalar
Section titled “En İyi Uygulamalar”- Belirli İsimler Kullanın -
module.entity.actionbiçimi - Minimum Veri Aktarın - Yalnızca dinleyicilerin ihtiyaç duyduğu şeyler
- Belge Olayları - module belgelerindeki olayları listeleyin
- Yan Etkilerden Kaçının - Dinleyicilerin odaklanmasını sağlayın
- Hataları Ele Alın - Dinleyici hatalarının akışı bozmasına izin vermeyin
İlgili Belgeler
Section titled “İlgili Belgeler”- Etkinlik Sistemi - Ayrıntılı etkinlik dokümantasyonu
- ../03-Module-Development/Module-Development - module geliştirme
- ../07-XOOPS-4.0/Implementation-Guides/Event-System-Guide - PSR-14 events