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
Section titled “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
Section titled “Getting a Module Helper”Basic Usage
Section titled “Basic Usage”use Xmf\Module\Helper;
// Get helper for a specific module$helper = Helper::getHelper('mymodule');
// The helper is automatically associated with the module directoryFrom Current Module
Section titled “From Current Module”If you don’t specify a module name, it uses the current active module:
$helper = Helper::getHelper('');// or$helper = Helper::getHelper(basename(__DIR__));Configuration Access
Section titled “Configuration Access”Traditional XOOPS Way
Section titled “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
Section titled “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
Section titled “Helper Methods”getModule()
Section titled “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)
Section titled “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)
Section titled “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)
Section titled “loadLanguage($name)”Loads a language file for the module.
$helper->loadLanguage('main');$helper->loadLanguage('admin');$helper->loadLanguage('modinfo');isCurrentModule()
Section titled “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()
Section titled “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
Section titled “Path and URL Methods”url($url)
Section titled “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.phppath($path)
Section titled “path($path)”Returns an absolute filesystem path for a module-relative path.
$templatePath = $helper->path('templates/view.tpl');$includePath = $helper->path('include/functions.php');require_once $includePath;uploadUrl($url)
Section titled “uploadUrl($url)”Returns an absolute URL for module upload files.
$fileUrl = $helper->uploadUrl('documents/manual.pdf');uploadPath($path)
Section titled “uploadPath($path)”Returns an absolute filesystem path for module upload files.
$uploadDir = $helper->uploadPath('');$filePath = $helper->uploadPath('images/photo.jpg');redirect($url, $time, $message)
Section titled “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
Section titled “Debugging Support”setDebug($bool)
Section titled “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)
Section titled “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
Section titled “Related Helper Classes”XMF provides specialized helpers that extend Xmf\Module\Helper\AbstractHelper:
Permission Helper
Section titled “Permission Helper”See ../Recipes/Permission-Helper for detailed documentation.
$permHelper = new \Xmf\Module\Helper\Permission('mymodule');
// Check permissionif ($permHelper->checkPermission('view', $itemId)) { // User has permission}
// Check and redirect if no permission$permHelper->checkPermissionRedirect('edit', $itemId, 'index.php', 3, 'Access denied');Session Helper
Section titled “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
Section titled “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
Section titled “Complete Example”Here’s a comprehensive example using the module helper:
<?phpuse 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 authorizedif ($helper->isUserAdmin()) { $xoopsTpl->assign('admin_url', $helper->url('admin/index.php'));}
require_once XOOPS_ROOT_PATH . '/footer.php';AbstractHelper Base Class
Section titled “AbstractHelper Base Class”All XMF helper classes extend Xmf\Module\Helper\AbstractHelper, which provides:
Constructor
Section titled “Constructor”public function __construct($dirname)Instantiates with a module directory name. If empty, uses the current module.
dirname()
Section titled “dirname()”Returns the module directory name associated with the helper.
$dirname = $helper->dirname();init()
Section titled “init()”Called by the constructor after the module is loaded. Override in custom helpers for initialization logic.
Creating Custom Helpers
Section titled “Creating Custom Helpers”You can extend the helper for module-specific functionality:
<?phpnamespace 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
Section titled “See Also”- Getting-Started-with-XMF - Basic XMF usage
- XMF-Request - Request handling
- ../Recipes/Permission-Helper - Permission management
- ../Recipes/Module-Admin-Pages - Admin interface creation
#xmf #module-helper #configuration #handlers #session #cache