Analiza modula izdajatelja
Pregled
Section titled “Pregled”Ta dokument ponuja tehnično analizo arhitekture, vzorcev in podrobnosti izvedbe modula Publisher. Uporabite to kot referenco za razumevanje, kako je strukturiran modul XOOPS proizvodne kakovosti.
Pregled arhitekture
Section titled “Pregled arhitekture”flowchart TB subgraph "Presentation Layer" FE[Frontend Pages] AD[Admin Panel] BL[Blocks] end
subgraph "Application Layer" PH[Page Handlers] BH[Block Handlers] FO[Forms] end
subgraph "Domain Layer" IT[Item Entity] CA[Category Entity] FI[File Entity] end
subgraph "Infrastructure" IH[ItemHandler] CH[CategoryHandler] FH[FileHandler] DB[(Database)] end
FE --> PH AD --> PH BL --> BH PH --> IT PH --> CA BH --> IT IT --> IH CA --> CH FI --> FH IH --> DB CH --> DB FH --> DBStruktura imenika
Section titled “Struktura imenika”publisher/├── admin/│ ├── index.php # Admin dashboard│ ├── item.php # Article management│ ├── category.php # Category management│ ├── permission.php # Permissions│ ├── file.php # File manager│ └── menu.php # Admin menu├── assets/│ ├── css/│ ├── js/│ └── images/├── class/│ ├── Category.php # Category entity│ ├── CategoryHandler.php # Category data access│ ├── Item.php # Article entity│ ├── ItemHandler.php # Article data access│ ├── File.php # File attachment│ ├── FileHandler.php # File data access│ ├── Form/ # Form classes│ ├── Common/ # Utilities│ └── Helper.php # Module helper├── include/│ ├── common.php # Initialization│ ├── functions.php # Utility functions│ ├── oninstall.php # Install hooks│ ├── onupdate.php # Update hooks│ └── search.php # Search integration├── language/├── templates/├── sql/└── xoops_version.phpAnaliza subjektov
Section titled “Analiza subjektov”Entiteta postavke (članka).
Section titled “Entiteta postavke (članka).”class Item extends \XoopsObject{ // Fields public function initVar(): void { $this->initVar('itemid', XOBJ_DTYPE_INT, null, false); $this->initVar('categoryid', XOBJ_DTYPE_INT, 0, false); $this->initVar('title', XOBJ_DTYPE_TXTBOX, '', true); $this->initVar('subtitle', XOBJ_DTYPE_TXTBOX, ''); $this->initVar('summary', XOBJ_DTYPE_TXTAREA, ''); $this->initVar('body', XOBJ_DTYPE_TXTAREA, '', true); $this->initVar('uid', XOBJ_DTYPE_INT, 0); $this->initVar('status', XOBJ_DTYPE_INT, 0); $this->initVar('datesub', XOBJ_DTYPE_INT, time()); // ... more fields }
// Business methods public function isPublished(): bool { return $this->getVar('status') == _PUBLISHER_STATUS_PUBLISHED; }
public function canEdit(int $userId): bool { return $this->getVar('uid') == $userId || $this->isAdmin($userId); }}Vzorec upravljavca
Section titled “Vzorec upravljavca”class ItemHandler extends \XoopsPersistableObjectHandler{ public function __construct(\XoopsDatabase $db) { parent::__construct( $db, 'publisher_items', Item::class, 'itemid', 'title' ); }
public function getPublishedItems(int $limit = 10): array { $criteria = new \CriteriaCompo(); $criteria->add(new \Criteria('status', _PUBLISHER_STATUS_PUBLISHED)); $criteria->setSort('datesub'); $criteria->setOrder('DESC'); $criteria->setLimit($limit);
return $this->getObjects($criteria); }}Sistem dovoljenj
Section titled “Sistem dovoljenj”Vrste dovoljenj
Section titled “Vrste dovoljenj”| Dovoljenje | Opis |
|---|---|
publisher_view | Poglej category/articles |
publisher_submit | Predloži nove članke |
publisher_approve | Samodejno odobri predložitve |
publisher_moderate | Pregled člankov v teku |
publisher_global | Globalna dovoljenja modula |
Preverjanje dovoljenj
Section titled “Preverjanje dovoljenj”class PermissionHandler{ public function isGranted(string $permission, int $categoryId): bool { $userId = $GLOBALS['xoopsUser']?->uid() ?? 0; $groups = $this->getUserGroups($userId);
return $this->grouppermHandler->checkRight( $permission, $categoryId, $groups, $this->helper->getModule()->mid() ); }}Stanja poteka dela
Section titled “Stanja poteka dela”stateDiagram-v2 [*] --> Draft: Create Draft --> Submitted: Submit Submitted --> Published: Approve Submitted --> Rejected: Reject Submitted --> Draft: Return for Edit Published --> Offline: Unpublish Offline --> Published: Republish Published --> [*]: Delete Rejected --> [*]: DeleteStruktura predloge
Section titled “Struktura predloge”Frontend Templates
Section titled “Frontend Templates”| Predloga | Namen |
|---|---|
publisher_index.tpl | Domača stran modula |
publisher_item.tpl | En članek |
publisher_category.tpl | Seznam kategorij |
publisher_submit.tpl | Obrazec za oddajo |
publisher_search.tpl | Rezultati iskanja |
Blokiraj predloge
Section titled “Blokiraj predloge”| Predloga | Namen |
|---|---|
publisher_block_latest.tpl | Nedavni članki |
publisher_block_spotlight.tpl | Izbrani članek |
publisher_block_category.tpl | Meni kategorije |
Uporabljeni ključni vzorci
Section titled “Uporabljeni ključni vzorci”- Vzorec upravljavca - Enkapsulacija dostopa do podatkov
- Vrednostni objekt - Konstante stanja
- Metoda predloge - Ustvarjanje obrazca
- Strategija - Različni načini prikaza
- Opazovalec - Obvestila o dogodkih
Lekcije za razvoj modula
Section titled “Lekcije za razvoj modula”- Uporabite XoopsPersistableObjectHandler za CRUD
- Izvedite zrnata dovoljenja
- Ločite predstavitev od logike
- Uporabite merila za poizvedbe
- Podpora več stanj vsebine
- Integracija s sistemom obveščanja XOOPS
Povezana dokumentacija
Section titled “Povezana dokumentacija”- Ustvarjanje-člankov - Upravljanje s članki
- Managing-Categories - Sistem kategorij
- Nastavitev dovoljenj - Konfiguracija dovoljenj
- Developer-Guide/Hooks-and-Events - Razširitvene točke