تخطَّ إلى المحتوى

تحليل وحدة Publisher

توفر هذه الوثيقة تحليلاً تقنياً لمعمارية وحدة Publisher والأنماط وتفاصيل التنفيذ. استخدم هذا كمرجع لفهم كيفية بناء وحدة XOOPS بجودة الإنتاج.

نظرة عامة على المعمارية

Section titled “نظرة عامة على المعمارية”
flowchart TB
subgraph "طبقة العرض"
FE[صفحات الواجهة الأمامية]
AD[لوحة الإدارة]
BL[الكتل]
end
subgraph "طبقة التطبيق"
PH[معالجات الصفحات]
BH[معالجات الكتل]
FO[النماذج]
end
subgraph "طبقة المجال"
IT[كيان العنصر]
CA[كيان الفئة]
FI[كيان الملف]
end
subgraph "البنية التحتية"
IH[معالج العنصر]
CH[معالج الفئة]
FH[معالج الملف]
DB[(قاعدة البيانات)]
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 # لوحة معلومات الإدارة
│ ├── item.php # إدارة المقالات
│ ├── category.php # إدارة الفئات
│ ├── permission.php # الأذونات
│ ├── file.php # مدير الملفات
│ └── menu.php # قائمة الإدارة
├── assets/
│ ├── css/
│ ├── js/
│ └── images/
├── class/
│ ├── Category.php # كيان الفئة
│ ├── CategoryHandler.php # الوصول إلى بيانات الفئة
│ ├── Item.php # كيان المقالة
│ ├── ItemHandler.php # الوصول إلى بيانات المقالة
│ ├── File.php # مرفق الملف
│ ├── FileHandler.php # الوصول إلى بيانات الملف
│ ├── Form/ # فئات النموذج
│ ├── Common/ # الأدوات المساعدة
│ └── Helper.php # مساعد الوحدة
├── include/
│ ├── common.php # التهيئة
│ ├── functions.php # وظائف الأداة
│ ├── oninstall.php # خطاطيف التثبيت
│ ├── onupdate.php # خطاطيف التحديث
│ └── search.php # تكامل البحث
├── language/
├── templates/
├── sql/
└── xoops_version.php
class Item extends \XoopsObject
{
// الحقول
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());
// ... المزيد من الحقول
}
// طرق الأعمال
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عرض الفئة/المقالات
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

قوالب الواجهة الأمامية

Section titled “قوالب الواجهة الأمامية”
القالبالغرض
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. استخدم Criteria للاستعلامات
  5. دعم حالات محتوى متعددة
  6. التكامل مع نظام الإخطارات XOOPS
  • Creating-Articles - إدارة المقالات
  • Managing-Categories - نظام الفئات
  • Permissions-Setup - إعداد الأذونات
  • Developer-Guide/Hooks-and-Events - نقاط الامتداد