Skip to content

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:

$helper = Helper::getHelper('');
// or
$helper = Helper::getHelper(basename(__DIR__));

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.

$helper->loadLanguage('main');
$helper->loadLanguage('admin');
$helper->loadLanguage('modinfo');

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.

$fileUrl = $helper->uploadUrl('documents/manual.pdf');

uploadPath($path)

Returns an absolute filesystem path for module upload files.

$uploadDir = $helper->uploadPath('');
$filePath = $helper->uploadPath('images/photo.jpg');

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');

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

public function __construct($dirname)

Instantiates with a module directory name. If empty, uses the current module.

dirname()

Returns the module directory name associated with the helper.

$dirname = $helper->dirname();

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


xmf #module-helper #configuration #handlers #session #cache