Lewati ke konten

Analisis module Penerbit

Dokumen ini memberikan analisis teknis tentang arsitektur module Publisher, pola, dan detail implementasi. Gunakan ini sebagai referensi untuk memahami struktur module XOOPS kualitas produksi.

flowchart TB
subgraph "Presentation Layer"
FE[front-end 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
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);
}
}
IzinDeskripsi
publisher_viewLihat category/articles
publisher_submitKirimkan artikel baru
publisher_approveKiriman yang disetujui secara otomatis
publisher_moderateTinjau artikel yang tertunda
publisher_globalIzin module global
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()
);
}
}
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
templateTujuan
publisher_index.tplBeranda module
publisher_item.tplArtikel tunggal
publisher_category.tplDaftar kategori
publisher_submit.tplFormulir penyerahan
publisher_search.tplHasil pencarian
templateTujuan
publisher_block_latest.tplArtikel terbaru
publisher_block_spotlight.tplArtikel unggulan
publisher_block_category.tplMenu kategori
  1. Pola handler - Enkapsulasi akses data
  2. Objek Nilai - Konstanta status
  3. Metode template - Pembuatan formulir
  4. Strategi - Mode tampilan berbeda
  5. Pengamat - Pemberitahuan tentang acara
  1. Gunakan XoopsPersistableObjectHandler untuk CRUD
  2. Menerapkan izin terperinci
  3. Pisahkan presentasi dari logika
  4. Gunakan Kriteria untuk pertanyaan
  5. Mendukung berbagai status konten
  6. Integrasikan dengan sistem notifikasi XOOPS
  • Membuat-Artikel - Manajemen artikel
  • Pengelolaan-Kategori - Sistem kategori
  • Izin-Pengaturan - Konfigurasi izin
  • Developer-Guide/Hooks-and-Events - Poin ekstensi