XMF Module Helper¶
The Xmf\Module\Helper class provides an easy way to access module-related information, configurations, handlers, and more. Using the module helper simplifies your code and reduces boilerplate.
Overview¶
The module helper provides:
- Simplified configuration access
- Module object retrieval
- Handler instantiation
- Path and URL resolution
- Permission and session helpers
- Cache management
Getting a Module Helper¶
Basic Usage¶
use Xmf\Module\Helper;
// Get helper for a specific module
$helper = Helper::getHelper('mymodule');
// The helper is automatically associated with the module directory
From Current Module¶
If you don't specify a module name, it uses the current active module:
Configuration Access¶
Traditional XOOPS Way¶
Getting module configuration the old way is verbose:
$module_handler = xoops_gethandler('module');
$module = $module_handler->getByDirname('mymodule');
$config_handler = xoops_gethandler('config');
$moduleConfig = $config_handler->getConfigsByCat(0, $module->getVar('mid'));
$value = isset($moduleConfig['foo']) ? $moduleConfig['foo'] : 'default';
echo "The value of 'foo' is: " . $value;
XMF Way¶
With the module helper, the same task becomes simple:
$helper = \Xmf\Module\Helper::getHelper('mymodule');
echo "The value of 'foo' is: " . $helper->getConfig('foo', 'default');
Helper Methods¶
getModule()¶
Returns the XoopsModule object for the helper's module.
$module = $helper->getModule();
$version = $module->getVar('version');
$name = $module->getVar('name');
$mid = $module->getVar('mid');
getConfig($name, $default)¶
Returns a module configuration value or all configs.
// Get single config with default
$itemsPerPage = $helper->getConfig('items_per_page', 10);
$enableCache = $helper->getConfig('enable_cache', true);
// Get all configs as array
$allConfigs = $helper->getConfig('');
getHandler($name)¶
Returns an object handler for the module.
$itemHandler = $helper->getHandler('items');
$categoryHandler = $helper->getHandler('categories');
// Use the handler
$item = $itemHandler->get($id);
$items = $itemHandler->getObjects($criteria);
loadLanguage($name)¶
Loads a language file for the module.
isCurrentModule()¶
Checks if this module is the currently active module.
if ($helper->isCurrentModule()) {
// We're in the module's own pages
} else {
// Called from another module or location
}
isUserAdmin()¶
Checks if the current user has admin rights for this module.
if ($helper->isUserAdmin()) {
// Show admin options
echo '<a href="' . $helper->url('admin/index.php') . '">Admin</a>';
}
Path and URL Methods¶
url($url)¶
Returns an absolute URL for a module-relative path.
$logoUrl = $helper->url('images/logo.png');
// Returns: https://example.com/modules/mymodule/images/logo.png
$adminUrl = $helper->url('admin/index.php');
// Returns: https://example.com/modules/mymodule/admin/index.php
path($path)¶
Returns an absolute filesystem path for a module-relative path.
$templatePath = $helper->path('templates/view.tpl');
// Returns: /var/www/html/modules/mymodule/templates/view.tpl
$includePath = $helper->path('include/functions.php');
require_once $includePath;
uploadUrl($url)¶
Returns an absolute URL for module upload files.
uploadPath($path)¶
Returns an absolute filesystem path for module upload files.
redirect($url, $time, $message)¶
Redirects within the module to a module-relative URL.
$helper->redirect('index.php', 3, 'Item saved successfully');
$helper->redirect('view.php?id=' . $newId, 2, 'Created!');
Debugging Support¶
setDebug($bool)¶
Enable or disable debug mode for the helper.
$helper->setDebug(true); // Enable
$helper->setDebug(false); // Disable
$helper->setDebug(); // Enable (default is true)
addLog($log)¶
Add a message to the module log.
$helper->addLog('Processing item ID: ' . $id);
$helper->addLog('Cache miss, loading from database');
Related Helper Classes¶
XMF provides specialized helpers that extend Xmf\Module\Helper\AbstractHelper:
Permission Helper¶
See Permission-Helper for detailed documentation.
$permHelper = new \Xmf\Module\Helper\Permission('mymodule');
// Check permission
if ($permHelper->checkPermission('view', $itemId)) {
// User has permission
}
// Check and redirect if no permission
$permHelper->checkPermissionRedirect('edit', $itemId, 'index.php', 3, 'Access denied');
Session Helper¶
Module-aware session storage with automatic key prefixing.
$session = new \Xmf\Module\Helper\Session('mymodule');
// Store value
$session->set('last_viewed', $itemId);
// Retrieve value
$lastViewed = $session->get('last_viewed', 0);
// Delete value
$session->del('last_viewed');
// Clear all module session data
$session->destroy();
Cache Helper¶
Module-aware caching with automatic key prefixing.
$cache = new \Xmf\Module\Helper\Cache('mymodule');
// Write to cache (TTL in seconds)
$cache->write('item_' . $id, $itemData, 3600);
// Read from cache
$data = $cache->read('item_' . $id, null);
// Delete from cache
$cache->delete('item_' . $id);
// Read with automatic regeneration
$data = $cache->cacheRead(
'expensive_data',
function() {
// This runs only if cache miss
return computeExpensiveData();
},
3600
);
Complete Example¶
Here's a comprehensive example using the module helper:
<?php
use Xmf\Request;
use Xmf\Module\Helper;
use Xmf\Module\Helper\Permission;
use Xmf\Module\Helper\Session;
require_once dirname(dirname(__DIR__)) . '/mainfile.php';
// Initialize helpers
$helper = Helper::getHelper('mymodule');
$permHelper = new Permission('mymodule');
$session = new Session('mymodule');
// Load language
$helper->loadLanguage('main');
// Get configuration
$itemsPerPage = $helper->getConfig('items_per_page', 10);
$enableComments = $helper->getConfig('enable_comments', true);
// Handle request
$op = Request::getCmd('op', 'list');
$id = Request::getInt('id', 0);
require_once XOOPS_ROOT_PATH . '/header.php';
switch ($op) {
case 'view':
// Check permission
if (!$permHelper->checkPermission('view', $id)) {
redirect_header($helper->url('index.php'), 3, _NOPERM);
}
// Track in session
$session->set('last_viewed', $id);
// Get handler and item
$itemHandler = $helper->getHandler('items');
$item = $itemHandler->get($id);
if (!$item) {
redirect_header($helper->url('index.php'), 3, 'Item not found');
}
// Display item
$xoopsTpl->assign('item', $item->toArray());
break;
case 'list':
default:
$itemHandler = $helper->getHandler('items');
$criteria = new CriteriaCompo();
$criteria->setLimit($itemsPerPage);
$criteria->setSort('created');
$criteria->setOrder('DESC');
$items = $itemHandler->getObjects($criteria);
$xoopsTpl->assign('items', $items);
// Show last viewed if exists
$lastViewed = $session->get('last_viewed', 0);
if ($lastViewed > 0) {
$xoopsTpl->assign('last_viewed', $lastViewed);
}
break;
}
// Admin link if authorized
if ($helper->isUserAdmin()) {
$xoopsTpl->assign('admin_url', $helper->url('admin/index.php'));
}
require_once XOOPS_ROOT_PATH . '/footer.php';
AbstractHelper Base Class¶
All XMF helper classes extend Xmf\Module\Helper\AbstractHelper, which provides:
Constructor¶
Instantiates with a module directory name. If empty, uses the current module.
dirname()¶
Returns the module directory name associated with the helper.
init()¶
Called by the constructor after the module is loaded. Override in custom helpers for initialization logic.
Creating Custom Helpers¶
You can extend the helper for module-specific functionality:
<?php
// mymodule/class/Helper.php
namespace XoopsModules\Mymodule;
class Helper extends \Xmf\Module\Helper\GenericHelper
{
public function init()
{
// Custom initialization
}
public function getItemUrl($id)
{
return $this->url('item.php?id=' . $id);
}
public function getUploadDirectory()
{
$path = $this->uploadPath('');
if (!is_dir($path)) {
mkdir($path, 0755, true);
}
return $path;
}
}
See Also¶
- Getting-Started-with-XMF - Basic XMF usage
- XMF-Request - Request handling
- Permission-Helper - Permission management
- Module-Admin-Pages - Admin interface creation