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

صفحات إدارة الوحدة

توفر فئة Xmf\Module\Admin طريقة متسقة لإنشاء واجهات إدارة الوحدات. يضمن استخدام XMF لصفحات الإدارة التوافق المستقبلي مع إصدارات XOOPS المقبلة مع الحفاظ على تجربة المستخدم الموحدة.

جعلت فئة ModuleAdmin في أطر عمل XOOPS الإدارة أسهل، لكن واجهتها البرمجية تطورت عبر الإصدارات. غلاف Xmf\Module\Admin:

  • يوفر واجهة برمجية مستقرة تعمل عبر إصدارات XOOPS
  • يتعامل تلقائياً مع اختلافات API بين الإصدارات
  • يضمن أن الكود الإداري الخاص بك متوافق مع المستقبل
  • يقدم طرق ثابتة مريحة للمهام الشائعة
$admin = \Xmf\Module\Admin::getInstance();

هذا يعود إما مثيل Xmf\Module\Admin أو فئة نظام أصلية إذا كانت بالفعل متوافقة.

تحركت الأيقونات بين إصدارات XOOPS، مما تسبب في صداع الصيانة. يحل XMF هذا مع طرق الأداة المساعدة.

الطريقة القديمة (تعتمد على الإصدار):

$dirname = basename(dirname(dirname(__FILE__)));
$module_handler = xoops_gethandler('module');
$module = $module_handler->getByDirname($dirname);
$pathIcon16 = $module->getInfo('icons16');
$img_src = $pathIcon16 . '/delete.png';

طريقة XMF:

$img_src = \Xmf\Module\Admin::iconUrl('delete.png', 16);

تعيد طريقة iconUrl() URL كاملة، لذلك لا تحتاج إلى القلق بشأن بناء المسار.

// أيقونات 16x16
$smallIcon = \Xmf\Module\Admin::iconUrl('edit.png', 16);
// أيقونات 32x32 (الافتراضي)
$largeIcon = \Xmf\Module\Admin::iconUrl('edit.png', 32);
// المسار فقط (بدون اسم ملف)
$iconPath = \Xmf\Module\Admin::iconUrl('', 16);

لملفات menu.php الإدارية:

الطريقة القديمة:

$dirname = basename(dirname(dirname(__FILE__)));
$module_handler = xoops_gethandler('module');
$module = $module_handler->getByDirname($dirname);
$pathIcon32 = $module->getInfo('icons32');
$adminmenu = [];
$adminmenu[] = [
'title' => _MI_DEMO_ADMIN_INDEX,
'link' => 'admin/index.php',
'icon' => '../../' . $pathIcon32 . '/home.png'
];
$adminmenu[] = [
'title' => _MI_DEMO_ADMIN_ABOUT,
'link' => 'admin/about.php',
'icon' => '../../' . $pathIcon32 . '/about.png'
];

طريقة XMF:

// احصل على مسار الأيقونات
$pathIcon32 = '';
if (class_exists('Xmf\Module\Admin', true)) {
$pathIcon32 = \Xmf\Module\Admin::menuIconPath('');
}
$adminmenu = [];
$adminmenu[] = [
'title' => _MI_DEMO_ADMIN_INDEX,
'link' => 'admin/index.php',
'icon' => $pathIcon32 . 'home.png'
];
$adminmenu[] = [
'title' => _MI_DEMO_ADMIN_ABOUT,
'link' => 'admin/about.php',
'icon' => $pathIcon32 . 'about.png'
];

صفحات الإدارة القياسية

Section titled “صفحات الإدارة القياسية”

الصيغة القديمة:

$indexAdmin = new ModuleAdmin();
echo $indexAdmin->addNavigation('index.php');
echo $indexAdmin->renderIndex();

صيغة XMF:

$indexAdmin = \Xmf\Module\Admin::getInstance();
$indexAdmin->displayNavigation('index.php');
$indexAdmin->displayIndex();

الصيغة القديمة:

$aboutAdmin = new ModuleAdmin();
echo $aboutAdmin->addNavigation('about.php');
echo $aboutAdmin->renderAbout('6XYZRW5DR3VTJ', false);

صيغة XMF:

$aboutAdmin = \Xmf\Module\Admin::getInstance();
$aboutAdmin->displayNavigation('about.php');
\Xmf\Module\Admin::setPaypal('6XYZRW5DR3VTJ');
$aboutAdmin->displayAbout(false);

ملاحظة: في إصدارات XOOPS المستقبلية، يتم تعيين معلومات PayPal في xoops_version.php. استدعاء setPaypal() يضمن التوافق مع الإصدارات الحالية بينما ليس له تأثير في الإصدارات الأحدث.

$admin = \Xmf\Module\Admin::getInstance();
// عرض التنقل للصفحة الحالية
$admin->displayNavigation('items.php');
// أو احصل على سلسلة HTML
$navHtml = $admin->renderNavigation('items.php');

إنشاء صناديق المعلومات

