דלגו לתוכן

ניתוח מודול Publisher

מסמך זה מספק ניתוח טכני של ארכיטקטורת מודול Publisher, דפוסים ופרטי יישום. השתמש בזה כהתייחסות להבנה כיצד בנוי מודול XOOPS באיכות ייצור.

סקירה כללית של אדריכלות

Section titled “סקירה כללית של אדריכלות”
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);
}
}
רשותתיאור
publisher_viewצפה category/articles
publisher_submitשלח מאמרים חדשים
publisher_approveאישור אוטומטי של הגשות
publisher_moderateסקור מאמרים ממתינים
publisher_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
תבניתמטרה
publisher_index.tplדף הבית של המודול
publisher_item.tplמאמר בודד
publisher_category.tplרישום קטגוריות
publisher_submit.tplטופס הגשה
publisher_search.tplתוצאות חיפוש
תבניתמטרה
publisher_block_latest.tplמאמרים אחרונים
publisher_block_spotlight.tplמאמר מומלץ
publisher_block_category.tplתפריט קטגוריות

נעשה שימוש בתבניות מפתח

Section titled “נעשה שימוש בתבניות מפתח”
  1. דפוס מטפל - אנקפסולציה של גישה לנתונים
  2. אובייקט ערך - קבועי סטטוס
  3. שיטת תבנית - יצירת טפסים
  4. אסטרטגיה - מצבי תצוגה שונים
  5. מתבונן - הודעות על אירועים
  1. השתמש ב-XoopsPersistableObjectHandler עבור CRUD
  2. הטמע הרשאות מפורטות
  3. הפרד מצגת מהיגיון
  4. השתמש בקריטריונים עבור שאילתות
  5. תמיכה בסטטוסי תוכן מרובים
  6. השתלב עם מערכת הודעות XOOPS
  • יצירת מאמרים - ניהול מאמרים
  • ניהול-קטגוריות - מערכת קטגוריות
  • הרשאות-הגדרה - תצורת הרשאות
  • Developer-Guide/Hooks-and-Events - נקודות הארכה