İçeriğe geç

Publisher Modülü Analizi

Bu belge, Publisher modülü mimarisinin, kalıplarının ve uygulama ayrıntılarının teknik analizini sağlar. Üretim kalitesinde bir XOOPS modülünün nasıl yapılandırıldığını anlamak için bunu referans olarak kullanın.

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
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);
}
}
İzinAçıklama
publisher_viewGörüntüle category/articles
publisher_submitYeni makaleler gönderin
publisher_approveGönderimleri otomatik olarak onayla
publisher_moderateBekleyen makaleleri inceleyin
publisher_globalGenel module izinleri
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
templateAmaç
publisher_index.tplmodule ana sayfası
publisher_item.tplTek makale
publisher_category.tplKategori listeleme
publisher_submit.tplBaşvuru formu
publisher_search.tplArama sonuçları
templateAmaç
publisher_block_latest.tplSon makaleler
publisher_block_spotlight.tplÖne çıkan makale
publisher_block_category.tplKategori menüsü
  1. İşleyici Kalıbı - Veri erişimi kapsülleme
  2. Değer Nesnesi - Durum sabitleri
  3. template Yöntemi - Form oluşturma
  4. Strateji - Farklı görüntüleme modları
  5. Gözlemci - Etkinliklerle ilgili bildirimler
  1. CRUD için XoopsPersistableObjectHandler kullanın
  2. Parçalı izinleri uygulayın
  3. Sunumu mantıktan ayırın
  4. Sorgular için Kriterleri kullanın
  5. Birden fazla içerik durumunu destekleyin
  6. XOOPS bildirim sistemiyle entegrasyon
  • Makale Oluşturma - Makale yönetimi
  • Kategorileri Yönetme - Kategori sistemi
  • permissions-Kurulum - İzin yapılandırması
  • Developer-Guide/Hooks-and-Events - Uzatma noktaları