تجزیه و تحلیل ماژول ناشر
بررسی اجمالی
Section titled “بررسی اجمالی”این سند یک تحلیل فنی از معماری ماژول ناشر، الگوها و جزئیات پیاده سازی ارائه می دهد. از این به عنوان مرجع برای درک چگونگی ساختار یک ماژول 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ساختار دایرکتوری
Section titled “ساختار دایرکتوری”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تجزیه و تحلیل موجودیت
Section titled “تجزیه و تحلیل موجودیت”مورد (مقاله) نهاد
Section titled “مورد (مقاله) نهاد”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); }}الگوی هندلر
Section titled “الگوی هندلر”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); }}سیستم مجوز
Section titled “سیستم مجوز”انواع مجوز
Section titled “انواع مجوز”| مجوز | توضیحات |
|---|---|
publisher_view | مشاهده category/articles |
publisher_submit | ارسال مقالات جدید |
publisher_approve | تایید خودکار مطالب ارسالی |
publisher_moderate | بررسی مقالات در حال انتظار |
publisher_global | مجوزهای ماژول جهانی |
بررسی مجوز
Section titled “بررسی مجوز”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() ); }}وضعیت گردش کار
Section titled “وضعیت گردش کار”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ساختار قالب
Section titled “ساختار قالب”قالب های Frontend
Section titled “قالب های Frontend”| الگو | هدف |
|---|---|
publisher_index.tpl | صفحه اصلی ماژول |
publisher_item.tpl | تک مقاله |
publisher_category.tpl | فهرست بندی دسته ها |
publisher_submit.tpl | فرم ارسال |
publisher_search.tpl | نتایج جستجو |
قالب ها را مسدود کنید
Section titled “قالب ها را مسدود کنید”| الگو | هدف |
|---|---|
publisher_block_latest.tpl | مقالات اخیر |
publisher_block_spotlight.tpl | مقاله برگزیده |
publisher_block_category.tpl | منوی دسته بندی |
الگوهای کلیدی استفاده شده است
Section titled “الگوهای کلیدی استفاده شده است”- ** الگوی Handler ** - کپسوله کردن دسترسی به داده ها
- ارزش شی - ثابت های وضعیت
- روش قالب - تولید فرم
- ** استراتژی ** - حالت های مختلف نمایش
- ** ناظر ** - اطلاعیه ها در مورد رویدادها
درس برای توسعه ماژول
Section titled “درس برای توسعه ماژول”- از XoopsPersistableObjectHandler برای CRUD استفاده کنید
- مجوزهای granular را پیاده سازی کنید
- ارائه را از منطق جدا کنید
- برای پرس و جو از معیارها استفاده کنید
- پشتیبانی از چندین وضعیت محتوا
- ادغام با سیستم اطلاع رسانی XOOPS
مستندات مرتبط
Section titled “مستندات مرتبط”- ایجاد-مقالات - مدیریت مقاله
- مدیریت-دسته ها - سیستم دسته بندی
- Permissions-Setup - Permission Configuration
- Developer-Guide/Hooks-and-Events - نقاط پسوند