Mejores prácticas de integración frontal
Mejores prácticas de integración frontal en XOOPS
Sección titulada «Mejores prácticas de integración frontal en XOOPS»Los módulos modernos de XOOPS requieren integración frontal limpia con diseño responsivo, patrones JavaScript adecuados y funcionalidad AJAX.
Bootstrap 5 Integration
Sección titulada «Bootstrap 5 Integration»{* Include Bootstrap CSS *}<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
{* Your content *}<div class="container mt-4"> <h1>My Module</h1></div>
{* Include Bootstrap JS *}<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>Bootstrap Form Example
Sección titulada «Bootstrap Form Example»<div class="card"> <div class="card-body"> <form method="POST" class="needs-validation"> <div class="mb-3"> <label for="username" class="form-label">Username</label> <input type="text" class="form-control" id="username" name="username"> </div>
<div class="mb-3"> <label for="email" class="form-label">Email</label> <input type="email" class="form-control" id="email" name="email"> </div>
<button type="submit" class="btn btn-primary">Submit</button> </form> </div></div>Bootstrap Table Example
Sección titulada «Bootstrap Table Example»<div class="table-responsive"> <table class="table table-striped"> <thead class="table-dark"> <tr> <th>ID</th> <th>Username</th> <th>Email</th> <th>Actions</th> </tr> </thead> <tbody> {foreach from=$users item=user} <tr> <td>{$user.id|escape}</td> <td>{$user.username|escape}</td> <td>{$user.email|escape}</td> <td> <a href="?op=edit&id={$user.id}" class="btn btn-sm btn-warning">Edit</a> <a href="?op=delete&id={$user.id}" class="btn btn-sm btn-danger">Delete</a> </td> </tr> {/foreach} </tbody> </table></div>JavaScript Best Practices
Sección titulada «JavaScript Best Practices»// Module patternconst MyModule = { init: function() { this.initTooltips(); this.initEventListeners(); },
initTooltips: function() { // Initialize Bootstrap tooltips },
initEventListeners: function() { // Attach event handlers document.addEventListener('click', (e) => { if (e.target.classList.contains('btn-delete')) { return confirm('Delete this item?'); } }); },
notify: function(message, type = 'info') { const alertClass = `alert-${type}`; const html = ` <div class="alert ${alertClass} alert-dismissible fade show"> ${message} <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> `; document.body.insertAdjacentHTML('afterbegin', html); }};
// Initialize when DOM readydocument.addEventListener('DOMContentLoaded', () => MyModule.init());AJAX Implementation
Sección titulada «AJAX Implementation»const AjaxHelper = { request: function(url, options = {}) { const defaults = { method: 'GET', headers: { 'Content-Type': 'application/json' } };
const config = { ...defaults, ...options };
return fetch(url, { method: config.method, headers: config.headers, body: config.body ? JSON.stringify(config.body) : null }) .then(response => response.json()) .catch(error => console.error('Error:', error)); },
get: function(url) { return this.request(url, { method: 'GET' }); },
post: function(url, data) { return this.request(url, { method: 'POST', body: data }); }};
// UsageAjaxHelper.get('/modules/mymodule/api/users') .then(response => { if (response.success) { MyModule.notify('Loaded successfully', 'success'); } });AJAX API Controller
Sección titulada «AJAX API Controller»<?phpclass ApiController{ public function getUsersAction() { try { $users = $this->userService->getActiveUsers();
return [ 'success' => true, 'data' => array_map(fn($u) => $u->toArray(), $users), ]; } catch (\Exception $e) { http_response_code(500); return ['success' => false, 'message' => $e->getMessage()]; } }
public function createUserAction() { try { $input = json_decode(file_get_contents('php://input'), true); $userDTO = $this->userService->register( $input['username'], $input['email'], $input['password'] );
http_response_code(201); return ['success' => true, 'data' => $userDTO->toArray()]; } catch (\Exception $e) { http_response_code(400); return ['success' => false, 'message' => $e->getMessage()]; } }}?>Best Practices
Sección titulada «Best Practices»- Use Bootstrap for consistent responsive design
- Use modern JavaScript (ES6+), not jQuery
- Use Fetch API instead of XMLHttpRequest
- Always validate server-side
- Show loading states in AJAX requests
- Provide clear error messages
- Use semantic HTML
- Optimize images and assets
- Use HTTPS for all requests
Related Documentation
Sección titulada «Related Documentation»See also:
- Code-Organization for asset organization
- Error-Handling for error display
- ../Patterns/MVC-Pattern for controller integration
Tags: #best-practices #frontend #bootstrap #javascript #ajax #module-development