Přeskočit na obsah

Analýza modulu vydavatele

Tento dokument poskytuje technickou analýzu architektury modulu Publisher, vzorů a podrobností o implementaci. Použijte to jako referenci pro pochopení toho, jak je strukturován modul XOOPS v produkční kvalitě.

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 --> DB
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.php

Entita položky (článek).

Sekce “Entita položky (článek).”
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);
}
}
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);
}
}
PovoleníPopis
publisher_viewZobrazit category/articles
publisher_submitOdeslat nové články
publisher_approveAutomaticky schvalovat příspěvky
publisher_moderateRecenze čekajících článků
publisher_globalGlobální oprávnění modulu
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()
);
}
}

Stavy pracovního postupu

Sekce “Stavy pracovního postupu”
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 --> [*]: Delete
ŠablonaÚčel
publisher_index.tplDomovská stránka modulu
publisher_item.tplJediný článek
publisher_category.tplSeznam kategorií
publisher_submit.tplPřihlašovací formulář
publisher_search.tplVýsledky hledání
ŠablonaÚčel
publisher_block_latest.tplNejnovější články
publisher_block_spotlight.tplDoporučený článek
publisher_block_category.tplNabídka kategorií

Použité vzory klíčů

Sekce “Použité vzory klíčů”
  1. Vzor manipulátoru – Zapouzdření přístupu k datům
  2. Value Object - Stavové konstanty
  3. Metoda šablony - Generování formuláře
  4. Strategie – Různé režimy zobrazení
  5. Pozorovatel – Upozornění na události

Lekce pro vývoj modulů

Sekce “Lekce pro vývoj modulů”
  1. Použijte XOOPSPersitableObjectHandler pro CRUD
  2. Implementujte podrobná oprávnění
  3. Oddělte prezentaci od logiky
  4. Použijte kritéria pro dotazy
  5. Podpora více stavů obsahu
  6. Integrace s oznamovacím systémem XOOPS

Související dokumentace

Sekce “Související dokumentace”
  • Vytváření článků - Správa článků
  • Management-Categories - Systém kategorií
  • Permissions-Setup - Konfigurace oprávnění
  • Developer-Guide/Hooks-and-Events - Prodlužovací body