Section titled “إنشاء صناديق المعلومات”
$admin = \Xmf\Module\Admin::getInstance();
// أضف صندوق معلومات
$admin->addInfoBox('Module Statistics');
// أضف أسطر إلى صندوق المعلومات
$admin->addInfoBoxLine('Total Items: ' . $itemCount, 'default', 'green');
$admin->addInfoBoxLine('Active Users: ' . $userCount, 'default', 'blue');
// عرض صندوق المعلومات
$admin->displayInfoBox();

تعرض صناديق التكوين متطلبات النظام وفحوصات الحالة.

$admin = \Xmf\Module\Admin::getInstance();
// أضف رسالة بسيطة
$admin->addConfigBoxLine('Module is properly configured', 'default');
// فحص وجود الدليل
$admin->addConfigBoxLine('/uploads/mymodule', 'folder');
// فحص الدليل مع الأذونات
$admin->addConfigBoxLine(['/uploads/mymodule', '0755'], 'chmod');
// فحص تثبيت الوحدة
$admin->addConfigBoxLine('xlanguage', 'module');
// فحص الوحدة مع تحذير بدلاً من خطأ إذا كانت مفقودة
$admin->addConfigBoxLine(['xlanguage', 'warning'], 'module');
$admin = \Xmf\Module\Admin::getInstance();
// أضف رسالة خطأ
$admin->addConfigError('Upload directory is not writable');
// أضف رسالة نجاح/قبول
$admin->addConfigAccept('Database tables verified');
// أضف رسالة تحذير
$admin->addConfigWarning('Cache directory should be cleared');
// فحص إصدار الوحدة
$admin->addConfigModuleVersion('xlanguage', '1.0');
النوعالقيمةالسلوك
defaultسلسلة الرسالةعرض الرسالة مباشرة
folderمسار الدليلعرض قبول إذا كان موجوداً، خطأ إذا لم يكن
chmod[path, permission]فحص وجود الدليل مع الإذن
moduleاسم الوحدةقبول إذا تم تثبيتها، خطأ إذا لم تكن
module[name, 'warning']قبول إذا تم تثبيتها، تحذير إذا لم تكن

أضف أزرار إجراء إلى صفحات الإدارة:

$admin = \Xmf\Module\Admin::getInstance();
// أضف أزرار
$admin->addItemButton('Add New Item', 'item.php?op=new', 'add');
$admin->addItemButton('Import Items', 'import.php', 'import');
// عرض الأزرار (محاذاة يسار افتراضية)
$admin->displayButton('left');
// أو احصل على HTML
$buttonHtml = $admin->renderButton('right', ' | ');

أمثلة صفحات الإدارة الكاملة

