Módulo Hola Mundo
Tutorial de módulo Hola Mundo
Sección titulada «Tutorial de módulo Hola Mundo»Este tutorial lo guía a través de la creación de su primer módulo XOOPS. Al final, tendrá un módulo que muestre “Hola Mundo” tanto en el área frontal como de administrador.
Requisitos previos
Sección titulada «Requisitos previos»- XOOPS 2.5.x instalado y ejecutándose
- PHP 8.0 o superior
- Conocimiento básico de PHP
- Editor de texto o IDE (PhpStorm recomendado)
Step 1: Create the Directory Structure
Sección titulada «Step 1: Create the Directory Structure»Create the following directory structure in /modules/helloworld/:
/modules/helloworld/ /admin/ admin_header.php admin_footer.php index.php menu.php /assets/ /images/ logo.png /language/ /english/ admin.php main.php modinfo.php /templates/ /admin/ helloworld_admin_index.tpl helloworld_index.tpl index.php xoops_version.phpStep 2: Create the Module Definition
Sección titulada «Step 2: Create the Module Definition»Create xoops_version.php:
<?php/** * Hello World Module - Module Definition * * @package HelloWorld * @author Your Name * @copyright 2025 Your Name * @license GPL 2.0 or later */
if (!defined('XOOPS_ROOT_PATH')) { die('XOOPS root path not defined');}
$modversion = [];
// Basic Module Information$modversion['name'] = _MI_HELLOWORLD_NAME;$modversion['version'] = 1.00;$modversion['description'] = _MI_HELLOWORLD_DESC;$modversion['author'] = 'Your Name';$modversion['credits'] = 'XOOPS Community';$modversion['help'] = 'page=help';$modversion['license'] = 'GPL 2.0 or later';$modversion['license_url'] = 'https://www.gnu.org/licenses/gpl-2.0.html';$modversion['image'] = 'assets/images/logo.png';$modversion['dirname'] = 'helloworld';
// Module Status$modversion['release_date'] = '2025/01/28';$modversion['module_website_url'] = 'https://xoops.org/';$modversion['module_website_name'] = 'XOOPS';$modversion['min_php'] = '8.0';$modversion['min_xoops'] = '2.5.11';
// Admin Configuration$modversion['hasAdmin'] = 1;$modversion['adminindex'] = 'admin/index.php';$modversion['adminmenu'] = 'admin/menu.php';$modversion['system_menu'] = 1;
// Main Menu$modversion['hasMain'] = 1;
// Templates$modversion['templates'][] = [ 'file' => 'helloworld_index.tpl', 'description' => _MI_HELLOWORLD_INDEX_TPL,];
// Admin Templates$modversion['templates'][] = [ 'file' => 'admin/helloworld_admin_index.tpl', 'description' => _MI_HELLOWORLD_ADMIN_INDEX_TPL,];
// No database tables needed for this simple module$modversion['tables'] = [];Step 3: Create Language Files
Sección titulada «Step 3: Create Language Files»modinfo.php (Module Information)
Sección titulada «modinfo.php (Module Information)»Create language/english/modinfo.php:
<?php/** * Module Information Language Constants */
// Module Infodefine('_MI_HELLOWORLD_NAME', 'Hello World');define('_MI_HELLOWORLD_DESC', 'A simple Hello World module for learning XOOPS development.');
// Template Descriptionsdefine('_MI_HELLOWORLD_INDEX_TPL', 'Main index page template');define('_MI_HELLOWORLD_ADMIN_INDEX_TPL', 'Admin index page template');main.php (Frontend Language)
Sección titulada «main.php (Frontend Language)»Create language/english/main.php:
<?php/** * Frontend Language Constants */
define('_MD_HELLOWORLD_TITLE', 'Hello World');define('_MD_HELLOWORLD_WELCOME', 'Welcome to the Hello World Module!');define('_MD_HELLOWORLD_MESSAGE', 'This is your first XOOPS module. Congratulations!');define('_MD_HELLOWORLD_CURRENT_TIME', 'Current server time:');define('_MD_HELLOWORLD_VISITOR_COUNT', 'You are visitor number:');admin.php (Admin Language)
Sección titulada «admin.php (Admin Language)»Create language/english/admin.php:
<?php/** * Admin Language Constants */
define('_AM_HELLOWORLD_INDEX', 'Dashboard');define('_AM_HELLOWORLD_ADMIN_TITLE', 'Hello World Administration');define('_AM_HELLOWORLD_ADMIN_WELCOME', 'Welcome to the Hello World Module Administration');define('_AM_HELLOWORLD_MODULE_INFO', 'Module Information');define('_AM_HELLOWORLD_VERSION', 'Version:');define('_AM_HELLOWORLD_AUTHOR', 'Author:');Step 4: Create the Frontend Index
Sección titulada «Step 4: Create the Frontend Index»Create index.php in the module root:
<?php/** * Hello World Module - Frontend Index * * @package HelloWorld * @author Your Name * @copyright 2025 Your Name * @license GPL 2.0 or later */
declare(strict_types=1);
use Xmf\Request;
require_once dirname(__DIR__, 2) . '/mainfile.php';
// Load language filexoops_loadLanguage('main', 'helloworld');
// Get the module helper$helper = \Xmf\Module\Helper::getHelper('helloworld');
// Set page template$GLOBALS['xoopsOption']['template_main'] = 'helloworld_index.tpl';
// Include XOOPS headerrequire XOOPS_ROOT_PATH . '/header.php';
// Get module configuration/** @var \XoopsModule $xoopsModule */$xoopsModule = $GLOBALS['xoopsModule'];
// Generate page content$pageTitle = _MD_HELLOWORLD_TITLE;$welcomeMessage = _MD_HELLOWORLD_WELCOME;$contentMessage = _MD_HELLOWORLD_MESSAGE;$currentTime = date('Y-m-d H:i:s');
// Simple visitor counter (using session)if (!isset($_SESSION['helloworld_visits'])) { $_SESSION['helloworld_visits'] = 0;}$_SESSION['helloworld_visits']++;$visitorCount = $_SESSION['helloworld_visits'];
// Assign variables to template$xoopsTpl->assign([ 'page_title' => $pageTitle, 'welcome_message' => $welcomeMessage, 'content_message' => $contentMessage, 'current_time' => $currentTime, 'visitor_count' => $visitorCount, 'time_label' => _MD_HELLOWORLD_CURRENT_TIME, 'visitor_label' => _MD_HELLOWORLD_VISITOR_COUNT,]);
// Include XOOPS footerrequire XOOPS_ROOT_PATH . '/footer.php';Step 5: Create the Frontend Template
Sección titulada «Step 5: Create the Frontend Template»Create templates/helloworld_index.tpl:
<{* Hello World Module - Index Template *}>
<div class="helloworld-container"> <h1><{$page_title}></h1>
<div class="helloworld-welcome"> <p class="lead"><{$welcome_message}></p> </div>
<div class="helloworld-content"> <p><{$content_message}></p> </div>
<div class="helloworld-info"> <ul> <li><strong><{$time_label}></strong> <{$current_time}></li> <li><strong><{$visitor_label}></strong> <{$visitor_count}></li> </ul> </div></div>
<style>.helloworld-container { max-width: 800px; margin: 0 auto; padding: 20px;}
.helloworld-welcome { background-color: #f8f9fa; border-left: 4px solid #007bff; padding: 15px; margin: 20px 0;}
.helloworld-content { margin: 20px 0;}
.helloworld-info { background-color: #e9ecef; padding: 15px; border-radius: 5px;}
.helloworld-info ul { list-style: none; padding: 0; margin: 0;}
.helloworld-info li { padding: 5px 0;}</style>Step 6: Create Admin Files
Sección titulada «Step 6: Create Admin Files»Admin Header
Sección titulada «Admin Header»Create admin/admin_header.php:
<?php/** * Admin Header */
declare(strict_types=1);
require_once dirname(__DIR__, 3) . '/include/cp_header.php';
// Load admin language filexoops_loadLanguage('admin', 'helloworld');xoops_loadLanguage('modinfo', 'helloworld');
// Get module helper$helper = \Xmf\Module\Helper::getHelper('helloworld');$adminObject = \Xmf\Module\Admin::getInstance();
// Module directory$moduleDirname = $helper->getDirname();$modulePath = XOOPS_ROOT_PATH . '/modules/' . $moduleDirname;$moduleUrl = XOOPS_URL . '/modules/' . $moduleDirname;Admin Footer
Sección titulada «Admin Footer»Create admin/admin_footer.php:
<?php/** * Admin Footer */
// Display admin footer$adminObject->displayFooter();
require_once dirname(__DIR__, 3) . '/include/cp_footer.php';Admin Menu
Sección titulada «Admin Menu»Create admin/menu.php:
<?php/** * Admin Menu Configuration */
if (!defined('XOOPS_ROOT_PATH')) { die('XOOPS root path not defined');}
$adminmenu = [];
// Dashboard$adminmenu[] = [ 'title' => _AM_HELLOWORLD_INDEX, 'link' => 'admin/index.php', 'icon' => 'home.png',];Admin Index Page
Sección titulada «Admin Index Page»Create admin/index.php:
<?php/** * Admin Index Page */
declare(strict_types=1);
require_once __DIR__ . '/admin_header.php';
// Display admin navigation$adminObject->displayNavigation('index.php');
// Create admin info box$adminObject->addInfoBox(_AM_HELLOWORLD_MODULE_INFO);$adminObject->addInfoBoxLine( sprintf('<strong>%s</strong> %s', _AM_HELLOWORLD_VERSION, $helper->getModule()->getVar('version')));$adminObject->addInfoBoxLine( sprintf('<strong>%s</strong> %s', _AM_HELLOWORLD_AUTHOR, $helper->getModule()->getVar('author')));
// Display info box$adminObject->displayInfoBox(_AM_HELLOWORLD_MODULE_INFO);
// Display admin footerrequire_once __DIR__ . '/admin_footer.php';Step 7: Create Admin Template
Sección titulada «Step 7: Create Admin Template»Create templates/admin/helloworld_admin_index.tpl:
<{* Hello World Module - Admin Index Template *}>
<div class="helloworld-admin"> <h2><{$admin_title}></h2> <p><{$admin_welcome}></p></div>Step 8: Create the Module Logo
Sección titulada «Step 8: Create the Module Logo»Create or copy a PNG image (recommended size: 92x92 pixels) to:
assets/images/logo.png
You can use any image editor to create a simple logo, or use a placeholder from a site like placeholder.com.
Step 9: Install the Module
Sección titulada «Step 9: Install the Module»- Log in to your XOOPS site as administrator
- Go to System Admin > Modules
- Find “Hello World” in the list of available modules
- Click the Install button
- Confirm the installation
Step 10: Test Your Module
Sección titulada «Step 10: Test Your Module»Frontend Test
Sección titulada «Frontend Test»- Navigate to your XOOPS site
- Click on “Hello World” in the main menu
- You should see the welcome message and current time
Admin Test
Sección titulada «Admin Test»- Go to the admin area
- Click on “Hello World” in the admin menu
- You should see the admin dashboard
Troubleshooting
Sección titulada «Troubleshooting»Module Not Appearing in Install List
Sección titulada «Module Not Appearing in Install List»- Check file permissions (755 for directories, 644 for files)
- Verify
xoops_version.phphas no syntax errors - Clear XOOPS cache
Template Not Loading
Sección titulada «Template Not Loading»- Ensure template files are in the correct directory
- Check template file names match those in
xoops_version.php - Verify Smarty syntax is correct
Language Strings Not Showing
Sección titulada «Language Strings Not Showing»- Check language file paths
- Ensure language constants are defined
- Verify the correct language folder exists
Next Steps
Sección titulada «Next Steps»Now that you have a working module, continue learning with:
- Building-a-CRUD-Module - Add database functionality
- ../Patterns/MVC-Pattern - Organize your code properly
- ../Best-Practices/Testing - Add PHPUnit tests
Complete File Reference
Sección titulada «Complete File Reference»Your completed module should have these files:
/modules/helloworld/ /admin/ admin_header.php admin_footer.php index.php menu.php /assets/ /images/ logo.png /language/ /english/ admin.php main.php modinfo.php /templates/ /admin/ helloworld_admin_index.tpl helloworld_index.tpl index.php xoops_version.phpSummary
Sección titulada «Summary»Congratulations! You have created your first XOOPS module. Key concepts covered:
- Module Structure - Standard XOOPS module directory layout
- xoops_version.php - Module definition and configuration
- Language Files - Internationalization support
- Templates - Smarty template integration
- Admin Interface - Basic admin panel
See also: ../Module-Development | Building-a-CRUD-Module | ../Patterns/MVC-Pattern