Module Admin Pages
The Xmf\Module\Admin class provides a consistent way to create module administration interfaces. Using XMF for admin pages ensures forward compatibility with future XOOPS versions while maintaining a uniform user experience.
Overview
Section titled “Overview”The ModuleAdmin class in XOOPS Frameworks made administration easier, but its API has evolved across versions. The Xmf\Module\Admin wrapper:
- Provides a stable API that works across XOOPS versions
- Automatically handles API differences between versions
- Ensures your admin code is forward-compatible
- Offers convenient static methods for common tasks
Getting Started
Section titled “Getting Started”Creating an Admin Instance
Section titled “Creating an Admin Instance”$admin = \Xmf\Module\Admin::getInstance();This returns either an Xmf\Module\Admin instance or a native system class if already compatible.
Icon Management
Section titled “Icon Management”The Icon Location Problem
Section titled “The Icon Location Problem”Icons have moved between XOOPS versions, causing maintenance headaches. XMF solves this with utility methods.
Finding Icons
Section titled “Finding Icons”Old way (version-dependent):
$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 way:
$img_src = \Xmf\Module\Admin::iconUrl('delete.png', 16);The iconUrl() method returns a full URL, so you don’t need to worry about path construction.
Icon Sizes
Section titled “Icon Sizes”// 16x16 icons$smallIcon = \Xmf\Module\Admin::iconUrl('edit.png', 16);
// 32x32 icons (default)$largeIcon = \Xmf\Module\Admin::iconUrl('edit.png', 32);
// Just the path (no filename)$iconPath = \Xmf\Module\Admin::iconUrl('', 16);Menu Icons
Section titled “Menu Icons”For admin menu.php files:
Old way:
$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 way:
// Get path to icons$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'];Standard Admin Pages
Section titled “Standard Admin Pages”Index Page
Section titled “Index Page”Old format:
$indexAdmin = new ModuleAdmin();
echo $indexAdmin->addNavigation('index.php');echo $indexAdmin->renderIndex();XMF format:
$indexAdmin = \Xmf\Module\Admin::getInstance();
$indexAdmin->displayNavigation('index.php');$indexAdmin->displayIndex();About Page
Section titled “About Page”Old format:
$aboutAdmin = new ModuleAdmin();
echo $aboutAdmin->addNavigation('about.php');echo $aboutAdmin->renderAbout('6XYZRW5DR3VTJ', false);XMF format:
$aboutAdmin = \Xmf\Module\Admin::getInstance();
$aboutAdmin->displayNavigation('about.php');\Xmf\Module\Admin::setPaypal('6XYZRW5DR3VTJ');$aboutAdmin->displayAbout(false);Note: In future XOOPS versions, PayPal information is set in xoops_version.php. The
setPaypal()call ensures compatibility with current versions while having no effect in newer ones.
Navigation
Section titled “Navigation”Display Navigation Menu
Section titled “Display Navigation Menu”$admin = \Xmf\Module\Admin::getInstance();
// Display navigation for current page$admin->displayNavigation('items.php');
// Or get HTML string$navHtml = $admin->renderNavigation('items.php');Info Boxes
Section titled “Info Boxes”Creating Info Boxes
Section titled “Creating Info Boxes”$admin = \Xmf\Module\Admin::getInstance();
// Add an info box$admin->addInfoBox('Module Statistics');
// Add lines to the info box$admin->addInfoBoxLine('Total Items: ' . $itemCount, 'default', 'green');$admin->addInfoBoxLine('Active Users: ' . $userCount, 'default', 'blue');
// Display the info box$admin->displayInfoBox();Config Boxes
Section titled “Config Boxes”Config boxes display system requirements and status checks.
Basic Config Lines
Section titled “Basic Config Lines”$admin = \Xmf\Module\Admin::getInstance();
// Add a simple message$admin->addConfigBoxLine('Module is properly configured', 'default');
// Check if directory exists$admin->addConfigBoxLine('/uploads/mymodule', 'folder');
// Check directory with permissions$admin->addConfigBoxLine(['/uploads/mymodule', '0755'], 'chmod');
// Check if module is installed$admin->addConfigBoxLine('xlanguage', 'module');
// Check module with warning instead of error if missing$admin->addConfigBoxLine(['xlanguage', 'warning'], 'module');Convenience Methods
Section titled “Convenience Methods”$admin = \Xmf\Module\Admin::getInstance();
// Add error message$admin->addConfigError('Upload directory is not writable');
// Add success/accept message$admin->addConfigAccept('Database tables verified');
// Add warning message$admin->addConfigWarning('Cache directory should be cleared');
// Check module version$admin->addConfigModuleVersion('xlanguage', '1.0');Config Box Types
Section titled “Config Box Types”| Type | Value | Behavior |
|---|---|---|
default | Message string | Displays message directly |
folder | Directory path | Shows accept if exists, error if not |
chmod | [path, permission] | Checks directory exists with permission |
module | Module name | Accept if installed, error if not |
module | [name, 'warning'] | Accept if installed, warning if not |
Item Buttons
Section titled “Item Buttons”Add action buttons to admin pages:
$admin = \Xmf\Module\Admin::getInstance();
// Add buttons$admin->addItemButton('Add New Item', 'item.php?op=new', 'add');$admin->addItemButton('Import Items', 'import.php', 'import');
// Display buttons (left aligned by default)$admin->displayButton('left');
// Or get HTML$buttonHtml = $admin->renderButton('right', ' | ');Complete Admin Page Examples
Section titled “Complete Admin Page Examples”index.php
Section titled “index.php”<?phprequire_once dirname(dirname(dirname(__DIR__))) . '/include/cp_header.php';require_once dirname(__DIR__) . '/include/common.php';
$adminObject = \Xmf\Module\Admin::getInstance();
// Display navigation$adminObject->displayNavigation(basename(__FILE__));
// Add info box with statistics$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));
// Check configuration$uploadDir = XOOPS_UPLOAD_PATH . '/mymodule';$adminObject->addConfigBoxLine($uploadDir, 'folder');$adminObject->addConfigBoxLine([$uploadDir, '0755'], 'chmod');
// Check optional modules$adminObject->addConfigBoxLine(['xlanguage', 'warning'], 'module');
// Display the index page$adminObject->displayIndex();
require_once __DIR__ . '/admin_footer.php';items.php
Section titled “items.php”<?phprequire_once dirname(dirname(dirname(__DIR__))) . '/include/cp_header.php';require_once dirname(__DIR__) . '/include/common.php';
$adminObject = \Xmf\Module\Admin::getInstance();
// Get operation$op = \Xmf\Request::getCmd('op', 'list');
switch ($op) { case 'list': default: $adminObject->displayNavigation(basename(__FILE__));
// Add action buttons $adminObject->addItemButton(_MI_MYMODULE_ADD_ITEM, 'items.php?op=new', 'add'); $adminObject->displayButton('left');
// List items $itemHandler = $helper->getHandler('items'); $criteria = new CriteriaCompo(); $criteria->setSort('created'); $criteria->setOrder('DESC'); $criteria->setLimit(20);
$items = $itemHandler->getObjects($criteria);
// Display table 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&id=' . $item->getVar('item_id'); $deleteUrl = 'items.php?op=delete&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': // Form handling code... break;}
require_once __DIR__ . '/admin_footer.php';about.php
Section titled “about.php”<?phprequire_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__));
// Set PayPal ID for donations (optional)\Xmf\Module\Admin::setPaypal('YOUR_PAYPAL_ID');
// Display about page// Pass false to hide XOOPS logo, true to show it$adminObject->displayAbout(false);
require_once __DIR__ . '/admin_footer.php';menu.php
Section titled “menu.php”<?phpdefined('XOOPS_ROOT_PATH') || exit('XOOPS root path not defined');
// Get icon path using XMF$pathIcon32 = '';if (class_exists('Xmf\Module\Admin', true)) { $pathIcon32 = \Xmf\Module\Admin::menuIconPath('');}
$adminmenu = [];
// Dashboard$adminmenu[] = [ 'title' => _MI_MYMODULE_ADMIN_INDEX, 'link' => 'admin/index.php', 'icon' => $pathIcon32 . 'home.png'];
// Items$adminmenu[] = [ 'title' => _MI_MYMODULE_ADMIN_ITEMS, 'link' => 'admin/items.php', 'icon' => $pathIcon32 . 'content.png'];
// Categories$adminmenu[] = [ 'title' => _MI_MYMODULE_ADMIN_CATEGORIES, 'link' => 'admin/categories.php', 'icon' => $pathIcon32 . 'category.png'];
// Permissions$adminmenu[] = [ 'title' => _MI_MYMODULE_ADMIN_PERMISSIONS, 'link' => 'admin/permissions.php', 'icon' => $pathIcon32 . 'permissions.png'];
// About$adminmenu[] = [ 'title' => _MI_MYMODULE_ADMIN_ABOUT, 'link' => 'admin/about.php', 'icon' => $pathIcon32 . 'about.png'];API Reference
Section titled “API Reference”Static Methods
Section titled “Static Methods”| Method | Description |
|---|---|
getInstance() | Get admin instance |
iconUrl($name, $size) | Get icon URL (size: 16 or 32) |
menuIconPath($image) | Get icon path for menu.php |
setPaypal($paypal) | Set PayPal ID for about page |
Instance Methods
Section titled “Instance Methods”| Method | Description |
|---|---|
displayNavigation($menu) | Display navigation menu |
renderNavigation($menu) | Return navigation HTML |
addInfoBox($title) | Add info box |
addInfoBoxLine($text, $type, $color) | Add line to info box |
displayInfoBox() | Display info box |
renderInfoBox() | Return info box HTML |
addConfigBoxLine($value, $type) | Add config check line |
addConfigError($value) | Add error to config box |
addConfigAccept($value) | Add success to config box |
addConfigWarning($value) | Add warning to config box |
addConfigModuleVersion($moddir, $version) | Check module version |
addItemButton($title, $link, $icon, $extra) | Add action button |
displayButton($position, $delimiter) | Display buttons |
renderButton($position, $delimiter) | Return button HTML |
displayIndex() | Display index page |
renderIndex() | Return index page HTML |
displayAbout($logo_xoops) | Display about page |
renderAbout($logo_xoops) | Return about page HTML |
See Also
Section titled “See Also”- ../Basics/XMF-Module-Helper - Module helper class
- Permission-Helper - Permission management
- ../XMF-Framework - Framework overview
#xmf #admin #module-development #navigation #icons