Section titled “أمثلة صفحات الإدارة الكاملة”
<?php
require_once dirname(dirname(dirname(__DIR__))) . '/include/cp_header.php';
require_once dirname(__DIR__) . '/include/common.php';
$adminObject = \Xmf\Module\Admin::getInstance();
// عرض التنقل
$adminObject->displayNavigation(basename(__FILE__));
// أضف صندوق معلومات مع الإحصائيات
$adminObject->addInfoBox(_MI_MYMODULE_DASHBOARD);
$itemHandler = $helper->getHandler('items');
$itemCount = $itemHandler->getCount();
$adminObject->addInfoBoxLine(sprintf(_MI_MYMODULE_TOTAL_ITEMS, $itemCount));
$categoryHandler = $helper->getHandler('categories');
$categoryCount = $categoryHandler->getCount();
$adminObject->addInfoBoxLine(sprintf(_MI_MYMODULE_TOTAL_CATEGORIES, $categoryCount));
// فحص التكوين
$uploadDir = XOOPS_UPLOAD_PATH . '/mymodule';
$adminObject->addConfigBoxLine($uploadDir, 'folder');
$adminObject->addConfigBoxLine([$uploadDir, '0755'], 'chmod');
// فحص الوحدات الاختيارية
$adminObject->addConfigBoxLine(['xlanguage', 'warning'], 'module');
// عرض صفحة الفهرس
$adminObject->displayIndex();
require_once __DIR__ . '/admin_footer.php';
<?php
require_once dirname(dirname(dirname(__DIR__))) . '/include/cp_header.php';
require_once dirname(__DIR__) . '/include/common.php';
$adminObject = \Xmf\Module\Admin::getInstance();
// احصل على العملية
$op = \Xmf\Request::getCmd('op', 'list');
switch ($op) {
case 'list':
default:
$adminObject->displayNavigation(basename(__FILE__));
// أضف أزرار العمل
$adminObject->addItemButton(_MI_MYMODULE_ADD_ITEM, 'items.php?op=new', 'add');
$adminObject->displayButton('left');
// اعرض العناصر
$itemHandler = $helper->getHandler('items');
$criteria = new CriteriaCompo();
$criteria->setSort('created');
$criteria->setOrder('DESC');
$criteria->setLimit(20);
$items = $itemHandler->getObjects($criteria);
// عرض الجدول
echo '<table class="outer">';
echo '<tr><th>' . _MI_MYMODULE_TITLE . '</th><th>' . _MI_MYMODULE_ACTIONS . '</th></tr>';
foreach ($items as $item) {
$editUrl = 'items.php?op=edit&amp;id=' . $item->getVar('item_id');
$deleteUrl = 'items.php?op=delete&amp;id=' . $item->getVar('item_id');
echo '<tr>';
echo '<td>' . $item->getVar('title') . '</td>';
echo '<td>';
echo '<a href="' . $editUrl . '"><img src="' . \Xmf\Module\Admin::iconUrl('edit.png', 16) . '" alt="Edit"></a> ';
echo '<a href="' . $deleteUrl . '"><img src="' . \Xmf\Module\Admin::iconUrl('delete.png', 16) . '" alt="Delete"></a>';
echo '</td>';
echo '</tr>';
}
echo '</table>';
break;
case 'new':
case 'edit':
// كود معالجة النموذج...
break;
}
require_once __DIR__ . '/admin_footer.php';
<?php
require_once dirname(dirname(dirname(__DIR__))) . '/include/cp_header.php';
require_once dirname(__DIR__) . '/include/common.php';
$adminObject = \Xmf\Module\Admin::getInstance();
$adminObject->displayNavigation(basename(__FILE__));
// عيّن معرف PayPal للتبرعات (اختياري)
\Xmf\Module\Admin::setPaypal('YOUR_PAYPAL_ID');
// عرض صفحة حول
// مرر false لإخفاء شعار XOOPS، true لإظهاره
$adminObject->displayAbout(false);
require_once __DIR__ . '/admin_footer.php';
<?php
defined('XOOPS_ROOT_PATH') || exit('XOOPS root path not defined');
// احصل على مسار الأيقونة باستخدام XMF
$pathIcon32 = '';
if (class_exists('Xmf\Module\Admin', true)) {
$pathIcon32 = \Xmf\Module\Admin::menuIconPath('');
}
$adminmenu = [];
// لوحة المعلومات
$adminmenu[] = [
'title' => _MI_MYMODULE_ADMIN_INDEX,
'link' => 'admin/index.php',
'icon' => $pathIcon32 . 'home.png'
];
// العناصر
$adminmenu[] = [
'title' => _MI_MYMODULE_ADMIN_ITEMS,
'link' => 'admin/items.php',
'icon' => $pathIcon32 . 'content.png'
];
// الفئات
$adminmenu[] = [
'title' => _MI_MYMODULE_ADMIN_CATEGORIES,
'link' => 'admin/categories.php',
'icon' => $pathIcon32 . 'category.png'
];
// الأذونات
$adminmenu[] = [
'title' => _MI_MYMODULE_ADMIN_PERMISSIONS,
'link' => 'admin/permissions.php',
'icon' => $pathIcon32 . 'permissions.png'
];
// حول
$adminmenu[] = [
'title' => _MI_MYMODULE_ADMIN_ABOUT,
'link' => 'admin/about.php',
'icon' => $pathIcon32 . 'about.png'
];
الطريقةالوصف
getInstance()احصل على مثيل الإدارة
iconUrl($name, $size)احصل على عنوان URL للأيقونة (الحجم: 16 أو 32)
menuIconPath($image)احصل على مسار الأيقونة لـ menu.php
setPaypal($paypal)عيّن معرف PayPal لصفحة حول
الطريقةالوصف
displayNavigation($menu)عرض قائمة التنقل
renderNavigation($menu)إرجاع HTML التنقل
addInfoBox($title)أضف صندوق معلومات
addInfoBoxLine($text, $type, $color)أضف سطر إلى صندوق المعلومات
displayInfoBox()عرض صندوق المعلومات
renderInfoBox()إرجاع HTML صندوق المعلومات
addConfigBoxLine($value, $type)أضف سطر فحص التكوين
addConfigError($value)أضف خطأ إلى صندوق التكوين
addConfigAccept($value)أضف نجاح إلى صندوق التكوين
addConfigWarning($value)أضف تحذير إلى صندوق التكوين
addConfigModuleVersion($moddir, $version)فحص إصدار الوحدة
addItemButton($title, $link, $icon, $extra)أضف زر إجراء
displayButton($position, $delimiter)عرض الأزرار
renderButton($position, $delimiter)إرجاع HTML الأزرار
displayIndex()عرض صفحة الفهرس
renderIndex()إرجاع HTML صفحة الفهرس
displayAbout($logo_xoops)عرض صفحة حول
renderAbout($logo_xoops)إرجاع HTML صفحة حول
  • ../Basics/XMF-Module-Helper - فئة مساعد الوحدة
  • Permission-Helper - إدارة الأذونات
  • ../XMF-Framework - نظرة عامة على الإطار

#xmf #admin #module-development #navigation #icons